Selenium 是一個(gè)可以讓瀏覽器自動(dòng)化地執(zhí)行一系列任務(wù)的工具,常用于自動(dòng)化測(cè)試。不過(guò),也可以用來(lái)給網(wǎng)頁(yè)截圖。目前,它支持 Java、C#、Ruby 以及 Python 四種客戶端語(yǔ)言。如果你使用 Python,則只需要在命令行里輸入“sudo easy_install selenium”并回車(chē),即可安裝 selenium 的 Python 版本的客戶端支持。
以 Python 為例,我們可以使用下面的腳本來(lái)給指定頁(yè)面(比如服務(wù)器之家首頁(yè))截圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# -*- coding: utf-8 -*- # # author: oldj <oldj.wu@gmail.com> # from selenium import webdriver import time def capture(url, save_fn = "capture.png" ): browser = webdriver.Firefox() # Get local session of firefox browser.set_window_size( 1200 , 900 ) browser.get(url) # Load page browser.execute_script( """ (function () { var y = 0; var step = 100; window.scroll(0, 0); function f() { 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); })(); """ ) for i in xrange ( 30 ): if "scroll-done" in browser.title: break time.sleep( 1 ) browser.save_screenshot(save_fn) browser.close() if __name__ = = "__main__" : capture( "http://www.jfrwli.cn" ) |
注意到,上面的代碼中,我并沒(méi)有在打開(kāi)頁(yè)面后立即截圖,而是先在頁(yè)面上執(zhí)行了一段 JavaScript 腳本,先將頁(yè)面的滾動(dòng)條拖到最下方,再拖回頂部,然后才截圖。這樣的好處是如果頁(yè)面下方有一些延遲加載的內(nèi)容,在這個(gè)操作之后一般也都已加載了。
與 PageSaver 等瀏覽器插件相比,Selenium 功能更為強(qiáng)大,例如,它可以在頁(yè)面上注入并執(zhí)行一段 JS,還可以模擬鼠標(biāo)點(diǎn)擊等行為,而且可以同時(shí)運(yùn)行多個(gè)實(shí)例(多個(gè)線程同時(shí)截圖)。這樣看來(lái),使用 Selenium 來(lái)給頁(yè)面截圖似乎是一個(gè)不錯(cuò)的選擇。