Использование XPath и Selenium для поиска элемента на HTML-странице

Using Xpath Selenium Find An Element Html Page



XPath, также известный как XML Path Language, - это язык для выбора элементов из XML-документа. Поскольку HTML и XML следуют одной и той же структуре документа, XPath также можно использовать для выбора элементов на веб-странице.

Поиск и выбор элементов на веб-странице - ключ к парсингу веб-страниц с помощью Selenium. Для поиска и выбора элементов на веб-странице вы можете использовать селекторы XPath в Selenium.







В этой статье я покажу вам, как находить и выбирать элементы на веб-страницах с помощью селекторов XPath в Selenium с библиотекой Selenium python. Итак, приступим.



Предпосылки:

Чтобы опробовать команды и примеры из этой статьи, вы должны иметь:



  1. На вашем компьютере установлен дистрибутив Linux (желательно Ubuntu).
  2. Python 3 установлен на вашем компьютере.
  3. PIP 3 установлен на вашем компьютере.
  4. Python virtualenv пакет установлен на вашем компьютере.
  5. На вашем компьютере установлены браузеры Mozilla Firefox или Google Chrome.
  6. Должен знать, как установить драйвер Firefox Gecko или веб-драйвер Chrome.

Для выполнения требований 4, 5 и 6 прочтите мою статью Введение в Selenium в Python 3 . Вы можете найти множество статей по другим темам на LinuxHint.com . Обязательно ознакомьтесь с ними, если вам понадобится помощь.





Настройка каталога проекта:

Чтобы все было организовано, создайте новый каталог проекта селен-xpath / следующее:

$mkdir -pvселен-xpath/водители



Перейдите к селен-xpath / каталог проекта следующим образом:

$CDселен-xpath/

Создайте виртуальную среду Python в каталоге проекта следующим образом:

$virtualenv .venv

Активируйте виртуальную среду следующим образом:

$источник.venv/являюсь/активировать

Установите библиотеку Selenium Python с помощью PIP3 следующим образом:

$ pip3 установить селен

Загрузите и установите все необходимые веб-драйверы в драйверы / каталог проекта. Я объяснил процесс загрузки и установки веб-драйверов в своей статье. Введение в Selenium в Python 3 .

Получите XPath Selector с помощью Chrome Developer Tool:

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

Чтобы получить селектор XPath с помощью веб-браузера Google Chrome, откройте Google Chrome и посетите веб-сайт, с которого вы хотите извлечь данные. Затем нажмите правую кнопку мыши (ПКМ) в пустой области страницы и нажмите Осмотреть открыть Инструмент разработчика Chrome .

Вы также можете нажать + Сдвиг + я открыть Инструмент разработчика Chrome .

Инструмент разработчика Chrome должен быть открыт.

Чтобы найти HTML-представление желаемого элемента веб-страницы, щелкните значок Осмотреть (

), как показано на скриншоте ниже.

Затем наведите указатель мыши на нужный элемент веб-страницы и нажмите левую кнопку мыши (ЛКМ), чтобы выбрать его.

HTML-представление выбранного веб-элемента будет выделено в Элементы вкладка Инструмент разработчика Chrome, как вы можете видеть на скриншоте ниже.

Чтобы получить селектор XPath желаемого элемента, выберите элемент из Элементы вкладка Инструмент разработчика Chrome и щелкните его правой кнопкой мыши (ПКМ). Затем выберите Копировать > Скопируйте XPath, как отмечено на скриншоте ниже.

Я вставил селектор XPath в текстовый редактор. Селектор XPath выглядит так, как показано на скриншоте ниже.

Получите XPath Selector с помощью Firefox Developer Tool:

В этом разделе я собираюсь показать вам, как найти селектор XPath для элемента веб-страницы, который вы хотите выбрать с помощью Selenium, с помощью встроенного инструмента разработчика веб-браузера Mozilla Firefox.

Чтобы получить селектор XPath с помощью веб-браузера Firefox, откройте Firefox и посетите веб-сайт, с которого вы хотите извлечь данные. Затем нажмите правую кнопку мыши (ПКМ) в пустой области страницы и нажмите Осмотрите элемент (Q) открыть Инструмент разработчика Firefox .

