Prisijungimas prie svetainių naudojant „Python“

Logging Into Websites With Python



Prisijungimo funkcija yra svarbi šių dienų žiniatinklio programų funkcija. Ši funkcija padeda apsaugoti specialų turinį nuo nenaudojančių svetainės ir taip pat naudojama išskirtiniams vartotojams identifikuoti. Todėl, jei ketinate žiniatinkliu nuskaityti svetainę, galite susidurti su prisijungimo funkcija, jei turinys prieinamas tik registruotiems vartotojams.

Anksčiau buvo nagrinėjamos žiniatinklio grandymo pamokos, todėl ši pamoka apima tik prieigos prie svetainių aspektą prisijungus prie kodo, o ne rankiniu būdu naudojant naršyklę.







Kad suprastumėte šią mokymo programą ir galėtumėte rašyti prisijungimo prie svetainių scenarijus, jums reikia šiek tiek suprasti HTML. Galbūt to nepakanka norint sukurti nuostabias svetaines, bet pakankamai, kad suprastumėte pagrindinio tinklalapio struktūrą.



Tai būtų padaryta naudojant „Requests“ ir „BeautifulSoup Python“ bibliotekas. Be tų „Python“ bibliotekų, jums reikia geros naršyklės, tokios kaip „Google Chrome“ ar „Mozilla Firefox“, nes jos būtų svarbios pradinei analizei prieš rašant kodą.



„Requests“ ir „BeautifulSoup“ bibliotekas galima įdiegti naudojant terminalo komandą pip, kaip parodyta žemiau:





pip diegimo užklausos
pip įdiegti „BeautifulSoup4“

Norėdami patvirtinti diegimo sėkmę, suaktyvinkite „Python“ interaktyvųjį apvalkalą, kuris įvedamas pitonas į terminalą.

Tada importuokite abi bibliotekas:



importasprašymus
nuobs4importasGraži sriuba

Importavimas sėkmingas, jei nėra klaidų.

Procesas

Norint prisijungti prie svetainės naudojant scenarijus, reikia žinoti HTML ir suprasti, kaip veikia žiniatinklis. Trumpai panagrinėkime, kaip veikia žiniatinklis.

Svetainės susideda iš dviejų pagrindinių dalių-kliento ir serverio. Kliento pusė yra svetainės dalis, su kuria naudotojas sąveikauja, o serverio pusė yra svetainės dalis, kurioje vykdoma verslo logika ir kitos serverio operacijos, pvz., Prieiga prie duomenų bazės.

Kai bandote atidaryti svetainę per jos nuorodą, jūs pateikiate serverio užklausą, kad ji atsiųstų jums HTML failus ir kitus statinius failus, pvz., CSS ir „JavaScript“. Ši užklausa žinoma kaip GET užklausa. Tačiau pildydami formą, įkeldami medijos failą ar dokumentą, kurdami įrašą ir spustelėdami, tarkime, pateikimo mygtuką, siunčiate informaciją į serverio pusę. Ši užklausa žinoma kaip POST užklausa.

Rašant mūsų scenarijų būtų svarbu suprasti šias dvi sąvokas.

Interneto svetainės tikrinimas

Norėdami praktikuoti šio straipsnio sąvokas, naudosime Citatos įbrėžti Interneto svetainė.

Norint prisijungti prie svetainių, reikalinga tokia informacija kaip vartotojo vardas ir slaptažodis.

Tačiau kadangi ši svetainė naudojama tik kaip koncepcijos įrodymas, viskas vyksta. Todėl mes ir naudotume admin kaip vartotojo vardą ir 12345 kaip slaptažodį.

Pirma, svarbu peržiūrėti puslapio šaltinį, nes tai padėtų apžvelgti tinklalapio struktūrą. Tai galima padaryti dešiniuoju pelės klavišu spustelėjus tinklalapį ir spustelėjus Peržiūrėti puslapio šaltinį. Tada apžiūrėkite prisijungimo formą. Tai galite padaryti dešiniuoju pelės klavišu spustelėdami vieną iš prisijungimo laukelių ir spustelėdami Tikrinti elementą . Tikrindami elementą, turėtumėte pamatyti įvesties žymos, o tada vienas iš tėvų forma žymėti kažkur virš jo. Tai rodo, kad prisijungimai iš esmės yra formos POST į serverio pusę.

Dabar atkreipkite dėmesį į vardas vartotojo vardo ir slaptažodžio laukelių įvesties žymų atributą, jų prireiktų rašant kodą. Šiai svetainei, vardas vartotojo vardo ir slaptažodžio atributas Vartotojo vardas ir Slaptažodis atitinkamai.

Toliau turime žinoti, ar yra kitų parametrų, kurie būtų svarbūs prisijungiant. Greitai tai paaiškinkime. Siekiant padidinti svetainių saugumą, paprastai sukuriami žetonai, siekiant užkirsti kelią kryžminėms svetainių klastojimo atakoms.

Todėl, jei šie žetonai nebus pridėti prie POST užklausos, prisijungimas nepavyks. Taigi, kaip mes žinome apie tokius parametrus?

Turime naudoti skirtuką Tinklas. Norėdami gauti šį skirtuką „Google Chrome“ arba „Mozilla Firefox“, atidarykite kūrėjo įrankius ir spustelėkite skirtuką Tinklas.

