Python Selenium обращается к источнику HTML


97

Как я могу получить исходный код HTML в переменной с помощью модуля Selenium с Python?

Я хотел сделать что-то вроде этого:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")
if "whatever" in html_source:
    # Do something
else:
    # Do something else

Как я могу это сделать? Я не знаю, как получить доступ к исходному HTML.


2
Напишите следующую строку перед условием if: html_source = browser.page_source
Абдул Маджид

Ответы:


194

Вам необходимо получить доступ к page_sourceсобственности:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")

html_source = browser.page_source
if "whatever" in html_source:
    # do something
else:
    # do something else

6
Лучший ответ на данный момент! Самый быстрый и понятный способ сделать это, гораздо более компактный, чем другой, все еще действующий, альтернативный ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado

13
Что, если нам нужно получить исходный код страницы после выполнения всего javascript?
Йогиш Сералатан

4
Работает только если страница полностью загрузилась. Если страница загружается бесконечно, это свойство не работает.
TheRookierLearner

5

С Selenium2Library вы можете использовать get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()

7
Могу ли я установить задержку и получить последний источник? Есть динамическое содержимое, загружаемое с помощью javascript.
CodeGuru

4

driver.page_source поможет вам получить исходный код страницы. Вы можете проверить, присутствует ли текст в источнике страницы или нет.

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("some url")
if "your text here" in driver.page_source:
    print('Found it!')
else:
    print('Did not find it.')

Если вы хотите сохранить источник страницы в переменной, добавьте строку ниже после driver.get :

var_pgsource=driver.page_source

и измените условие if на:

if "your text here" in var_pgsource:

1
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Nic3500

2

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

options = driver.find_elements_by_name_("XXX")
for option in options:
    if option.text == "XXXXXX":
        print(option.text)
        option.click()

Вы можете найти элементы по имени, XPath, идентификатору, ссылке и пути CSS.


1

Чтобы ответить на ваш вопрос о получении URL-адреса для urllib, просто выполните этот код JavaScript:

url = browser.execute_script("return window.location;")

1

Вы можете просто использовать WebDriverобъект и получить доступ к исходному коду страницы через его @propertyполеpage_source ...

Попробуйте этот фрагмент кода :-)

from selenium import webdriver
driver = webdriver.Firefox('path/to/executable')
driver.get('https://some-domain.com')
source = driver.page_source
if 'stuff' in source:
    print('found...')
else:
    print('not in source...')

чем этот ответ отличается от stackoverflow.com/a/7866938/2231972 ?
Роман Коновал

1
from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
html_source_code = driver.execute_script("return document.body.innerHTML;")
html_soup: BeautifulSoup = BeautifulSoup(html_source_code, 'html.parser')

Теперь вы можете применить функцию BeautifulSoup для извлечения данных ...


-6

Я бы рекомендовал получить исходный код с помощью urllib и, если вы собираетесь анализировать, использовать что-то вроде Beautiful Soup .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.

Хорошо, тогда вы знаете, как я могу получить URL-адрес в Selenium? Я хочу сохранить URL-адрес в переменной, чтобы получить к нему доступ с помощью urllib.
user1008791

@ user1008791 Имеет значение? Очевидно, вы позволяете пользователю вводить его в любом случае с помощью raw_input, просто сделайте то же самое, но с urllib.
Griffin,

Это было просто для простого примера, URL-адрес будет сильно меняться.
user1008791

8
Selenium делает многое, чего не делает urllib (например, выполнение JavaScript).
mpenkov

Использование urllib здесь бессмысленно, почему? У AutomatedTester все правильно, это то, что я делаю для сканирования исходного кода HTML, чтобы убедиться, что мы не проталкиваем код среды разработки.
Дэйв,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.