Selen

Úvod do selenu v Pythonu 3

Úvod do selenu v Pythonu 3
Selen je rámec používaný pro testování webových aplikací. Selenium automatizuje prohlížeč, například Chrome nebo Firefox, k provádění testů na požadovaném webu. Selen je také velmi výkonný nástroj pro škrábání webu. Selenium podporuje JavaScript a všechny moderní funkce prohlížeče. Tento nástroj je velmi účinný při získávání informací z webových stránek.

Tento článek vám ukáže, jak nastavit selen ve vaší distribuci Linuxu (tj.E., Ubuntu) a také jak provádět základní automatizaci webu a sešrotování webu pomocí knihovny Selenium Python 3.

Předpoklady

Chcete-li vyzkoušet příkazy a příklady použité v tomto článku, musíte mít následující:

1) Ve vašem počítači je nainstalována distribuce Linuxu (nejlépe Ubuntu).
2) Python 3 nainstalovaný ve vašem počítači.
3) PIP 3 nainstalovaný ve vašem počítači.
4) Ve vašem počítači je nainstalován webový prohlížeč Google Chrome nebo Firefox.

Mnoho článků o těchto tématech najdete na LinuxHint.com. Pokud potřebujete další pomoc, nezapomeňte si tyto články prohlédnout.

Příprava virtuálního prostředí Pythonu 3 na projekt

Virtuální prostředí Pythonu se používá k vytvoření izolovaného adresáře projektu Pythonu. Moduly Pythonu, které nainstalujete pomocí PIP, se nainstalují pouze do adresáře projektu, nikoli globálně.

Python virtuální modul slouží ke správě virtuálních prostředí Pythonu.

Můžete si nainstalovat Python virtuální modul globálně pomocí PIP 3, a to následovně:

$ sudo pip3 install virtualenv

PIP3 stáhne a globálně nainstaluje všechny požadované moduly.

V tomto okamžiku Python virtuální modul by měl být nainstalován globálně.

Vytvořte adresář projektu python-selen-basic / ve vašem aktuálním pracovním adresáři takto:

$ mkdir -pv python-selenium-basic / ovladače

Přejděte do nově vytvořeného adresáře projektu python-selen-basic /, jak následuje:

$ cd python-selenium-basic /

Vytvořte virtuální prostředí Pythonu v adresáři projektu pomocí následujícího příkazu:

$ virtualenv .env

Virtuální prostředí Pythonu by nyní mělo být vytvořeno ve vašem adresáři projektu.''

Aktivujte virtuální prostředí Pythonu v adresáři projektu pomocí následujícího příkazu:

$ zdroj .env / bin / aktivovat

Jak vidíte, pro tento adresář projektu je aktivováno virtuální prostředí Pythonu.

Instalace knihovny Selen Python Library

Knihovna Selenium Python je k dispozici v oficiálním úložišti Python PyPI.

Tuto knihovnu můžete nainstalovat pomocí PIP 3 následujícím způsobem:

$ pip3 nainstalujte selen

Nyní by měla být nainstalována knihovna Selenium Python.

Nyní, když je nainstalována knihovna Selenium Python, je další věcí, kterou musíte udělat, nainstalovat webový ovladač pro svůj oblíbený webový prohlížeč. V tomto článku vám ukážu, jak nainstalovat webové ovladače Firefox a Chrome pro selen.

Instalace ovladače Firefox Gecko

Ovladač Firefox Gecko vám umožňuje ovládat nebo automatizovat webový prohlížeč Firefox pomocí selenu.

Chcete-li stáhnout ovladač Firefox Gecko, navštivte webovou stránku Mozit / Geckodriver s verzemi GitHub z webového prohlížeče.

Jak vidíte, v0.26.0 je nejnovější verze ovladače Firefox Gecko v době, kdy byl napsán tento článek.

Chcete-li stáhnout ovladač Firefox Gecko, posuňte se trochu dolů a klikněte na tar geckodriver Linux.archiv gz, v závislosti na architektuře operačního systému.

Pokud používáte 32bitový operační systém, klikněte na ikonu geckodriver-v0.26.0-linux32.dehet.gz odkaz.

Pokud používáte 64bitový operační systém, klikněte na ikonu geckodriver-v0.26.0-linuxx64.dehet.gz odkaz.

V mém případě si stáhnu 64bitovou verzi ovladače Firefox Gecko.

Váš prohlížeč by vás měl vyzvat k uložení archivu. Vybrat Uložení souboru a poté klikněte OK.

Archiv ovladačů Firefox Gecko je třeba stáhnout v ~ / Ke stažení adresář.

Extrahujte geckodriver-v0.26.0-linux64.dehet.gz archiv z ~ / Ke stažení adresář do Řidiči/ do adresáře vašeho projektu zadáním následujícího příkazu:

$ tar -xzf ~ / Soubory ke stažení / geckodriver-v0.26.0-linux64.dehet.gz -C ovladače /

Jakmile je archiv Firefox Gecko Driver extrahován, nový geckodriver binární soubor by měl být vytvořen v Řidiči/ adresář vašeho projektu, jak vidíte na obrázku níže.

Testování ovladače Selenium Firefox Gecko

V této části vám ukážu, jak nastavit svůj první skript Selenium Python pro testování, zda ovladač Firefox Gecko funguje.

Nejprve otevřete adresář projektu python-selen-basic / s vaším oblíbeným IDE nebo editorem. V tomto článku použiji Visual Studio Code.

Vytvořte nový skript Pythonu ex01.py, a zadejte následující řádky do skriptu.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
od času importu spánku
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ('http: // www.Google.com ')
spánek (5)
prohlížeč.přestat()

Až budete hotovi, uložte ex01.py Skript v Pythonu.

Vysvětlím kód v pozdější části tohoto článku.

Následující řádek konfiguruje Selenium k použití ovladače Firefox Gecko z Řidiči/ adresář vašeho projektu.

Chcete-li otestovat, zda ovladač Firefox Gecko pracuje se selenem, spusťte následující ex01.py Skript v Pythonu:

$ python3 ex01.py

Webový prohlížeč Firefox by měl automaticky navštěvovat Google.com a zavře se po 5 sekundách. Pokud k tomu dojde, ovladač Selenium Firefox Gecko funguje správně.

Instalace webového ovladače Chrome

Webový ovladač Chrome umožňuje ovládat nebo automatizovat webový prohlížeč Google Chrome pomocí selenu.

Musíte si stáhnout stejnou verzi webového ovladače Chrome jako ve webovém prohlížeči Google Chrome.

Číslo verze webového prohlížeče Google Chrome naleznete v prohlížeči chrome: // settings / help v prohlížeči Google Chrome. Číslo verze by mělo být v souboru O prohlížeči Chrome jak vidíte na následujícím obrázku.

V mém případě je číslo verze 83.0.4103.116. První tři části čísla verze (83.0.4103, v mém případě) se musí shodovat s prvními třemi částmi čísla verze webového ovladače Chrome.

Chcete-li stáhnout webový ovladač Chrome, navštivte oficiální stránku pro stažení ovladače Chrome.

V Aktuální zprávy sekce, bude k dispozici webový ovladač Chrome pro nejaktuálnější verze webového prohlížeče Google Chrome, jak vidíte na následujícím obrázku.

Pokud verze prohlížeče Google Chrome, kterou používáte, není v Aktuální zprávy sekce, posuňte se trochu dolů a měli byste najít požadovanou verzi.

Jakmile kliknete na správnou verzi webového ovladače Chrome, dostanete se na následující stránku. Klikněte na chromedriver_linux64.zip odkaz, jak je uvedeno na snímku obrazovky níže.

Archiv webového ovladače Chrome by nyní měl být stažen.

Archiv webového ovladače Chrome by nyní měl být stažen do složky ~ / Ke stažení adresář.

Můžete extrahovat chromedriver-linux64.zip archiv z ~ / Ke stažení adresář do Řidiči/ adresář vašeho projektu pomocí následujícího příkazu:

$ unzip ~ / Soubory ke stažení / chromedriver_linux64.ovladače zip -d /

Po rozbalení archivu webového ovladače Chrome je nový chromedriver binární soubor by měl být vytvořen v Řidiči/ adresář vašeho projektu, jak vidíte na obrázku níže.

Testování selenového webového ovladače Chrome

V této části vám ukážu, jak nastavit svůj první skript Selenium Python pro testování, zda webový ovladač Chrome funguje.

Nejprve vytvořte nový skript v Pythonu ex02.py, a zadejte následující řádky kódů do skriptu.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
od času importu spánku
prohlížeč = webdriver.Chrome (executable_path = "./ drivers / chromedriver ")
prohlížeč.get ('http: // www.Google.com ')
spánek (5)
prohlížeč.přestat()

Až budete hotovi, uložte ex02.py Skript v Pythonu.

Vysvětlím kód v pozdější části tohoto článku.

Následující řádek konfiguruje Selenium pro použití webového ovladače Chrome z Řidiči/ adresář vašeho projektu.

Chcete-li otestovat, zda webový ovladač Chrome pracuje se selenem, spusťte ex02.py Skript v Pythonu:

$ python3 ex01.py

Webový prohlížeč Google Chrome by měl automaticky navštěvovat Google.com a po 5 sekundách se zavře. Pokud k tomu dojde, ovladač Selenium Firefox Gecko funguje správně.

Základy škrábání webu se selenem

Od nynějška budu používat webový prohlížeč Firefox. Pokud chcete, můžete také použít Chrome.

Základní skript selenu Python by měl vypadat jako skript zobrazený na následujícím obrázku.

Nejprve importujte selen webdriver z selen modul.

Dále importujte Klíče z selen.webdriver.běžný.klíče. To vám pomůže odeslat stisknutí kláves na klávesnici do prohlížeče, který automatizujete ze selenu.

Následující řádek vytvoří a prohlížeč objekt pro webový prohlížeč Firefox pomocí ovladače Firefox Gecko (Webdriver). Pomocí tohoto objektu můžete ovládat akce prohlížeče Firefox.

Načíst web nebo URL (budu načítat web https: // www.duckduckgo.com), volejte dostat() metoda prohlížeč ve svém prohlížeči Firefox.

Pomocí selenu můžete psát své testy, provádět sešrotování webu a nakonec zavřít prohlížeč pomocí přestat() metoda prohlížeč objekt.

Nahoře je základní rozložení skriptu Selenium Python. Tyto řádky budete psát do všech svých skriptů selenového Pythonu.

Příklad 1: Tisk názvu webové stránky

Toto bude nejjednodušší příklad diskutovaný pomocí selenu. V tomto příkladu vytiskneme název webové stránky, kterou navštěvujeme.

Vytvořte nový soubor ex04.py a zadejte do něj následující řádky kódů.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ('https: // www.duckduckgo.com ')
print ("Název:% s"% prohlížeč.titul)
prohlížeč.přestat()

Až budete hotovi, uložte soubor.

Tady prohlížeč.titul se používá pro přístup k názvu navštívené webové stránky a tisk() funkce se použije k tisku titulu v konzole.

Po spuštění ex04.py skript, měl by:

1) Otevřete Firefox
2) Načtěte požadovanou webovou stránku
3) Načtěte název stránky
4) Vytiskněte název na konzoli
5) A nakonec zavřete prohlížeč

Jak vidíte, ex04.py skript v konzole pěkně vytiskl název webové stránky.

$ python3 ex04.py

Příklad 2: Tisk názvů více webových stránek

Stejně jako v předchozím příkladu můžete stejnou metodu použít k tisku názvu více webových stránek pomocí smyčky Python.

Abyste pochopili, jak to funguje, vytvořte nový skript v Pythonu ex05.py a do skriptu zadejte následující řádky kódu:

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
adresy URL = ['https: // www.duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
pro adresu URL v adresách URL:
prohlížeč.získat (URL)
print ("Název:% s"% prohlížeč.titul)
prohlížeč.přestat()

Jakmile budete hotovi, uložte skript Pythonu ex05.py.

Tady adresy URL seznam udržuje adresu URL každé webové stránky.

A pro smyčka se používá k iteraci přes adresy URL seznam položek.

Při každé iteraci selen říká prohlížeči, aby navštívil url a získejte název webové stránky. Jakmile Selenium extrahuje název webové stránky, vytiskne se v konzole.

Spusťte skript Pythonu ex05.py, a měli byste vidět název každé webové stránky ve složce adresy URL seznam.

$ python3 ex05.py

Toto je příklad toho, jak selen může provádět stejný úkol s více webovými stránkami nebo webovými stránkami.

Příklad 3: Extrakce dat z webové stránky

V tomto příkladu vám ukážu základy extrakce dat z webových stránek pomocí selenu. Toto se také nazývá škrábání webu.

Nejprve navštivte Random.org odkaz z Firefoxu. Stránka by měla generovat náhodný řetězec, jak vidíte na následujícím obrázku.

Chcete-li extrahovat data náhodného řetězce pomocí selenu, musíte znát také HTML reprezentaci dat.

Chcete-li zjistit, jak jsou data náhodného řetězce reprezentována v HTML, vyberte data náhodného řetězce a stiskněte pravé tlačítko myši (RMB) a klikněte na Zkontrolovat prvek (Q), jak je uvedeno na snímku obrazovky níže.

HTML reprezentace dat by měla být zobrazena v Inspektor záložka, jak vidíte na obrázku níže.

Můžete také kliknout na ikonu Zkontrolovat ikonu ( ) zkontrolovat data ze stránky.

Klikněte na ikonu inspekce () a najeďte myší na data náhodného řetězce, která chcete extrahovat. Reprezentace dat HTML by měla být zobrazena jako dříve.

Jak vidíte, data náhodného řetězce jsou zabalena do HTML před tag a obsahuje třídu data.

Nyní, když známe HTML reprezentaci dat, která chceme extrahovat, vytvoříme skript Pythonu pro extrakci dat pomocí selenu.

Vytvořte nový skript Pythonu ex06.py a zadejte následující řádky kódů do skriptu

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ("https: // www.náhodný.org / struny /?num = 1 & len = 20 & číslic
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new ")
dataElement = prohlížeč.find_element_by_css_selector ('pre.data')
print (dataElement.text)
prohlížeč.přestat()

Až budete hotovi, uložte ex06.py Skript v Pythonu.

Tady prohlížeč.dostat() metoda načte webovou stránku v prohlížeči Firefox.

The prohlížeč.find_element_by_css_selector () metoda vyhledá v HTML kódu stránky konkrétní prvek a vrátí jej.

V tomto případě by prvek byl před.data, the před značka, která má název třídy data.

Níže je před.data prvek byl uložen do souboru dataElement proměnná.

Skript poté vytiskne textový obsah vybrané před.data živel.

Pokud spustíte ex06.py Skript v Pythonu by měl z webové stránky extrahovat data náhodných řetězců, jak vidíte na následujícím obrázku.

$ python3 ex06.py

Jak vidíte, pokaždé, když spustím ex06.py Skript v Pythonu extrahuje z webové stránky jiná náhodná data řetězce.

Příklad 4: Extrakce seznamu dat z webové stránky

Předchozí příklad vám ukázal, jak extrahovat jeden datový prvek z webové stránky pomocí selenu. V tomto příkladu vám ukážu, jak pomocí selenu extrahovat seznam dat z webové stránky.

Nejprve navštivte generátor náhodných jmen.informace z webového prohlížeče Firefox. Tento web vygeneruje deset náhodných jmen při každém opětovném načtení stránky, jak vidíte na následujícím obrázku. Naším cílem je extrahovat tato náhodná jména pomocí selenu.

Pokud podrobněji prozkoumáte seznam jmen, uvidíte, že se jedná o seřazený seznam (ol štítek). The ol tag také obsahuje název třídy jmenný seznam. Každé z náhodných jmen je reprezentováno jako položka seznamu (li tag) uvnitř ol štítek.

Chcete-li tyto náhodné názvy extrahovat, vytvořte nový skript v Pythonu ex07.py a zadejte následující řádky kódů do skriptu.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ("http: // generátor náhodných jmen.informace / ")
nameList = prohlížeč.find_elements_by_css_selector ('ol.nameList li ')
pro jméno v nameList:
tisk (jméno.text)
prohlížeč.přestat()

Až budete hotovi, uložte ex07.py Skript v Pythonu.

Tady prohlížeč.dostat() metoda načte webovou stránku generátoru náhodných jmen v prohlížeči Firefox.

The prohlížeč.find_elements_by_css_selector () metoda používá selektor CSS ol.nameList li najít vše li prvky uvnitř ol značka s názvem třídy jmenný seznam. Uložil jsem všechny vybrané li prvky v jmenný seznam proměnná.

A pro smyčka se používá k iteraci přes jmenný seznam seznam li elementy. V každé iteraci obsah li prvek je vytištěn na konzole.

Pokud spustíte ex07.py Skript v Pythonu, načte všechny náhodné názvy z webové stránky a vytiskne je na obrazovku, jak vidíte na následujícím obrázku.

$ python3 ex07.py

Pokud spustíte skript podruhé, měl by vrátit nový seznam náhodných uživatelských jmen, jak vidíte na obrázku níže.

Příklad 5: Odeslání formuláře - vyhledávání na DuckDuckGo

Tento příklad je stejně jednoduchý jako první příklad. V tomto příkladu navštívím vyhledávač DuckDuckGo a vyhledám výraz selen hq pomocí selenu.

Nejprve navštivte vyhledávač DuckDuckGo z webového prohlížeče Firefox.

Pokud prohlédnete vstupní vyhledávací pole, mělo by mít ID search_form_input_homepage, jak vidíte na snímku obrazovky níže.

Nyní vytvořte nový skript v Pythonu ex08.py a zadejte následující řádky kódů do skriptu.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ("https: // duckduckgo.com / ")
searchInput = prohlížeč.find_element_by_id ('search_form_input_homepage')
searchInput.send_keys ('selenium hq' + klíče.ENTER)

Až budete hotovi, uložte ex08.py Skript v Pythonu.

Tady prohlížeč.dostat() metoda načte domovskou stránku vyhledávače DuckDuckGo ve webovém prohlížeči Firefox.

The prohlížeč.find_element_by_id () metoda vybere vstupní prvek s id search_form_input_homepage a ukládá jej do searchInput proměnná.

The searchInput.send_keys () metoda se používá k odeslání údajů o stisknutí klávesy do vstupního pole. V tomto příkladu odešle řetězec selen hq, a klávesa Enter je stisknuta pomocí Klíče.ENTER konstantní.

Jakmile vyhledávač DuckDuckGo obdrží klávesu Enter, stiskněte (Klíče.ENTER), vyhledá a zobrazí výsledek.

Spusťte ex08.py Skript v Pythonu:

$ python3 ex08.py

Jak vidíte, webový prohlížeč Firefox navštívil vyhledávač DuckDuckGo.

Automaticky se zadalo selen hq do vyhledávacího textového pole.

Jakmile prohlížeč obdrží klávesu Enter, stiskněte (Klíče.ENTER), zobrazil výsledek hledání.

Příklad 6: Odeslání formuláře na W3Schools.com

V příkladu 5 bylo odeslání formuláře vyhledávacího modulu DuckDuckGo snadné. Jediné, co musíte udělat, bylo stisknout klávesu Enter. To však nebude případ všech odeslání formulářů. V tomto příkladu vám ukážu složitější zpracování formulářů.

Nejprve navštivte stránku Formuláře HTML W3Schools.com z webového prohlížeče Firefox. Jakmile se stránka načte, měl by se zobrazit vzorový formulář. Toto je formulář, který zadáme v tomto příkladu.

Pokud formulář prohlédnete, Jméno vstupní pole by mělo mít ID fname, the Příjmení vstupní pole by mělo mít ID jméno, a Tlačítko Odeslat by měl mít typ Předložit, jak vidíte na snímku obrazovky níže.

Chcete-li odeslat tento formulář pomocí selenu, vytvořte nový skript v Pythonu ex09.py a zadejte následující řádky kódů do skriptu.

z webového ovladače pro import selenu
ze selenu.webdriver.běžný.klíče importovat klíče
prohlížeč = webdriver.Firefox (executable_path = "./ drivers / geckodriver ")
prohlížeč.get ("https: // www.w3schools.com / html / html_forms.asp ")
fname = prohlížeč.find_element_by_id ('fname')
fname.Průhledná()
fname.send_keys ('Shahriar')
lname = prohlížeč.find_element_by_id ('lname')
jméno.Průhledná()
jméno.send_keys ('Shovon')
submitButton = prohlížeč.find_element_by_css_selector ('vstup [typ = "odeslat"]')
odeslatButton.send_keys (klíče.ENTER)

Až budete hotovi, uložte ex09.py Skript v Pythonu.

Tady prohlížeč.dostat() metoda otevře stránku formulářů HTML W3schools ve webovém prohlížeči Firefox.

The prohlížeč.find_element_by_id () metoda najde vstupní pole podle id fname a jméno a ukládá je do fname a jméno proměnné.

The fname.Průhledná() a jméno.Průhledná() metody vymažou výchozí křestní jméno (John) fname hodnota a příjmení (Doe) jméno hodnota ze vstupních polí.

The fname.send_keys () a jméno.send_keys () metody typu Shahriar a Shovon v Jméno a Příjmení vstupní pole.

The prohlížeč.find_element_by_css_selector () metoda vybere Tlačítko Odeslat formuláře a uloží jej do odeslatButton proměnná.

The odeslatButton.send_keys () metoda odešle stisknutí klávesy Enter (Klíče.ENTER) do Tlačítko Odeslat formuláře. Tato akce odešle formulář.

Spusťte ex09.py Skript v Pythonu:

$ python3 ex09.py

Jak vidíte, formulář byl automaticky odeslán se správnými vstupy.

Závěr

Tento článek by vám měl pomoci začít s testováním selenového prohlížeče, automatizací webu a šrotovacími knihovnami v Pythonu 3. Další informace najdete v oficiální dokumentaci selenového pythonu.

Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...
Hry HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
HD remasterované hry pro Linux, které nikdy dříve neměly vydání Linuxu
Mnoho vývojářů a vydavatelů her přichází s HD remasterem starých her, aby prodloužili životnost franšízy, prosím fanoušky, kteří požadují kompatibilit...
Hry Jak používat AutoKey k automatizaci linuxových her
Jak používat AutoKey k automatizaci linuxových her
AutoKey je nástroj pro automatizaci stolních počítačů pro systémy Linux a X11, programovaný v programech Python 3, GTK a Qt. Pomocí jeho funkcí skript...