Python中使用 Selenium 实现网页截图实例
Selenium是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试。不过,也可以用来给网页截图。目前,它支持Java、C#、Ruby以及Python四种客户端语言。如果你使用Python,则只需要在命令行里输入“sudoeasy_installselenium”并回车,即可安装selenium的Python版本的客户端支持。
以Python为例,我们可以使用下面的脚本来给指定页面(比如毛票票首页)截图:
#-*-coding:utf-8-*-
#
#author:oldj<oldj.wu@gmail.com>
#
fromseleniumimportwebdriver
importtime
defcapture(url,save_fn="capture.png"):
browser=webdriver.Firefox()#Getlocalsessionoffirefox
browser.set_window_size(1200,900)
browser.get(url)#Loadpage
browser.execute_script("""
(function(){
vary=0;
varstep=100;
window.scroll(0,0);
functionf(){
if(y<document.body.scrollHeight){
y+=step;
window.scroll(0,y);
setTimeout(f,50);
}else{
window.scroll(0,0);
document.title+="scroll-done";
}
}
setTimeout(f,1000);
})();
""")
foriinxrange(30):
if"scroll-done"inbrowser.title:
break
time.sleep(1)
browser.save_screenshot(save_fn)
browser.close()
if__name__=="__main__":
capture("https://www.nhooo.com")
注意到,上面的代码中,我并没有在打开页面后立即截图,而是先在页面上执行了一段JavaScript脚本,先将页面的滚动条拖到最下方,再拖回顶部,然后才截图。这样的好处是如果页面下方有一些延迟加载的内容,在这个操作之后一般也都已加载了。
与PageSaver等浏览器插件相比,Selenium功能更为强大,例如,它可以在页面上注入并执行一段JS,还可以模拟鼠标点击等行为,而且可以同时运行多个实例(多个线程同时截图)。这样看来,使用Selenium来给页面截图似乎是一个不错的选择。