使用Selenium保存整页内容

时间:2010-06-15 22:47:54

标签: selenium

我想知道保存Selenium访问网站时检索到的所有文件的最佳方法是什么。换句话说,当Selenium访问http://www.google.com时,我想保存HTML,JavaScript(包括src标记中引用的脚本),图像以及iframe中包含的可能内容。如何才能做到这一点?

我知道getHTMLSource()将返回主框架主体中的HTML内容,但是如何扩展它以下载再次呈现该页面所需的完整文件集。 提前谢谢!

4 个答案:

答案 0 :(得分:7)

Selenium不是为此设计的,你可以:

  1. 使用getHtmlSource并解析生成的HTML以获取对外部文件的引用,然后您可以在Selenium之外下载和存储这些文件。
  2. 使用Selenium以外的东西来下载和存储网站的离线版本 - 我相信如果你进行搜索,有很多工具可以做到这一点。例如,WGet可以执行递归下载(http://en.wikipedia.org/wiki/Wget#Recursive_download
  3. 你有什么理由想使用Selenium吗?这是您的测试策略的一部分,还是只是想找到一个可以创建页面离线副本的工具?

答案 1 :(得分:1)

一个好的工具是http://www.httrack.com/,Selenium没有提供任何API。如果您需要在selenium中保存测试用例中页面的完整内容,也许可以将httrack作为命令行工具执行。

由于

答案 2 :(得分:0)

如果你真的想使用Selenium,那么你可以做的是模仿Ctrl+S来保存页面,但是它更加努力/困难(也取决于操作系统)模仿按下{{1}或者更改要保存网页及其内容的位置。

我想与Selenium做同样的事情,但意识到我可以使用像Enter这样的工具,我真的不需要只使用Selenium ..所以我最终使用{{1它真的很强大,它完全符合我的需要。

这是您使用Python脚本中的wget执行此操作的方法:

wget

传递的args只是为了让您可以离线查看该页面,就好像您仍然在线一样。

wget

答案 3 :(得分:0)

Selenium唯一用于下载源内容的内置方法是

driver = webdriver.Chrome()
driver.get('www.someurl.com')
page_source = driver.page_source

但是,这并不会像在网页上使用ctrl + s那样下载所有图像,css和js脚本。因此,在导航至Algorithmically所述的网页后,您需要模拟ctr + s键。

我做了一个要点来说明那是怎么做的。 https://gist.github.com/GrilledChickenThighs/211c307edf8f828806c4bb4e4707b106

# Download entire webpage including all javascript, html, css of webpage. Replicates ctrl+s when on a webpage.

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

def save_current_page():      
    ActionChains(browser).send_keys(Keys.CONTROL, "s").perform()