使用Selenium Webdriver按Enter键,不带html按钮

时间:2015-01-19 04:59:04

标签: python selenium selenium-webdriver

老实说,我只是想将网页保存为文本文件。所以我做了什么:

fp=webdriver.FirefoxProfile()
browser = webdriver.Firefox(firefox_profile=fp)
browser.get('http://www.google.com')

saveas = ActionChains(browser).key_down(Keys.CONTROL)\
         .send_keys('s').key_up(Keys.CONTROL)
saveas.perform()

但它直接进入Firefox的Save As窗口,我只需要按 Enter 按钮保存页面。我怎样才能做到这一点?

我不想使用另一个图书馆按键(但是,如果没有其他选择,我可以考虑一下)。此外,如果有一种更简单的方法将页面保存为Selenium的文本文件,我会采用它。

3 个答案:

答案 0 :(得分:1)

在这种情况下,您无需手动调用“保存”对话框。只需从.page_source属性中获取完整的页面源代码:

browser.page_source

将其保存到文件中:

with open('output.html', 'w') as f:
    f.write(browser.page_source.encode('utf-8'))

您可能在将 Enter 键发送到此“保存(as)”对话框时遇到困难的原因是它不是javascript弹出窗口 - selenium无法控制它。在这种情况下,通常我们会尝试通过调整firefox首选项来阻止弹出窗口自动打开和下载文件,请参阅:

但是,由于这是一个需要下载的“完整网页” - 没有特定的mime类型可供配置(如果我们谈论的是Firefox)。


而且,是的,考虑一下@MattDMo指出的内容 - 如果形成页面没有动态性,那么您可能不需要selenium

修改

获取页面文本并保存:

with open('/Path/to/my/file/output.txt', 'w') as f:
    f.write(driver.find_element_by_tag_name('body').text.encode('utf-8'))

答案 1 :(得分:0)

简单地保存网页内容不需要selenium:

import requests

url = 'https://www.google.com'
r = requests.get(url)
with open('google.html', 'w') as fh:
    fh.write(r.text)
如果您愿意,也可以使用

urlliburllib2或类似内容,我发现requests是最简单,最直接的。

答案 2 :(得分:-1)

.send_keys(Keys.RETURN)应该为你做。