Python

Prijava na spletna mesta s Pythonom

Prijava na spletna mesta s Pythonom
Funkcija prijave je pomembna funkcionalnost današnjih spletnih aplikacij. Ta funkcija pomaga preprečiti uporabo posebne vsebine ne-uporabnikom spletnega mesta in se uporablja tudi za prepoznavanje premium uporabnikov. Če nameravate spletno spletno mesto strgati, lahko naletite na funkcijo prijave, če je vsebina na voljo samo registriranim uporabnikom.

Vadnice za strganje po spletu so bile obravnavane že v preteklosti, zato ta vadnica zajema samo vidik dostopa do spletnih mest tako, da se prijavite s kodo, namesto da bi to počeli ročno z brskalnikom.

Da bi razumeli to vadnico in lahko pisali skripte za prijavo na spletna mesta, bi morali malo razumeti HTML. Mogoče ne dovolj za izdelavo čudovitih spletnih mest, vendar dovolj za razumevanje strukture osnovne spletne strani.

Namestitev

To bi naredili s knjižnicami Requests in BeautifulSoup Python. Poleg teh knjižnic Python bi potrebovali dober brskalnik, kot sta Google Chrome ali Mozilla Firefox, saj bi bili pomembni za začetno analizo pred pisanjem kode.

Knjižnici Requests in BeautifulSoup lahko namestite z ukazom pip iz terminala, kot je prikazano spodaj:

zahteve za namestitev pipa
pip namestite BeautifulSoup4

Za potrditev uspeha namestitve aktivirajte interaktivno lupino Pythona, ki se izvede s tipkanjem python v terminal.

Nato uvozite obe knjižnici:

zahteve za uvoz
iz bs4 uvozi BeautifulSoup

Uvoz je uspešen, če ni napak.

Postopek

Prijava na spletno mesto s skripti zahteva poznavanje HTML-ja in predstavo o tem, kako splet deluje. Oglejmo si na kratko, kako deluje splet.

Spletne strani so sestavljene iz dveh glavnih delov, na strani odjemalca in strani strežnika. Na strani odjemalca je del spletnega mesta, s katerim uporabnik komunicira, na strani strežnika pa del spletnega mesta, kjer se izvajajo poslovna logika in druge strežniške operacije, kot je dostop do baze podatkov.

Ko poskusite odpreti spletno mesto prek njegove povezave, pošljete zahtevo strežniški strani, da vam ponese datoteke HTML in druge statične datoteke, kot sta CSS in JavaScript. Ta zahteva je znana kot zahteva GET. Ko pa izpolnite obrazec, naložite predstavnostno datoteko ali dokument, ustvarite objavo in kliknete recimo gumb za oddajo, podatke pošiljate na strežniško stran. Ta zahteva je znana kot zahteva POST.

Razumevanje teh dveh konceptov bi bilo pomembno pri pisanju našega scenarija.

Pregled spletnega mesta

Za vaje konceptov tega članka bi uporabili spletno mesto Quotes To Scrape.

Za prijavo na spletna mesta so potrebne informacije, kot sta uporabniško ime in geslo.

Ker pa se to spletno mesto uporablja le kot dokaz koncepta, gre vse. Zato bi uporabljali skrbnik kot uporabniško ime in 12345 kot geslo.

Najprej je pomembno, da si ogledate vir strani, saj bi to imelo pregled nad strukturo spletne strani. To lahko storite tako, da z desno miškino tipko kliknete spletno stran in kliknete »Ogled vira strani«. Nato pregledate prijavni obrazec. To naredite tako, da z desno miškino tipko kliknete eno od prijavnih polj in kliknete Preglej element. Pri pregledu elementa bi morali videti vhod in nato nadrejeni oblika oznako nekje nad njo. To kaže, da so prijave v osnovi oblike OBJAVIed na strežniško stran spletnega mesta.

Zdaj, upoštevajte ime atribut vhodnih oznak za polja z uporabniškim imenom in geslom, bi jih potrebovali med pisanjem kode. Za to spletno mesto ime atribut za uporabniško ime in geslo sta uporabniško ime in geslo oz.

Nato moramo vedeti, ali obstajajo še drugi parametri, ki bi bili pomembni za prijavo. Naj hitro razložimo to. Da bi povečali varnost spletnih mest, se običajno generirajo žetoni, ki preprečujejo napade med spletnimi ponarejanjem.

Če torej ti žetoni niso dodani zahtevi POST, prijava ne bi uspela. Kako torej vemo za take parametre?

Uporabiti bi morali zavihek Network. Če želite ta zavihek dobiti v brskalniku Google Chrome ali Mozilla Firefox, odprite Orodja za razvijalce in kliknite zavihek Omrežje.

Ko ste na zavihku omrežja, poskusite osvežiti trenutno stran in opazili boste, da prihajajo zahteve. Poskusite paziti na pošiljanje zahtev POST, ko se poskusimo prijaviti.