Инструмент разработчика Firefox должен быть открыт.

Чтобы найти HTML-представление желаемого элемента веб-страницы, щелкните значок Осмотреть (

), как показано на скриншоте ниже.

Затем наведите указатель мыши на нужный элемент веб-страницы и нажмите левую кнопку мыши (ЛКМ), чтобы выбрать его.

HTML-представление выбранного веб-элемента будет выделено в Инспектор вкладка Инструмент разработчика Firefox, как вы можете видеть на скриншоте ниже.

Чтобы получить селектор XPath желаемого элемента, выберите элемент из Инспектор вкладка Инструмент разработчика Firefox и щелкните его правой кнопкой мыши (ПКМ). Затем выберите Копировать > XPath как отмечено на скриншоте ниже.

Селектор XPath желаемого элемента должен выглядеть примерно так.

Извлечение данных с веб-страниц с помощью XPath Selector:

В этом разделе я собираюсь показать вам, как выбирать элементы веб-страницы и извлекать из них данные с помощью селекторов XPath с библиотекой Selenium Python.

Сначала создайте новый скрипт Python ex01.py и введите следующие строки кодов.

изселенИмпортироватьwebdriver
изселен.webdriver.общий.ключи ИмпортироватьКлючи
изселен.webdriver.общий.к ИмпортироватьК
параметрызнак равноwebdriver.ChromeOptions()
параметры.Обезглавленный знак равно Правда
браузерзнак равноwebdriver.Хром(исполняемый_путьзнак равно'./drivers/chromedriver',
параметрызнак равнопараметры)
браузер.получать(https://www.unixtimestamp.com/)
отметка временизнак равнобраузер.find_element_by_xpath('/ html / body / div [1] / div [1]
/ div [2] / div [1] / div / div / h3 [2] '
)
Распечатать('Текущая отметка времени:% s'%(отметка времени.текст.расколоть('')[0]))
браузер.близко()

Как только вы закончите, сохраните ex01.py Скрипт Python.

Строка 1-3 импортирует все необходимые компоненты Selenium.

Строка 5 создает объект параметров Chrome, а строка 6 включает безголовый режим для веб-браузера Chrome.

Строка 8 создает Chrome браузер объект, использующий хромированная отвертка двоичный из драйверы / каталог проекта.

Строка 10 указывает браузеру загрузить веб-сайт unixtimestamp.com.

Строка 12 находит элемент, имеющий данные отметки времени со страницы, используя селектор XPath, и сохраняет его в отметка времени Переменная.

Строка 13 анализирует данные временной метки элемента и выводит их на консоль.

Я скопировал селектор XPath отмеченного h2 элемент из unixtimestamp.com с помощью инструмента разработчика Chrome.

Строка 14 закрывает браузер.

Запустите скрипт Python ex01.py следующее:

$ python3 ex01.ру

Как видите, данные отметки времени печатаются на экране.

Здесь я использовал browser.find_element_by_xpath (селектор) метод. Единственным параметром этого метода является селектор который является селектором XPath элемента.

Вместо того browser.find_element_by_xpath () метод, вы также можете использовать browser.find_element (по, селектор) метод. Для этого метода нужны два параметра. Первый параметр К будет Автор: XPATH поскольку мы будем использовать селектор XPath, а второй параметр селектор будет сам селектор XPath. Результат будет таким же.

Чтобы увидеть, как browser.find_element () метод работает для селектора XPath, создайте новый скрипт Python ex02.py , скопируйте и вставьте все строки из ex01.py к ex02.py и изменить строка 12 как отмечено на скриншоте ниже.

Как видите, скрипт Python ex02.py дает тот же результат, что и ex01.py .

$ python3 ex02.ру

В browser.find_element_by_xpath () а также browser.find_element () методы используются для поиска и выбора одного элемента на веб-страницах. Если вы хотите найти и выбрать несколько элементов с помощью селекторов XPath, вам нужно использовать browser.find_elements_by_xpath () или browser.find_elements () методы.

В browser.find_elements_by_xpath () метод принимает тот же аргумент, что и browser.find_element_by_xpath () метод.

В browser.find_elements () метод принимает те же аргументы, что и browser.find_element () метод.

Давайте посмотрим на пример извлечения списка имен с помощью селектора XPath из random-name-generator.info с библиотекой Selenium Python.

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

Давайте рассмотрим пример выбора нескольких элементов на веб-странице с помощью селекторов XPath.

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

изселенИмпортироватьwebdriver
изселен.webdriver.общий.ключи ИмпортироватьКлючи
изселен.webdriver.общий.к ИмпортироватьК
параметрызнак равноwebdriver.ChromeOptions()
параметры.Обезглавленный знак равно Правда
браузерзнак равноwebdriver.Хром(исполняемый_путьзнак равно'./drivers/chromedriver',
параметрызнак равнопараметры)
браузер.получать('http://random-name-generator.info/')
именазнак равнобраузер.find_elements_by_xpath('
// * [@ id = 'main'] / div [3] / div [2] / ol // li '
)
дляимявимена:
Распечатать(имя.текст)
браузер.близко()

Как только вы закончите, сохраните ex03.py Скрипт Python.

Строка 1-8 такая же, как в ex01.py Скрипт Python. Так что я не буду здесь снова их объяснять.

Строка 10 указывает браузеру загрузить сайт random-name-generator.info.

Строка 12 выбирает список имен с помощью browser.find_elements_by_xpath () метод. Этот метод использует селектор XPath // * [@ id = main] / div [3] / div [2] / ol // li чтобы найти список имен. Затем список имен сохраняется в имена Переменная.

В строках 13 и 14 a для цикл используется для перебора имена перечислить и распечатать имена на консоли.

Строка 16 закрывает браузер.

Запустите скрипт Python ex03.py следующее:

$ python3 ex03.ру

Как видите, имена извлекаются с веб-страницы и печатаются на консоли.

Вместо использования browser.find_elements_by_xpath () метод, вы также можете использовать browser.find_elements () метод как раньше. Первый аргумент этого метода - Автор: XPATH, а второй аргумент - это селектор XPath.

Поэкспериментировать с browser.find_elements () метод, создайте новый скрипт Python ex04.py скопируйте все коды из ex03.py к ex04.py и измените строку 12, как показано на скриншоте ниже.

Вы должны получить тот же результат, что и раньше.

$ python3 ex04.ру

Основы XPath Selector:

Инструмент разработчика Firefox или веб-браузера Google Chrome автоматически генерирует селектор XPath. Но этих селекторов XPath иногда недостаточно для вашего проекта. В этом случае вы должны знать, что делает определенный селектор XPath для построения вашего селектора XPath. В этом разделе я собираюсь показать вам основы селекторов XPath. Затем вы сможете создать свой собственный селектор XPath.

Создать новый каталог www / в каталоге вашего проекта следующим образом:

$mkdir -vwww

Создать новый файл web01.html в www / каталог и введите следующие строки в этот файл.


< html языкзнак равно'на'>
< голова >
< мета кодировказнак равно'UTF-8'>
< мета имязнак равно'область просмотра' содержаниезнак равно'ширина = ширина устройства, начальный масштаб = 1.0'>
< заглавие >Базовый HTML-документ</ заглавие >
</ голова >
< тело >
< h1 >Привет, мир</ h1 >
</ тело >
</ html >

Как только вы закончите, сохраните web01.html файл.

Запустите простой HTTP-сервер на порту 8080, используя следующую команду:

$ python3 -m http.сервер- каталог www /8080

HTTP-сервер должен запуститься.

У вас должен быть доступ к web01.html файл, используя URL http: // локальный: 8080 / web01.html , как вы можете видеть на скриншоте ниже.

Когда открыт Firefox или Chrome Developer Tool, нажмите + F , чтобы открыть окно поиска. Вы можете ввести здесь свой селектор XPath и очень легко увидеть, что он выбирает. Я собираюсь использовать этот инструмент в этом разделе.

Селектор XPath начинается с косая черта (/) большую часть времени. Это похоже на дерево каталогов Linux. В / является корнем всех элементов на веб-странице.

Первый элемент - это html . Итак, селектор XPath / html выбирает весь html ярлык.

Внутри html тег, у нас есть тело ярлык. В тело тег можно выбрать с помощью селектора XPath / html / body

В h1 заголовок находится внутри тело ярлык. В h1 заголовок можно выбрать с помощью селектора XPath / html / body / h1

Этот тип селектора XPath называется селектором абсолютного пути. В селекторе абсолютного пути вы должны перемещаться по веб-странице от корня (/) страницы. Недостатком селектора абсолютного пути является то, что даже небольшое изменение структуры веб-страницы может сделать ваш селектор XPath недействительным. Решением этой проблемы является относительный или частичный селектор XPath.

Чтобы увидеть, как работает относительный или частичный путь, создайте новый файл web02.html в www / каталог и введите в нем следующие строки кодов.


< html языкзнак равно'на'>
< голова >
< мета кодировказнак равно'UTF-8'>
< мета имязнак равно'область просмотра' содержаниезнак равно'ширина = ширина устройства, начальный масштаб = 1.0'>
< заглавие >Базовый HTML-документ</ заглавие >
</ голова >
< тело >
< h1 >Привет, мир</ h1 >

< div >
< п >это сообщение</ п >
</ div >

< div >
< охватывать >Привет, мир</ охватывать >
</ div >
</ тело >
</ html >

Как только вы закончите, сохраните web02.html файл и загрузите его в свой веб-браузер.

Как видите, селектор XPath // div / p выбирает п тег внутри div ярлык. Это пример относительного селектора XPath.

Относительный селектор XPath начинается с // . Затем вы указываете структуру элемента, который хотите выбрать. В этом случае, дел / п .

Так, // div / p означает выбрать п элемент внутри div элемент, не имеет значения, что предшествует ему.

Вы также можете выбирать элементы по различным атрибутам, например я бы , класс , тип, и т. д. с помощью селектора XPath. Посмотрим, как это сделать.

Создать новый файл web03.html в www / каталог и введите в нем следующие строки кодов.


< html языкзнак равно'на'>
< голова >
< мета кодировказнак равно'UTF-8'>
< мета имязнак равно'область просмотра' содержаниезнак равно'ширина = ширина устройства, начальный масштаб = 1.0'>
< заглавие > Базовый HTML-документ</ заглавие >
</ голова >
< тело >
< h1 > Привет, мир</ h1 >
< div классзнак равно'container1'>
< п > это сообщение</ п >
< охватывать > это еще одно сообщение</ охватывать >
</ div >
< div классзнак равно'container1'>
< h2 > заголовок2</ h2 >
< п > Некоторые люди
мудро выбирать боли, неприятности и те, которые не попадают на избранного
непростые перелеты и другие отличные услуги? Откуда или откуда он родился?</ п >
</ div >

< охватывать я бызнак равно'footer-msg'> это нижний колонтитул</ охватывать >
</нижний колонтитул>
</ тело >
</ html >

Как только вы закончите, сохраните web03.html файл и загрузите его в свой веб-браузер.

Допустим, вы хотите выбрать все div элементы, которые имеют класс имя container1 . Для этого вы можете использовать селектор XPath // div [@ class = ’container1 ′]

Как видите, у меня есть 2 элемента, которые соответствуют селектору XPath. // div [@ class = ’container1 ′]

Выбрать первый div элемент с класс имя container1 , Добавить [1] в конце XPath выберите, как показано на скриншоте ниже.

Таким же образом можно выбрать второй div элемент с класс имя container1 используя селектор XPath // div [@ class = ’container1 ′] [2]

Вы можете выбрать элементы по я бы также.

Например, чтобы выбрать элемент, имеющий я бы из footer-msg , вы можете использовать селектор XPath // * [@ id = ’footer-msg’]

Здесь * до [@ id = ’footer-msg’] используется для выбора любого элемента независимо от его тега.

Это основы селектора XPath. Теперь у вас должна быть возможность создать собственный селектор XPath для ваших проектов Selenium.

Заключение:

В этой статье я показал вам, как находить и выбирать элементы на веб-страницах с помощью селектора XPath с библиотекой Selenium Python. Я также обсудил наиболее распространенные селекторы XPath. Прочитав эту статью, вы почувствуете себя довольно уверенно, выбирая элементы с веб-страниц с помощью селектора XPath с библиотекой Selenium Python.