Prijava na web stranice pomoću Pythona

Logging Into Websites With Python



Značajka prijave važna je funkcija u današnjim web aplikacijama. Ova značajka pomaže u sprečavanju posebnog sadržaja od korisnika koji nisu korisnici web stranice, a također se koristi i za identifikaciju vrhunskih korisnika. Stoga, ako namjeravate web brisanje web stranice, mogli biste naići na značajku za prijavu ako je sadržaj dostupan samo registriranim korisnicima.

Vodiči za struganje weba bili su već obrađeni, stoga ovaj vodič pokriva samo aspekt pristupa web stranicama prijavljivanjem s kodom, umjesto da to radite ručno pomoću preglednika.







Da biste razumjeli ovaj vodič i mogli pisati skripte za prijavu na web stranice, potrebno vam je razumijevanje HTML -a. Možda nije dovoljno za izradu izvrsnih web stranica, ali dovoljno za razumijevanje strukture osnovne web stranice.



To bi se učinilo pomoću knjižnica Requests i BeautifulSoup Python. Osim onih knjižnica Python, trebat će vam i dobar preglednik kao što su Google Chrome ili Mozilla Firefox jer bi bili važni za početnu analizu prije pisanja koda.



Knjižnice Zahtjevi i BeautifulSoup mogu se instalirati pomoću naredbe pip s terminala kao što je dolje prikazano:





pip zahtjevi za instalaciju
pip install BeautifulSoup4

Da biste potvrdili uspjeh instalacije, aktivirajte Python -ovu interaktivnu ljusku što se postiže upisivanjem piton u terminal.

Zatim uvezite obje knjižnice:



uvozzahtjevi
izbs4uvozBeautifulSoup

Uvoz je uspješan ako nema pogrešaka.

Postupak

Prijava na web mjesto sa skriptama zahtijeva poznavanje HTML -a i predodžbu o tome kako web funkcionira. Pogledajmo ukratko kako web funkcionira.

Web stranice se sastoje od dva glavna dijela, na strani klijenta i na poslužitelju. Klijentska strana dio je web stranice s kojom korisnik stupa u interakciju, dok je strana poslužitelja dio web stranice na kojoj se izvršavaju poslovna logika i druge poslužiteljske operacije, poput pristupa bazi podataka.

Kada pokušate otvoriti web stranicu putem njene veze, upućujete zahtjev strani poslužitelja da vam dohvati HTML datoteke i druge statičke datoteke, poput CSS-a i JavaScript-a. Ovaj zahtjev je poznat kao GET zahtjev. Međutim, kada ispunjavate obrazac, učitavate medijsku datoteku ili dokument, stvarate objavu i kliknete, recimo gumb za slanje, šaljete podatke na stranu poslužitelja. Ovaj zahtjev je poznat kao POST zahtjev.

Razumijevanje ta dva koncepta bilo bi važno pri pisanju našeg scenarija.

Pregled web stranice

Za uvježbavanje koncepata ovog članka koristili bismo Citati za struganje web stranica.

Za prijavu na web stranice potrebni su podaci poput korisničkog imena i lozinke.

Međutim, budući da se ova web stranica koristi samo kao dokaz koncepta, sve ide kako treba. Stoga bismo koristili admin kao korisničko ime i 12345 kao lozinku.

Prvo, važno je pogledati izvor stranice jer bi se na taj način dao pregled strukture web stranice. To možete učiniti desnim klikom na web stranicu i klikom na Prikaži izvor stranice. Zatim pregledavate obrazac za prijavu. To možete učiniti tako da desnom tipkom miša kliknete jedan od okvira za prijavu i kliknete pregledati element . Prilikom pregleda elementa trebali biste vidjeti ulazni oznake, a zatim i roditelj oblik označite negdje iznad njega. To pokazuje da su prijave u osnovi oblici bića POST ed na web stranici poslužitelja.

Sada, imajte na umu Ime atribut ulaznih oznaka za okvire korisničkog imena i lozinke, oni bi bili potrebni pri pisanju koda. Za ovu web stranicu, Ime atribut za korisničko ime i lozinka su Korisničko ime i lozinka odnosno.

Zatim moramo znati postoje li drugi parametri koji bi bili važni za prijavu. Objasnimo ovo brzo. Kako bi se povećala sigurnost web stranica, obično se stvaraju žetoni za sprječavanje napada krivotvorenja na različitim stranicama.

Stoga, ako se ti tokeni ne dodaju u POST zahtjev, prijava neće uspjeti. Pa kako znamo o takvim parametrima?

Morali bismo koristiti karticu Mreža. Da biste ovu karticu postavili na Google Chrome ili Mozilla Firefox, otvorite Developer Tools i kliknite karticu Network.

Nakon što ste na kartici mreža, pokušajte osvježiti trenutnu stranicu i primijetit ćete da stižu zahtjevi. Pokušajte paziti na slanje POST zahtjeva kada se pokušamo prijaviti.