Tukaj je tisto, kar bi naredili, medtem ko bi imeli zavihek Network odprt. Vnesite podatke za prijavo in se poskusite prijaviti, prva zahteva, ki bi jo videli, bi morala biti zahteva POST.

 

Kliknite zahtevo POST in si oglejte parametre obrazca. Opazili boste, da ima spletno mesto csrf_token parameter z vrednostjo. Ta vrednost je dinamična vrednost, zato bi jih morali zajeti s pomočjo GET zahtevajte najprej pred uporabo OBJAVI prošnja.

Za druga spletna mesta, na katerih bi delali, verjetno ne boste videli csrf_token lahko pa obstajajo tudi drugi žetoni, ki se dinamično generirajo. Sčasoma bi bolje spoznali parametre, ki so pri poskusu prijave resnično pomembni.

Koda

Najprej moramo uporabiti Requests in BeautifulSoup, da dobimo dostop do vsebine strani za prijavo.

iz zahtev za uvoz Session
iz bs4 uvozi BeautifulSoup kot bs
 
s sejo () kot s:
stran = s.get ("http: // quotes.toscrape.com / login ")
natisni (stran.vsebina)

To bi natisnilo vsebino strani za prijavo, preden se prijavimo in če iščete ključno besedo »Prijava«. Ključna beseda bi bila najdena v vsebini strani, kar kaže, da se še nismo prijavili.

Nato bi iskali csrf_token ključna beseda, ki je bila najdena kot eden od parametrov pri prejšnji uporabi zavihka omrežja. Če ključna beseda prikazuje ujemanje z vhod tag, potem lahko vrednost izvlečemo vsakič, ko zaženemo skript s pomočjo BeautifulSoup.

iz zahtev za uvoz Session
iz bs4 uvozi BeautifulSoup kot bs
 
s sejo () kot s:
stran = s.get ("http: // quotes.toscrape.com / login ")
bs_content = bs (site.vsebina, "html.razčlenjevalnik ")
žeton = bs_content.najdi ("input", "name": "csrf_token") ["value"]
login_data = "username": "admin", "password": "12345", "csrf_token": token
s.post ("http: // quotes.toscrape.com / login ", login_data)
domača stran = s.get ("http: // quotes.toscrape.com ")
natisni (domača stran.vsebina)

To bi natisnilo vsebino strani po prijavi in ​​če iščete ključno besedo »Odjava«. Ključna beseda bi bila najdena v vsebini strani, kar kaže, da smo se lahko uspešno prijavili.

Oglejmo si vsako vrstico kode.

iz zahtev za uvoz Session
iz bs4 uvozi BeautifulSoup kot bs

Vrstice zgornje kode se uporabljajo za uvoz predmeta Session iz knjižnice zahtev in predmeta BeautifulSoup iz knjižnice bs4 z uporabo vzdevka bs.

s sejo () kot s:

Seja zahtev se uporablja, kadar nameravate obdržati kontekst zahteve, tako da lahko shranite piškotke in vse podatke te seje zahteve.

bs_content = bs (site.vsebina, "html.razčlenjevalnik ")
žeton = bs_content.najdi ("input", "name": "csrf_token") ["value"]

Ta koda tukaj uporablja knjižnico BeautifulSoup, tako da csrf_token je mogoče izvleči s spletne strani in nato dodeliti spremenljivki žetona. Več o pridobivanju podatkov iz vozlišč lahko izvedete s programom BeautifulSoup.

login_data = "username": "admin", "password": "12345", "csrf_token": token
s.post ("http: // quotes.toscrape.com / login ", login_data)

Koda tukaj ustvari slovar parametrov, ki bodo uporabljeni za prijavo. Ključi slovarjev so ime atributi vhodnih oznak in vrednosti so vrednost atribute vhodnih oznak.

The objava metoda se uporablja za pošiljanje zahteve za objavo s parametri in prijavo.

domača stran = s.get ("http: // quotes.toscrape.com ")
natisni (domača stran.vsebina)

Po prijavi te zgornje vrstice zgoraj preprosto izvlečejo podatke s strani, da dokažejo, da je bila prijava uspešna.

Zaključek

Postopek prijave na spletna mesta s pomočjo Pythona je precej enostaven, vendar nastavitev spletnih mest ni enaka, zato bi se nekatera spletna mesta prijavila težje kot druga. Za premagovanje kakršnih koli izzivov pri prijavi je še več mogoče storiti.

Najpomembnejše pri vsem tem je znanje HTML-ja, zahtev, BeautifulSoup-a in sposobnost razumevanja informacij, dobljenih na zavihku Network v orodjih za razvijalce vašega spletnega brskalnika.

HD Remastered Games za Linux, ki prej še niso izdale Linuxa
Mnogi razvijalci iger in založniki pripravijo HD remaster starih iger, da podaljšajo življenjsko dobo franšize, zato oboževalci zahtevajo združljivost...
Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...