Kai būsite tinklo skirtuke, pabandykite atnaujinti dabartinį puslapį ir pastebėsite, kad ateina užklausos. Pabandykite saugotis, ar POST užklausos bus atsiųstos, kai bandysime prisijungti.

Štai ką mes darytume toliau, atidarę skirtuką Tinklas. Įveskite prisijungimo duomenis ir pabandykite prisijungti, pirmoji jūsų užklausa turėtų būti POST užklausa.

Spustelėkite POST užklausą ir peržiūrėkite formos parametrus. Jūs pastebėsite, kad svetainėje yra csrf_token parametras su reikšme. Ši vertė yra dinamiška, todėl tokias vertes turėtume užfiksuoti naudodami GET prieš naudodami POST prašymas.

Kitose svetainėse, kuriose dirbate, tikriausiai nematysite csrf_token tačiau gali būti ir kitų dinamiškai generuojamų žetonų. Laikui bėgant, jūs geriau žinosite parametrus, kurie iš tikrųjų yra svarbūs bandant prisijungti.

Kodas

Pirma, norėdami gauti prieigą prie prisijungimo puslapio turinio, turime naudoti „Requests“ ir „BeautifulSoup“.

nuoprašymusimportasSesija
nuobs4importasGraži sriubakaipbs

suSesija() kaips:
svetainėje =s.gauti(„http://quotes.toscrape.com/login“)
spausdinti(svetainėje.turinys)

Tai atspausdintų prisijungimo puslapio turinį prieš mums prisijungiant ir ieškant prisijungimo raktažodžio. Raktinis žodis būtų rastas puslapio turinyje, rodantis, kad mes dar neprisijungę.

Toliau mes ieškotume csrf_token raktinis žodis, kuris buvo rastas kaip vienas iš parametrų anksčiau naudojant tinklo skirtuką. Jei raktinis žodis rodo atitiktį su įvesties žymę, tada vertė gali būti išgauta kiekvieną kartą paleidus scenarijų naudojant „BeautifulSoup“.

nuoprašymusimportasSesija
nuobs4importasGraži sriubakaipbs

suSesija() kaips:
svetainėje =s.gauti(„http://quotes.toscrape.com/login“)
bs_content=bs(svetainėje.turinys, 'html.parser')
žetonas =bs_content.rasti('įvestis', {'vardas':'csrf_token'})['vertė']
login_data= {'Vartotojo vardas':'administratorius','Slaptažodis':„12345“, 'csrf_token':žetonas}
s.paštu(„http://quotes.toscrape.com/login“,login_data)
pagrindinis puslapis=s.gauti(„http://quotes.toscrape.com“)
spausdinti(pagrindinis puslapis.turinys)

Tai atspausdintų puslapio turinį prisijungus ir ieškant raktažodžio „Atsijungti“. Raktinis žodis būtų rastas puslapio turinyje, rodantis, kad mums pavyko sėkmingai prisijungti.

Pažvelkime į kiekvieną kodo eilutę.

nuoprašymusimportasSesija
nuobs4importasGraži sriubakaipbs

Aukščiau pateiktos kodo eilutės naudojamos importuoti sesijos objektą iš užklausų bibliotekos ir „BeautifulSoup“ objektą iš bs4 bibliotekos, naudojant slapyvardį bs .

suSesija() kaips:

Užklausų seansas naudojamas, kai ketinate išlaikyti užklausos kontekstą, todėl slapukai ir visa tos užklausos sesijos informacija gali būti saugomi.

bs_content=bs(svetainėje.turinys, 'html.parser')
žetonas =bs_content.rasti('įvestis', {'vardas':'csrf_token'})['vertė']

Šis kodas čia naudoja „BeautifulSoup“ biblioteką, todėl csrf_token galima išgauti iš tinklalapio ir tada priskirti token kintamajam. Galite sužinoti apie duomenų išgavimą iš mazgų naudodami „BeautifulSoup“.

login_data= {'Vartotojo vardas':'administratorius','Slaptažodis':„12345“, 'csrf_token':žetonas}
s.paštu(„http://quotes.toscrape.com/login“,login_data)

Čia esantis kodas sukuria prisijungimo parametrų žodyną. Žodynų raktai yra vardas įvesties žymų atributus ir reikšmes vertės įvesties žymų atributus.

The paštu metodas naudojamas siųsti užklausą su parametrais ir prisijungti prie mūsų.

pagrindinis puslapis=s.gauti(„http://quotes.toscrape.com“)
spausdinti(pagrindinis puslapis.turinys)

Po prisijungimo šios aukščiau pateiktos kodo eilutės tiesiog ištraukia informaciją iš puslapio, kad parodytų, jog prisijungimas buvo sėkmingas.

Išvada

Prisijungimas prie svetainių naudojant „Python“ yra gana lengvas, tačiau svetainių sąranka nėra ta pati, todėl kai kuriose svetainėse prisijungti bus sunkiau nei kitose. Norint nugalėti visus prisijungimo iššūkius, galima nuveikti daugiau.

Svarbiausia visame tai yra HTML, „Requests“, „BeautifulSoup“ žinios ir gebėjimas suprasti informaciją, gautą iš žiniatinklio naršyklės kūrėjo įrankių skirtuko „Tinklas“.