Python的Selenium Webdriver:获取页面、输入值、点击提交、获取源代码

2 投票
1 回答
5183 浏览
提问于 2025-04-17 18:06

好吧,我有点困惑。我想用Selenium Webdriver和Python来抓取一个网页。我在Selenium IDE里录制了一个测试案例,里面有一些内容,比如:

Command    Taget
click      link=14

但是我不知道怎么在Python里运行这个。我的目标是获取最终页面的源代码。

有没有什么run_test_case的命令?还是说我得写每一条命令?我感觉测试案例和实际的自动化之间缺少了什么。每个网站都告诉我怎么加载初始页面,怎么从那个页面获取东西,但我该怎么输入值、点击东西,然后获取源代码呢?

我看到过:

submitButton=driver.find_element_by_xpath("....")
submitButton.click()

好的。那么输入值呢?提交页面后怎么获取源代码?抱歉我问得这么笼统,但我真的找了很多地方,都没找到一个能让我明白如何实现我认为Selenium Webdriver的主要目的的好教程。

1 个回答

1

我从来没有用过集成开发环境(IDE),我都是手动写测试或者网站自动化的代码。

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://www.google.com")
print browser.page_source

你可以把这些代码放到一个脚本里,然后直接运行 python wd_script.py,或者打开一个Python的命令行,手动输入代码,看看浏览器是怎么打开的,看看每一行代码是怎么执行的。为了让这个过程顺利进行,你当然需要安装Firefox浏览器。而且,并不是所有版本的Firefox都能和所有版本的Selenium兼容。不过,目前最新的版本(Firefox 19和Selenium 2.31)是可以的。

比如,登录一个表单的代码可能看起来像这样:

username_field = browser.find_element_by_css_selector("input[type=text]")
username_field.send_keys("my_username")
password_field = browser.find_element_by_css_selector("input[type=password]") 
password_field.send_keys("sekretz")
browser.find_element_by_css_selector("input[type=submit]").click() 
print browser.page_source

如果你对CSS很熟悉,这种代码会写得更简单。尝试寻找那些由JavaScript生成的元素时,可能会出现奇怪的错误。比如,你可能在元素还没生成出来之前就去找它们。这种情况下,你可以通过在代码里加上一个时间延迟(time.sleep)来看看这样是否能解决问题。更优雅的做法是写一个通用的等待元素的函数。

如果你想把Webdriver的会话作为一系列集成测试的一部分来运行,我建议使用Python的unittest来创建这些测试。你可以让浏览器访问你要测试的网站,并验证你所做的操作是否让页面处于你预期的状态。如果你感兴趣的话,我可以分享一些示例代码,告诉你怎么做。

撰写回答