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来给页面截图似乎是一个不错的选择。