Перевод статьи How To Handle Web Tables in Selenium Python.
Как вы, конечно же, знаете разметка веб-таблицы в HTML-документе определяется тегом Для примера рассмотрим следующую таблицу. И так, для того, чтобы получить и обработать данные, которые содержит веб-таблица, мы должны иметь возможность выполнять следующие действия: Для того, чтобы рассчитать общее число строк в таблице, сначала сформируем xpath запрос для выборки всех ее строк с использованием метода Пример кода для получения числа строк в таблице представлен ниже. Чтобы получить общее количество столбцов таблицы, сначала, по аналогии со строками, сформируем соответствующий xpath запрос, а затем используем тот же метод Как видим, для этого достаточно исправить в предыдущем xpath запросе Пример кода для получения числа столбцов в таблице представлен ниже. Для того, чтобы получить содержимое заголовков таблицы создадим xpath запрос и получим список элементов всех строк с использованием метода Пример кода для получения содержимого заголовков таблицы представлен ниже. После выбора первой строки, в цикле Чтобы получить содержимое всех ячеек таблицы, сначала сформируем xpath запрос для получения всех строк и столбцов таблицы с помощью метода Пример кода для получения всех данных из ячеек таблицы представлен ниже. Для того, чтобы найти нужный текст в какой-либо из ячеек таблицы, сначала сформируем xpath запрос для получения всех ее строк и столбцов с помощью метода Чтобы получить текстовое содержимое определенной ячейки таблицы, необходимо сформировать соответствующий xpath запрос для получения элемента нужной ячейки с помощью метода В примере кода ниже показано, как это можно сделать.. Строки таблицы представлены тегом
, а столбцы — . В большинстве случаев каждая таблица также содержит заголовки, разметка которых определяется тегом .
find_elements_by_xpath()
. И поскольку этот метод возвращает список элементов, то получим количество строк с помощью метода len()
.# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
driver.get("https://www.softwaretestingmaterial.com/sample-webpage-to-automate/")
# получаем список всех строк таблицы
l = driver.find_elements_by_xpath ("//*[@class= 'spTable']/tbody/tr")
# получаем количество строк
print(len(l))
# по окончанию работы закроем браузер
driver.quit()
find_elements_by_xpath()
. И поскольку этот метод вернет список элементов, то мы получим количество столбцов опять же с помощью метода len()
. на . Отметим, что если в нашей таблице используется оглавление, которое мы видим в ее первой строке, то мы должны использовать тег для получения числа ее столбцов. Далее же для получения значений из любой другой строки, кроме первой, мы должны использовать тег .
# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
driver.get("https://www.softwaretestingmaterial.com/sample-webpage-to-automate/")
# получаем список всех столбцов из третьей строки таблицы
l = driver.find_elements_by_xpath("//*[@class= 'spTable']/tbody/tr[3]/td")
# получаем количество столбцов
print(len(l))
# по окончанию работы закроем браузер
driver.quit()
find_elements_by_xpath()
. Как мы уже знаем этот метод возвращает список. Нам же необходимо получить из него первую строку, а затем выбрать из нее элементы с тегом .
for
выведем в консоли соответствующее текстовое значение text
, содержимого каждой отдельной ячейки с заголовком столбца таблицы.# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
driver.get("https://www.softwaretestingmaterial.com/sample-webpage-to-automate/")
# получим из первой строки таблицы ее заголовки
l = driver.find_elements_by_xpath ("//*[@class= 'spTable']/tbody/tr[1]/th")
# перебираем список заголовков таблицы
for i in l :
# выводим содержимое заголовка
print(i.text)
# по окончанию работы закроем браузер
driver.close()
find_elements_by_xpath()
. Поскольку этот метод возвращает список, то мы также можем получить число строк и столбцов с помощью метода len()
. Теперь нам нужно перебирать каждую строку и каждый столбец соответствующей части (с нужными нам данными) таблицы, а затем получить текст из каждой ячейки с помощью метода text
.# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome (executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
u = "https://www.softwaretestingmaterial.com/sample-webpage-to-automate/"
driver.get(u)
# получим все строки таблицы
r = driver.find_elements_by_xpath("//table[@class='spTable']/tbody/tr")
# получим все столбцы таблицы
c = driver.find_elements_by_xpath("//*[@class='spTable']/tbody/tr[3]/td")
# получим количество строк с помощью метода len
rc = len(r)
# получим количество столбцов
cc = len(c)
# в цикле перебираем список со строками за исключением строки с заголовками
for i in range(2, rc + 1):
# в цикле перебираем список столбцов из текущей строки
for j in range(1, cc + 1):
# получаем содержимое ячейки с помощью метода text
d = driver.find_element_by_xpath("//tr["+str(i)+"]/td["+str(j)+"]").text
print(d)
# по окончанию работы закроем браузер
driver.close()
find_elements_by_xpath()
. И поскольку этот метод возвращает список элементов, то мы можем получить количество строк и столбцов с помощью метода len()
. Далее будем перебирать элементы нашей таблицы построчно, а каждую строку по столбцам (то есть фактически по ячейкам). Текстовые данные конкретной ячейки получим с помощью метода text
. Теперь, как только мы можем получить данные из ячеек, проверим соответствие их содержимого тексту, который ищем, с помощью функции xpath text()
.# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
u = "https://www.softwaretestingmaterial.com/sample-webpage-to-automate/"
driver.get(u)
# получим все строки таблицы
r = driver.find_elements_by_xpath ("//table[@class= 'spTable']/tbody/tr")
# получим все столбцы таблицы
c = driver.find_elements_by_xpath ("//*[@class= 'spTable']/tbody/tr[3]/td")
# получим количество строк с помощью метода len d
rc = len(r)
# получим количество столбцов
cc = len(c)
# в цикле перебираем список со строками за исключением строки с заголовками
for i in range(2, rc + 1) :
# в цикле перебираем список столбцов из текущей строки
for j in range(1, cc + 1) :
# получаем содержимое ячейки с помощью метода text
d = driver.find_element_by_xpath("//tr["+str(i)+"]/td["+str(j)+"]").text
# проверяем соответствие текста ячейки искомому
m = driver.find_elements_by_xpath("//td[text() = 'EID001']")
# определяем количество совпадений искомого текста
s = len(m)
# проверяем были ли совпадения
If(s > 0) :
print ("Text found")
# по окончанию работы закроем браузер
driver.close()
find_element_by_xpath()
.# импортируем webdriver
from selenium import webdriver
# импортируем класс Keys
from selenium.webdriver.common import keys
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe")
# используем метод get для получения страницы по URL
u = "https://www.softwaretestingmaterial.com/sample-webpage-to-automate/"
driver.get(u)
# получим элемент ячейки в третьей строке втором столбце
c = driver.find_element_by_xpath("//*[@class= 'spTable']/tbody/tr[3]/td[2]")
# выведем текстовое содержимое ячейки
print(c.text)
# по окончанию работы закроем браузер
driver.close()
Оставить комментарий