Evo što bismo sljedeće učinili, a da imamo otvorenu karticu Mreža. Unesite podatke za prijavu i pokušajte se prijaviti, prvi zahtjev koji biste vidjeli trebao bi biti POST zahtjev.

Kliknite na POST zahtjev i pogledajte parametre obrasca. Primijetili biste da web stranica ima csrf_token parametar s vrijednošću. Ta je vrijednost dinamička vrijednost, stoga bismo morali zabilježiti takve vrijednosti pomoću DOBITI prvo zatražite prije korištenja POST zahtjev.

Za druge web stranice na kojima biste radili vjerojatno nećete vidjeti csrf_token ali mogu postojati i drugi žetoni koji se dinamički generiraju. S vremenom ćete bolje upoznati parametre koji su uistinu važni pri pokušaju prijave.

Kod

Prvo, moramo koristiti Zahtjeve i BeautifulSoup za pristup sadržaju stranice stranice za prijavu.

izzahtjeviuvozSjednica
izbs4uvozBeautifulSoupkaobs

sSjednica() kaos:
mjestu =s.dobiti('http://quotes.toscrape.com/login')
ispisati(mjestu.sadržaj)

Ovo će ispisati sadržaj stranice za prijavu prije nego što se prijavimo i ako tražite ključnu riječ Prijava. Ključna riječ našla bi se u sadržaju stranice koja pokazuje da se tek trebamo prijaviti.

Zatim bismo tražili csrf_token ključna riječ koja je pronađena kao jedan od parametara prilikom ranije upotrebe kartice mreža. Ako ključna riječ prikazuje podudaranje s ulazni tag, tada se vrijednost može izdvojiti svaki put kada pokrenete skriptu pomoću BeautifulSoup -a.

izzahtjeviuvozSjednica
izbs4uvozBeautifulSoupkaobs

sSjednica() kaos:
mjestu =s.dobiti('http://quotes.toscrape.com/login')
bs_content=bs(mjestu.sadržaj, 'html.parser')
znak =bs_content.pronaći('ulazni', {'Ime':'csrf_token'})['vrijednost']
login_data= {'Korisničko ime':'admin','lozinka':'12345', 'csrf_token':znak}
s.post('http://quotes.toscrape.com/login',login_data)
home_page=s.dobiti('http://quotes.toscrape.com')
ispisati(home_page.sadržaj)

Ovo će ispisati sadržaj stranice nakon prijave i ako tražite ključnu riječ Odjava. Ključna riječ našla bi se u sadržaju stranice koja pokazuje da smo se uspjeli prijaviti.

Pogledajmo svaki redak koda.

izzahtjeviuvozSjednica
izbs4uvozBeautifulSoupkaobs

Gornji retci koda koriste se za uvoz objekta Session iz biblioteke zahtjeva i objekta BeautifulSoup iz biblioteke bs4 koristeći pseudonim bs .

sSjednica() kaos:

Sesija zahtjeva koristi se ako namjeravate zadržati kontekst zahtjeva, tako da se kolačići i svi podaci te sesije zahtjeva mogu pohraniti.

bs_content=bs(mjestu.sadržaj, 'html.parser')
znak =bs_content.pronaći('ulazni', {'Ime':'csrf_token'})['vrijednost']

Ovaj kôd ovdje koristi knjižnicu BeautifulSoup pa csrf_token mogu se izdvojiti s web stranice i zatim dodijeliti varijabli tokena. Možete saznati o izvlačenju podataka iz čvorova pomoću BeautifulSoup -a.

login_data= {'Korisničko ime':'admin','lozinka':'12345', 'csrf_token':znak}
s.post('http://quotes.toscrape.com/login',login_data)

Ovdje kôd stvara rječnik parametara koji će se koristiti za prijavu. Ključevi rječnika su Ime atributi ulaznih oznaka i vrijednosti su vrijednost atribute ulaznih oznaka.

The post metoda se koristi za slanje zahtjeva za poštom s parametrima i prijavu na nas.

home_page=s.dobiti('http://quotes.toscrape.com')
ispisati(home_page.sadržaj)

Nakon prijave, gore navedeni redovi koda jednostavno izdvajaju podatke sa stranice kako bi pokazali da je prijava bila uspješna.

Zaključak

Proces prijavljivanja na web stranice pomoću Pythona prilično je jednostavan, no postavljanje web stranica nije isto pa bi se neke stranice pokazale teže prijavljivati ​​od drugih. Postoji još mnogo toga što se može učiniti kako biste prevladali sve izazove s prijavom.

Najvažnije u svemu ovome je poznavanje HTML -a, zahtjeva, BeautifulSoup -a i sposobnost razumijevanja informacija dobivenih s kartice Mreža alata za razvoj vašeg web preglednika.