Как получить HTML источник конкретного элемента с селеном? - PullRequest
7 голосов
/ 29 ноября 2009

Страница, на которую я смотрю, содержит:

<div id='1'> <p> text 1 <h1> text 2 </h1> text 3 <p> text 4 </p> </p> </div>

Я хочу получить весь текст в div, кроме текста, который находится в <h>. (Я хочу получить «текст 1», «текст 3» и «текст 4») Может быть несколько <h> элементов или их вообще нет. И может быть несколько <p> элементов, даже один внутри другого, или их нет.

Я подумал сделать это, получив весь HTML-источник div и используя регулярное выражение для удаления элементов <h>. Но selenium.get_text не возвращает HTML, только текст (все это!).

Я знаю, что могу использовать selenium.get_html_source, а затем искать нужный мне элемент с помощью регулярного выражения, но это выглядит как пустая трата, поскольку селен знает, как найти элемент.

У кого-нибудь есть лучшее решение? Спасибо:)

Ответы [ 4 ]

9 голосов
/ 29 ноября 2009

Следующий код даст вам HTML в элементе div:

sel = selenium('localhost', 4444, browser, my_url)
html = sel.get_eval("this.browserbot.getCurrentWindow().document.getElementById('1').innerHTML")

тогда вы можете использовать BeautifulSoup для его анализа и извлечения того, что вам действительно нужно.

Надеюсь, это поможет

4 голосов
/ 29 ноября 2009

Используйте xpath. От selenium.py:

Без явного префикса локатора Selenium использует следующие стратегии по умолчанию:

  • \ ** dom ** \, для локаторов, начинающихся с "document."
  • \ ** xpath ** \, для локаторов, начинающихся с "//"
  • \ ** идентификатор ** \, иначе

В вашем случае, вы можете попробовать

selenium.get_text("//div[@id='1']/descendant::*[not(self::h1)]")

Вы можете узнать больше о xpath здесь .

P.S. Я не знаю, есть ли хорошая документация HTML для python-selenium, но я не нашел ее; с другой стороны, строки документации в файле selenium.py, похоже, представляют собой исчерпывающую документацию. Поэтому я бы посоветовал поискать источник, чтобы лучше понять, как он работает.

1 голос
/ 29 ноября 2009

А как насчет использования jQuery?

Edit:

Сначала вы должны добавить необходимые файлы .JS, для этого перейдите на www.jQuery.com.

Тогда все, что вам нужно сделать, это вызвать простой селектор jQuery:

alert($("div#1").html());
0 голосов
/ 06 марта 2016

Выбранный ответ не работает в Python 3 на момент написания. Вместо этого используйте это:

from selenium import webdriver

wd = webdriver.Firefox()
wd.get(url)
return wd.execute_script('return window.document.getElementById('1').innerHTML')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...