2016-09-20 92 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%'") 

希望这会有所帮助。

相关问题