6

Получение HTML-источника WebElement в Selenium WebDriver с использованием Python

6

Я использую Python-биндинги для работы с Selenium WebDriver:

from selenium import webdriver
wd = webdriver.Firefox()

Я знаю, что могу получить элемент на странице следующим образом:

elem = wd.find_element_by_css_selector('#my-id')

Также я знаю, что могу получить исходный код всей страницы с помощью:

wd.page_source

Но существует ли способ получить "исходный код элемента"?

elem.source   # <-- возвращает HTML в виде строки

Документация Selenium WebDriver для Python практически отсутствует, и я не вижу ничего в коде, что могло бы обеспечить эту функциональность.

Какой лучший способ получить HTML элемента (и его дочерних элементов)?

5 ответ(ов)

10

Вы можете использовать атрибут innerHTML, чтобы получить исходный контент элемента, или outerHTML, чтобы получить источник с самим элементом.

Примеры на разных языках:

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

C#:

element.GetAttribute("innerHTML");

Ruby:

element.attribute("innerHTML")

JavaScript:

element.getAttribute('innerHTML');

PHP:

$element->getAttribute('innerHTML');

Это было протестировано и работает с использованием ChromeDriver.

1

Вот как можно получить HTML-код страницы с помощью Selenium на Python:

elem = driver.find_element("xpath", "//*")
source_code = elem.get_attribute("outerHTML")

А вот как сохранить этот HTML в файл:

with open('c:/html_source_code.html', 'w', encoding='utf-8') as f:
    f.write(source_code)

Обратите внимание, что я добавил параметр encoding='utf-8' при открытии файла, чтобы корректно сохранить символы.

1

Нет простого способа получить HTML код элемента webelement. Для этого вам потребуется использовать JavaScript. Я не совсем уверен относительно биндингов для Python, но в Java это можно сделать следующим образом. Уверен, что в Python есть нечто подобное классу JavascriptExecutor.

WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);

Для Python вы можете использовать метод execute_script из библиотеки Selenium. Вот аналогичный код:

element = driver.find_element(By.ID, "foo")
contents = driver.execute_script("return arguments[0].innerHTML;", element)

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

0

В Ruby с использованием selenium-webdriver (версия 2.32.1) есть метод page_source, который возвращает весь исходный код страницы.

Если вы хотите получить исходный код текущей страницы, вы можете использовать следующий код:

require 'selenium-webdriver'

# Инициализация драйвера
driver = Selenium::WebDriver.for :chrome

# Открытие страницы
driver.get 'http://example.com'

# Получение исходного кода страницы
page_source = driver.page_source

puts page_source

# Не забудьте закрыть драйвер после использования
driver.quit

Этот код создает экземпляр веб-драйвера, загружает указанную страницу и затем использует метод page_source, чтобы получить и вывести весь HTML-код страницы в консоль.

0

Это выглядит устаревшим, но пусть будет здесь. Правильный способ сделать это в вашем случае:

elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)

или

html = elem.get_attribute('innerHTML')

Оба варианта работают для меня (selenium-server-standalone-2.35.0).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь