Селен

Използване на XPath и Селен за намиране на елемент в HTML страница

Използване на XPath и Селен за намиране на елемент в HTML страница
XPath, известен също като XML Path Language, е език за избор на елементи от XML документ. Тъй като HTML и XML следват една и съща структура на документа, XPath може да се използва и за избор на елементи от уеб страница.

Намирането и избирането на елементи от уеб страницата е ключът към изстъргването на уеб с Selenium. За намиране и избор на елементи от уеб страницата можете да използвате селектори XPath в Selenium.

В тази статия ще ви покажа как да намирате и избирате елементи от уеб страници с помощта на селектори XPath в Selenium с библиотеката на Python на Selenium. И така, нека започнем.

Предпоставки:

За да изпробвате командите и примерите от тази статия, трябва да имате,

  1. Линукс дистрибуция (за предпочитане Ubuntu), инсталирана на вашия компютър.
  2. Python 3, инсталиран на вашия компютър.
  3. PIP 3, инсталиран на вашия компютър.
  4. Python virtualenv пакет, инсталиран на вашия компютър.
  5. Mozilla Firefox или Google Chrome уеб браузъри, инсталирани на вашия компютър.
  6. Трябва да знаете как да инсталирате Firefox Gecko Driver или Chrome Web Driver.

За изпълнение на изискванията 4, 5 и 6 прочетете статията ми Въведение в селена в Python 3. Можете да намерите много статии по другите теми на LinuxHint.com. Не забравяйте да ги проверите, ако имате нужда от помощ.

Създаване на директория на проекти:

За да поддържате всичко организирано, създайте нова директория на проекта селен-xpath / както следва:

$ mkdir -pv selenium-xpath / драйвери

Придвижете се до селен-xpath / директория на проекта, както следва:

$ cd селен-xpath /

Създайте виртуална среда на Python в директорията на проекта, както следва:

$ virtualenv .venv

Активирайте виртуалната среда, както следва:

$ източник .venv / bin / активиране

Инсталирайте библиотеката на Selenium Python, използвайки PIP3, както следва:

$ pip3 инсталиране на селен

Изтеглете и инсталирайте всички необходими уеб драйвери в шофьори / директория на проекта. Обясних процеса на изтегляне и инсталиране на уеб драйвери в моята статия Въведение в селена в Python 3.

Вземете XPath Selector с помощта на Chrome Developer Tool:

В този раздел ще ви покажа как да намерите селектора XPath на елемента на уеб страницата, който искате да изберете с Selenium, като използвате вградения инструмент за разработчици на уеб браузъра Google Chrome.

За да получите селектора XPath с помощта на уеб браузъра Google Chrome, отворете Google Chrome и посетете уеб сайта, от който искате да извлечете данни. След това натиснете десния бутон на мишката (RMB) върху празно място на страницата и кликнете върху Огледайте за да отворите Инструмент за разработчици на Chrome.

Можете също да натиснете + Shift + Аз за да отворите Инструмент за разработчици на Chrome.

Инструмент за разработчици на Chrome трябва да се отвори.

За да намерите HTML представяне на желания от вас елемент на уеб страница, щракнете върху Огледайте(

), както е отбелязано на екранната снимка по-долу.

След това задръжте курсора на мишката върху желания от вас елемент на уеб страница и натиснете левия бутон на мишката (LMB), за да го изберете.

HTML представянето на избрания от вас уеб елемент ще бъде подчертано в Елементи в раздела Инструмент за разработчици на Chrome, както можете да видите на екранната снимка по-долу.

За да получите XPath селектора на желания от вас елемент, изберете елемента от Елементи раздел на Инструмент за разработчици на Chrome и щракнете с десния бутон върху него (RMB). След това изберете копие > Копирайте XPath, както е отбелязано на екранната снимка по-долу.

Поставих селектора XPath в текстов редактор. Селекторът XPath изглежда както е показано на екранната снимка по-долу.

Вземете XPath Selector с помощта на Firefox Developer Tool:

В този раздел ще ви покажа как да намерите селектора XPath на елемента на уеб страницата, който искате да изберете с Selenium, като използвате вградения инструмент за разработчици на уеб браузъра Mozilla Firefox.

