Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scraper per Attività con CF #22

Open
alexduca opened this issue Oct 29, 2024 · 3 comments
Open

Scraper per Attività con CF #22

alexduca opened this issue Oct 29, 2024 · 3 comments

Comments

@alexduca
Copy link

Ciao a tutti, mi chiedo se a distanza di tempo c'è qualcuno che ha realizzato uno scraper che permetta di accedere al portale dell'agenzia delle entrate per scaricare le fatture associate ad un azienda che non ha una partita Iva ma ha un codice fiscale. Sto provando ad integrare questa cosa allo script già esistente, ma non riesco a conservare lo status di autenticazione. Qualcuno ha un idea?

@marcomarsala
Copy link

marcomarsala commented Oct 29, 2024

eccomi 🙋🏻‍♂️ noi abbiamo realizzato uno script per scaricare le fatture dal Cassetto Fiscale per gli utenti che non hanno la partita iva -per esempio condomìni, enti, privati - e pertanto non hanno accesso al portale Fatture e Corrispettivi.

@alexduca
Copy link
Author

alexduca commented Oct 29, 2024

Potresti aiutarmi? ho realizzato un banale script che se eseguito scarica tutte le fatture del cassetto fiscale per l'azienda. Ho visto che per gli utenti che non hanno partita iva c'è un portale diverso. Vorrei sapere, se possibile, come effettui tu l'autenticazione e ne conservi la sessione/status. Sono riuscito a fare uno scraper che però naviga semplicemente nell'interfaccia e quando provo a richiamare gli endpoint per estrarre i dati mi restituisce un "403 Auth Error".

Questa è la parte del mio codice (non tutta, solamente le informazioni che reputo più importanti) che ho realizzato prendendo spunto dalle chiamate effettuate dal sito ufficiale (analizzandole nel DevTools di Chrome):

#qua inizializzo il processo e navigo verso il login
s.requests.Session()

s.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'})
s.headers.update({'Connection': 'keep-alive'})

cookie_obj1 =  requests.cookies.create_cookie(domain='portale.agenziaentrate.gov.it',name='LFR_SESSION_STATE_20159',value=unixTime())
s.cookies.set_cookie(cookie_obj1)

cookie_obj2 = requests.cookies.create_cookie(domain='portale.agenziaentrate.gov.it',name='LFR_SESSION_STATE_10811916',value=unixTime())
s.cookies.set_cookie(cookie_obj2)

r = s.get('https://portale.agenziaentrate.gov.it/portale/web/guest', verify=False)
if r.status_code == 200:
    puts(colored.yellow('Sei arrivato alla pagina di Login'))
else:
    puts(colored.red('Abbiamo riscontrato un errore!'))
    sys.exit()
cookieJar = s.cookies

# qua effettuo l'autenticazione
payload = {
    'goto':'',
    'gotoOnFail':'',
    'SunQueryParamsString':'',
    'encoded':'false',
    'gx_charset':'UTF-8',
    'newpost':'true',
    'IDToken1': ORGDataCodiceFiscale,
    'IDToken2': ORGDataPassword,
    'IDToken3': ORGDataCodicePIN
}    
r = s.post('https://iampe.agenziaentrate.gov.it/sam/UI/Login?realm=/agenziaentrate&service=pin', data=payload)
cookieJar = s.cookies

#successivamente con un s.get() torno all'home page

# poi sto provando ad effettuare una chiamata a degli endpoint più specifici:
r = s.get('https://portale.agenziaentrate.gov.it/portale-rest/rs/notifiche?v=' + unixTime())
if r.status_code == 200:
    puts(colored.yellow('initPortale riuscito.'))
else:
    puts(colored.red('initPortale non riuscito: uscita.')) 
    sys.exit()
cookieJar = s.cookies

# non funzionano, mi restituisce errore 409 o simili, quando dovrebbe darmi un oggetto json.

@marcomarsala
Copy link

Bisogna riprodurre tutte le chiamate effettuate da un normale browser, portandosi dietro tutti i cookie e gli stessi header. Io ho utilizzato PHP con la libreria cURL. Nel browser cookie vengono creati dal codice JavaScript quindi la libreria cURL non riesce a prenderli tutti da sola e vanno aggiunti manualmente. In alternativa un browser headless ma risulterà più pesante.

Io ce l’ho già pronto, ci sentiamo per mail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants