2016-09-20 93 views
2

我想捕捉高分辨率網站的屏幕截圖來識別文本或者只是爲了保存高質量的圖像。我在Python 2.7中試過這段代碼。網站http://www.flaticon.com/僅作爲示例。如何捕捉高分辨率的網站截圖?

from selenium import webdriver 
import time 
driver = webdriver.PhantomJS() 
#Setting large window size doesn`t resolve the problem 
driver.set_window_size(16000, 12000) 
driver.get('http://www.flaticon.com/') 
time.sleep(3) 
#set resolution 640 dots per inch for this image 
#??? 
driver.save_screenshot('./downloaded/img/welcome_icons.png') # save a screenshot to disk 
driver.close() 

它捕捉屏幕截圖,但分辨率對我來說還不夠。擴大窗口大小並不能解決問題。來自網站的圖片只存在於圖片的一部分。看起來圖像分辨率不受影響。 在保存之前是否有某種方法顯式設置圖像分辨率?

+0

爲什麼不把自己的文字與想象一起用網絡刮板? – MooingRawr

+0

有時網站會在複雜的鏈接網頁下隱藏文字,因此從圖像中抓取文字可能會更簡單。我同意在大多數情況下,最好用網頁剪貼板獲取文本。 – Alexander

回答

2

如果要改變窗口大小,您可以通過

driver.set_window_size(480, 320) 

設置它下面是從開發商之一的Github這樣的一個例子。如您所見,您可以調整窗口大小和截圖質量。

import StringIO 
from selenium import webdriver 
from PIL import Image 


# Install instructions 
# 
# npm install phantomjs 
# sudo apt-get install libjpeg-dev 
# pip install selenium pillow 


driver = webdriver.PhantomJS(executable_path="node_modules/phantomjs/bin/phantomjs") 
driver.set_window_size(1366, 728) # optional 
driver.get('http://google.com') 
driver.save_screenshot('screen_hires.png') 

screen = driver.get_screenshot_as_png() 

# Crop it back to the window size (it may be taller) 
box = (0, 0, 1366, 728) 
im = Image.open(StringIO.StringIO(screen)) 
region = im.crop(box) 
region.save('screen_lores.jpg', 'JPEG', optimize=True, quality=95) 

100的質量是最大值,0 - min。

編輯:

您還可以使用selenium.windowMaxmize()

如果你要放大的屏幕上看到一些具體的文字就像你說的,你可以在Mozilla試試這個:

from selenium.webdriver.common.keys import Keys  

br = webdriver.Firefox() 
zoom = ActionChains(br) 
body = br.find_element_by_tag_name('body') 
for i in range(2): 
    zoom.send_keys_to_element(body,Keys.CONTROL,"+").perform() 
+1

謝謝@ vlad.rad。此代碼盡其所能。但是當我放大一些抓取的截圖時,就有平方像素。這似乎不僅在輸出圖像分辨率的問題。瀏覽器允許用戶縮小網頁。此功能使您可以更大規模地在屏幕上查看圖像和文字。如果我們捕捉到放大的截圖,我們將以更好的質量輸入圖像,這是我們可以保留的。那麼,有沒有一種方法可以在採用截圖之前以編程方式放大網頁? – Alexander

+0

您是否嘗試過:'driver.execute_script(「document.body.style.zoom ='zoom%'」) 我不確定它是否會按照您的要求進行操作。否則,我不知道如何放大網頁並調整窗口的截圖大小。 –

2

這是一個有點哈克,但我通過增加解決了這個問題我自己窗口大小寬度爲3000,縮放至250%。

driver.set_window_size(3000,800) 

driver.execute_script("document.body.style.zoom='250%'") 

希望這會有所幫助。

相關問題