За да получите селектора XPath с помощта на уеб браузъра Firefox, отворете Firefox и посетете уеб сайта, от който искате да извлечете данни. След това натиснете десния бутон на мишката (RMB) върху празно място на страницата и кликнете върху Проверете елемента (Q) за да отворите Инструмент за разработчици на Firefox.

Инструмент за разработчици на Firefox трябва да се отвори.

За да намерите HTML представяне на желания от вас елемент на уеб страница, щракнете върху Огледайте(

), както е отбелязано на екранната снимка по-долу.

След това задръжте курсора на мишката върху желания от вас елемент на уеб страница и натиснете левия бутон на мишката (LMB), за да го изберете.

HTML представянето на избрания от вас уеб елемент ще бъде подчертано в Инспектор раздел на Инструмент за разработчици на Firefox, както можете да видите на екранната снимка по-долу.

За да получите XPath селектора на желания от вас елемент, изберете елемента от Инспектор раздел на Инструмент за разработчици на Firefox и щракнете с десния бутон върху него (RMB). След това изберете копие > XPath както е отбелязано на екранната снимка по-долу.

Селекторът XPath на желания от вас елемент трябва да изглежда така.

Извличане на данни от уеб страници с помощта на XPath Selector:

В този раздел ще ви покажа как да избирате елементи на уеб страницата и да извличате данни от тях с помощта на селектори XPath с библиотеката Selenium Python.

Първо, създайте нов Python скрипт ex01.py и въведете следните редове кодове.

