2010-06-15 98 views
9

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

我知道getHTMLSource()将返回主框架正文中的HTML内容,但是如何扩展它以下载重新呈现该页面所需的全套文件。 在此先感谢!

+0

你有什么发现? – Toolkit 2017-03-22 14:42:54

回答

9

硒是不是专为这个,你既可以:

  1. 使用getHtmlSource并解析到外部文件,然后你就可以下载并存储外硒的引用生成的HTML。
  2. 使用Selenium以外的东西来下载和存储一个网站的离线版本 - 我敢肯定有很多工具可以做到这一点,如果你做搜索。例如WGet可以执行递归下载(http://en.wikipedia.org/wiki/Wget#Recursive_download

是否有任何理由要使用Selenium?这是测试策略的一部分,还是只是想找到一个工具来创建页面的离线副本?

+0

我们之所以要使用Selenium,是因为它解析了JavaScript,它对于重构整个页面(包括广告流量)至关重要。 – Rick 2010-06-17 21:58:56

+0

在我的情况下,为了速度的原因,我想用Selenium完成下载。我不得不将页面加载到Selenium和Chrome,我宁愿不再执行所有的HTTP请求,只保存我目前已加载的内容。 – Seanny123 2013-09-05 05:06:40

+1

+1 - WGet被证明是我所需要的完美解决方案。基本上调用一个网址(这是一个动态生成的PDF),目的是将结果保存为PDF本地。 – 2014-01-24 20:52:02

1

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

感谢

1

如果你真的想使用Selenium那么你可以做的是模拟Ctrl+S保存的页面,但随后更多的工作/困难(也取决于操作系统)来模拟按下Enter或改变的位置您想要保存网页及其内容的位置。

我想做同样的事情,但硒意识到,我可以只使用工具,如wget,我真的没必要只使用Selenium ..所以我结束了使用wget,它是真正强大,它正是我需要的。

这是你将如何使用wget

# Save HTML 
    directory = 'directory_to_save_webpage_content/' 
    url = 'http://www.google.com' 
    wget = "wget -p -k -P {} {}".format(directory, url) 
    os.system(wget) 

传递的ARG游戏只是为了让尽可能如果你还在网上可以查看网页脱机做到这一点。

--page-requisites   -p -- get all images needed to display page 
--convert-links    -k -- convert links to be relative 
--directory-prefix   -P -- specify prefix to save files to 
+0

但wget不执行javascript – Toolkit 2017-02-06 19:19:18

+0

我试过这个,它返回的是一个1我的交互式窗口。我的目录中没有输出。 – ShaunO 2017-06-19 23:39:37