Lanjelin / NBNO.py

NB.no nedlaster
GNU General Public License v3.0
39 stars 11 forks source link

Støtte for å kjøre «gjennom» pålogget side #19

Open worldlydev opened 2 weeks ago

worldlydev commented 2 weeks ago

Er det mulig å kjøre NBNO.py i en pålogget sesjon? Jeg ønsker å laste ned en bok som jeg har fått tilgang til gjennom søknad. Jeg er pålogget https://nb.no/ med Feide.

Jeg har forsøkt å oppdatere NBNO.py med støtte for Selenium, slik at programmet kan kjøres gjennom Microsoft Edge ved hjelp av Edge WebDriver. Målet var å laste ned bøker som jeg har tilgang til med en konto som allerede er pålogget. Jeg har også forsøkt å laste opp informasjonskapslene i programmet som en JSON-fil hentet fra https://nb.no/, men ingen av disse metodene har vært vellykkede.

Har du noen tanker eller forslag til hvordan jeg kan få dette til å fungere?

Lanjelin commented 2 weeks ago

Har dessverre ikke noe å teste mot, da jeg ikke har tilgang til noe slik selv.
Ser forøvrig for meg at det enkleste er å logge inn som vanlig via nettleser, navigere til aktuell bok, og sjekke utviklerverktøy -> Network i nettleseren, for å hente ut autentiseringen fra request-headers, og hardkode det inn i python-scriptet.

En god start vil jeg tro er authorization, og deler eller hele innholdet i cookie.

Disse legges da til rett under og tilsvarende linje 49

self.session.headers["User-Agent"] = "Mozilla/5.0"
self.session.headers["authorization"] = "4JjcVi6faGF-GhD6wMoXZ80rUkg.*AAJTSQACMDIAAlNLABxYVTdmZDdDY2dCT1hwR04vanNSNVpvUTlQNFU9AAR0eXBlAANDVFMAAlMxAAIwMQ..*"

Har hatt hell med tilsvarende løsning for å laste ned innhold bak Bank-id innlogging.

CodieMonster commented 1 week ago

Hei. Jeg er også interessert i dette. Jeg forsøkte din løsning med "authorization" cookie gjennom Feide, men det fungerer dårlig. Tror du der finnes en annen løsning? Hadde vært helt gull å være i stand til å laste ned bøker gjemt bak plikt tilgang.

Det var forresten ekstremt enkelt å få tilgang. Jeg søkte bare til biblioteket ved mitt universitet. Det var ingen skriftlig søknad, var bare klikk, så innvilget de tilganfgdagen etterpå. No questions asked.

Lanjelin commented 1 day ago

Fikk lurt meg til tilgang selv, og testet litt.

Som innlogget, åpne boka der en kan lese den, åpne Utviklerverktøy og finn Nettverkfanen.
Refresh siden, og nettverksfanen populeres med innhold.
Finn og velg manifest?fields=etcetc i listen, og bla her igjen ned og finn Request Headers.

Her kopieres innholdet fra authorization og cookie og legges inn etter linje 49 på følgende måte:

self.session.headers["User-Agent"] = "Mozilla/5.0"
self.session.headers["authorization"] = "4JjcVi6faGF-GhD6wMoXZ80rUkg.*AAJTSQACMDIAAlNLABxxRandomRandomxxSNVpvUTlQxxRandomRandomxxDVFMAAlMxAAIwMQ..*"
self.session.headers["cookie"] = "_ga=GA1.1.1234543217.123454321; _hjSessionUser_123454321=eyJpZCI6IjUzOTZmxxRandomRandomxxy1hNDEwLTc0ZjA4NTJhxxRandomRandomxxOjE3MjYwNTEyNzcxxRandomRandomxxW5nIjp0cnVlfQ==; OAUTH_LOGOUT_URL=https://login.idporten.no/logout; _nblb=66cdecxxRandomRandomxx712345432190; amlbcookie=11; ORIG_URL=/am?realm=/NBdigital&service=id-porten&goto=https://www.nb.no/auth/profile.html&authIndexType=service&authIndexValue=id-porten; NTID=BYCQHC0xxRandomRandomxxKYsps7X; nbsso=6E8TxxRandomRandomxxG-VLkQMCsanDsFaI.*AAJTSQACMDIAAlNLABxxRandomRandomxx10TTFrSFJHTE13a2s9AAR0xxRandomRandomxxAAIwMQ..*; _hjSession_1544051=eyJpZCI6ImRmYmEwNGxxRandomRandomxxMzY3LThhM2VkNTlmMTBjOxxRandomRandomxxQ1MDc3NzYsInMiOjAsxxRandomRandomxxic2UiOjAsImZzIjowfQ==; _ga_N1JYYLDVNV=GS1.1.123454321.4.1.123454321.0.0.0; JSESSIONID=eyiSsSJkxxRandomRandomxxeFLYt123454321"

Dukker forhåpentligvis opp en litt mer sømløs måte å hente disse verdiene inn i scriptet etterhvert, f.eks mates via .txt-filer og eget argument, men litt mye på gjøremålslisten for tiden, så blir nok soon™