от webdriver за импортиране на селен
от селен.уеб драйвер.често срещани.ключове за импортиране
от селен.уеб драйвер.често срещани.чрез импортиране от
options = webdriver.ChromeOptions ()
настроики.без глава = Вярно
браузър = webdriver.Chrome (executable_path = "./ драйвери / chromedriver ",
опции = опции)
браузър.get ("https: // www.unixtimestamp.com / ")
timestamp = браузър.find_element_by_xpath ('/ html / body / div [1] / div [1]
/ div [2] / div [1] / div / div / h3 [2] ')
print ('Текущ клеймо:% s'% (клеймо.текст.split (") [0]))
браузър.близо()

След като приключите, запазете ex01.py Python скрипт.

Линия 1-3 импортира всички необходими компоненти на селен.

Ред 5 създава обект с опции на Chrome, а ред 6 позволява режим без глава за уеб браузъра Chrome.

Ред 8 създава Chrome браузър обект с помощта на хромедривър двоично от шофьори / директория на проекта.

Ред 10 казва на браузъра да зареди уебсайта unixtimestamp.com.

Ред 12 намира елемента, който има данните за времевия печат от страницата, използвайки селектора XPath и ги съхранява в клеймо за време променлива.

Ред 13 анализира данните за времевия печат от елемента и ги отпечатва на конзолата.

Копирах селектора XPath на маркирания h2 елемент от unixtimestamp.com с помощта на инструмента за разработчици на Chrome.

Ред 14 затваря браузъра.

Стартирайте скрипта на Python ex01.py както следва:

$ python3 ex01.py

Както можете да видите, данните за времевия печат се отпечатват на екрана.

Тук използвах браузър.find_element_by_xpath (селектор) метод. Единственият параметър на този метод е селектор, което е селекторът XPath на елемента.

Вместо браузър.find_element_by_xpath () метод, можете също да използвате браузър.find_element (от, селектор) метод. Този метод се нуждае от два параметъра. Първият параметър От ще бъде От.XPATH тъй като ще използваме селектора XPath и втория параметър селектор ще бъде самият селектор XPath. Резултатът ще бъде същият.

За да видите как браузър.find_element () метод работи за XPath селектор, създайте нов Python скрипт ex02.py, копирайте и поставете всички редове от ex01.py да се ex02.py и промяна ред 12 както е отбелязано на екранната снимка по-долу.

Както можете да видите, скриптът на Python ex02.py дава същия резултат като ex01.py.

$ python3 ex02.py

The браузър.find_element_by_xpath () и браузър.find_element () методи се използват за намиране и избор на отделен елемент от уеб страници. Ако искате да намерите и изберете множество елементи с помощта на селектори XPath, тогава трябва да използвате браузър.find_elements_by_xpath () или браузър.find_elements () методи.

The браузър.find_elements_by_xpath () метод приема същия аргумент като браузър.find_element_by_xpath () метод.

The браузър.find_elements () метод приема същите аргументи като браузър.find_element () метод.

Да видим пример за извличане на списък с имена с помощта на селектора XPath от генератор на произволни имена.информация с библиотеката на Selenium Python.

Неуреденият списък (ол таг) има 10 ли етикети във всеки, съдържащ произволно име. XPath, за да изберете всички ли етикети вътре в ол таг в този случай е // * [@ id = ”main”] / div [3] / div [2] / ol // li

Нека да разгледаме пример за избор на множество елементи от уеб страницата с помощта на селектори XPath.

Създайте нов скрипт на Python ex03.py и въведете в него следните редове кодове.

от webdriver за импортиране на селен
от селен.уеб драйвер.често срещани.ключове за импортиране
от селен.уеб драйвер.често срещани.чрез импортиране от
options = webdriver.ChromeOptions ()
настроики.без глава = Вярно
браузър = webdriver.Chrome (executable_path = "./ драйвери / chromedriver ",
опции = опции)
браузър.get ("http: // random-name-generator.информация / ")
имена = браузър.find_elements_by_xpath ('
// * [@ id = "main"] / div [3] / div [2] / ol // li ')
за име в имена:
печат (име.текст)
браузър.близо()

След като приключите, запазете ex03.py Python скрипт.

Ред 1-8 е същият като в ex01.py Python скрипт. Така че, няма да ги обяснявам отново тук.

Ред 10 казва на браузъра да зареди уебсайта генератор на произволни имена.информация.

Ред 12 избира списъка с имена с помощта на браузър.find_elements_by_xpath () метод. Този метод използва селектора XPath // * [@ id = ”main”] / div [3] / div [2] / ol // li за да намерите списъка с имена. След това списъкът с имена се съхранява в имена променлива.

В редове 13 и 14, а за цикъл се използва за итерация през имена списък и отпечатайте имената на конзолата.

Ред 16 затваря браузъра.

Стартирайте скрипта на Python ex03.py както следва:

$ python3 ex03.py

Както можете да видите, имената се извличат от уеб страницата и се отпечатват на конзолата.

Вместо да използвате браузър.find_elements_by_xpath () метод, можете също да използвате браузър.find_elements () метод както преди. Първият аргумент на този метод е От.XPATH, а вторият аргумент е селекторът XPath.

За да експериментирате браузър.find_elements () метод, създайте нов скрипт на Python ex04.py, копирайте всички кодове от ex03.py да се ex04.py, и променете ред 12, както е отбелязано на екранната снимка по-долу.

Трябва да получите същия резултат като преди.

$ python3 ex04.py

Основи на XPath Selector:

Инструментът за разработчици на Firefox или уеб браузърът на Google Chrome генерира автоматично селектор XPath. Но тези селектори на XPath понякога не са достатъчни за вашия проект. В този случай трябва да знаете какво прави определен селектор XPath, за да изгради вашия селектор XPath. В този раздел ще ви покажа основите на селекторите XPath. След това трябва да можете да създадете свой собствен селектор XPath.

Създайте нова директория www / в директорията на вашия проект, както следва:

$ mkdir -v www

Създайте нов файл web01.html в www / директория и въведете следните редове в този файл.






Основен HTML документ


Здравей свят



След като приключите, запазете web01.html файл.

Стартирайте прост HTTP сървър на порт 8080, като използвате следната команда:

$ python3 -m http.сървър - директория www / 8080

HTTP сървърът трябва да се стартира.

Трябва да имате достъп до web01.html файл, използвайки URL адреса http: // localhost: 8080 / web01.html, както можете да видите на екранната снимка по-долу.

Докато Firefox или Chrome Developer Tool се отвори, натиснете + F за да отворите полето за търсене. Тук можете да въведете вашия XPath селектор и да видите какво избира много лесно. Ще използвам този инструмент в този раздел.

Селекторът на XPath започва с наклонена черта (/) през повечето време. Това е като дърво на директории на Linux. The / е коренът на всички елементи на уеб страницата.

Първият елемент е html. И така, селекторът XPath / html избира цялото html етикет.

Вътре в html таг, имаме a тяло етикет. The тяло таг може да бъде избран с селектора XPath / html / тяло

The h1 заглавката е вътре в тяло етикет. The h1 заглавката може да бъде избрана с селектора XPath / html / body / h1

Този тип селектор на XPath се нарича селектор на абсолютен път. В селектора на абсолютен път трябва да прекосите уеб страницата от корена (/) на страницата. Недостатъкът на абсолютния селектор на път е, че дори и малка промяна в структурата на уеб страницата може да направи вашия XPath селектор невалиден. Решението на този проблем е относително или частично селектор XPath.

За да видите как работи относителният или частичен път, създайте нов файл web02.html в www / директория и въведете следните редове кодове в нея.






Основен HTML документ


Здравей свят



това е съобщение




Здравей свят


След като приключите, запазете web02.html файл и го заредете във вашия уеб браузър.

Както можете да видите, селекторът XPath // div / p избира стр етикет вътре в div етикет. Това е пример за относителен селектор на XPath.

Относителният селектор на XPath започва с //. След това посочвате структурата на елемента, който искате да изберете. В такъв случай, div / p.

Така, // div / p означава да изберете стр елемент вътре в a div елемент, няма значение какво идва преди него.

Можете също да изберете елементи от различни атрибути като документ за самоличност, клас, Тип, и т.н. с помощта на XPath селектор. Нека да видим как да направим това.

Създайте нов файл web03.html в www / директория и въведете следните редове кодове в нея.






Основен HTML документ


Здравей свят



това е съобщение


това е друго съобщение


заглавие 2


Lorem ipsum dolor sit amet consectetur, adipisising elit. Кибусдам
eligendi doloribus sapiente, molestias quos quae non nam incidunt quis delectus
facilis magnifficiis alias neque atque fuga? Unde, aut natus?




това е долен колонтитул


След като приключите, запазете web03.html файл и го заредете във вашия уеб браузър.

Да предположим, че искате да изберете всички div елементи, които имат клас име контейнер1. За да направите това, можете да използвате селектора XPath // div [@ class = 'container1']

Както можете да видите, имам 2 елемента, които съответстват на селектора XPath // div [@ class = 'container1']

За да изберете първия div елемент с клас име контейнер1, добавете [1] в края на XPath изберете, както е показано на екранната снимка по-долу.

По същия начин можете да изберете втория div елемент с клас име контейнер1 с помощта на селектора XPath // div [@ class = 'container1'] [2]

Можете да изберете елементи от документ за самоличност както добре.

Например, за да изберете елемента, който има документ за самоличност на footer-msg, можете да използвате селектора XPath // * [@ id = 'footer-msg']

Ето, * преди [@ id = 'footer-msg'] се използва за избор на всеки елемент, независимо от техния таг.

Това са основите на селектора XPath. Сега трябва да можете да създадете свой собствен селектор XPath за вашите проекти на Selenium.

Заключение:

В тази статия ви показах как да намирате и избирате елементи от уеб страници с помощта на селектора XPath с библиотеката Selenium Python. Обсъдих и най-често срещаните селектори на XPath. След като прочетете тази статия, трябва да се чувствате доста уверени в избора на елементи от уеб страници с помощта на селектора XPath с библиотеката Selenium Python.

Как да инсталирате и играете Doom на Linux
Въведение в Doom Серията Doom възниква през 90-те години след пускането на оригиналния Doom. Това беше незабавен хит и от този момент нататък серията ...
Vulkan за потребители на Linux
С всяко ново поколение графични карти виждаме, че разработчиците на игри преместват границите на графичната вярност и се приближават една крачка до фо...
OpenTTD срещу Simutrans
Създаването на собствена транспортна симулация може да бъде забавно, релаксиращо и изключително примамливо. Ето защо трябва да сте сигурни, че изпробв...