Python Selenium访问HTML源


97

如何使用Selenium模块和Python在变量中获取HTML源代码?

我想做这样的事情:

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
如果有条件,请在下面写一行:html_source = browser.page_source
Abdul Majeed

Answers:


191

您需要访问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 2014年

13
如果所有JavaScript执行完毕后我们需要获取页面源代码怎么办?
Yogeesh Seralathan 2014年

4
仅在页面已完全加载时有效。如果页面无限期加载,则此属性无效。
TheRookierLearner 2014年

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 '18

2

通过使用页面源,您将获得完整的HTML代码。
因此,首先确定需要检索数据或单击元素的代码或标记块。

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

您可以按名称,XPath,ID,链接和CSS路径找到元素。


1

要回答有关获取用于urllib 的URL的问题,只需执行以下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...')


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.

好的,那么您知道如何在Selenium中获取URL吗?我想将URL存储在变量中,以便可以使用urllib访问它。
user1008791 2011年

@ user1008791有关系吗?显然,您还是要让用户使用raw_input键入它,只需使用urllib进行相同的操作即可。
格里芬

只是为了举一个简单的例子,URL将会发生很大变化。
user1008791 2011年

8
Selenium做了很多urllib不会做的事情(例如执行JavaScript)。
mpenkov 2012年

在这里使用urllib是没有意义的,为什么?AutomatedTester正确无误,这就是我通过HTML源代码进行扫描以确保我们不推送开发环境代码的目的。
戴夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.