2016-09-20 3 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 - мин.

EDIT:

Вы также можете использовать 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

Это немного Hacky, но я решил эту проблему для себя за счет увеличения ширина окна до 3000 и масштаб до 250%.

driver.set_window_size(3000,800) 

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

Надеюсь, это поможет.

Смежные вопросы