微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Python中的Selenium Marionette拍摄整个页面的屏幕截图

在最近的Firefox升级到版本47之后,我们被迫安装Marionette扩展程序以继续使用硒webdriver,在我的情况下,还将硒从2.52升级到2.53.

我使用python版的selenium webdriver来获取以HTML和JavaScript呈现的高分辨率地图图像.以前在firefox中可以很好地工作,并且可以截取整个页面的屏幕截图,这远远超出了我自己屏幕的尺寸.但是,随着最近的更改,屏幕截图仅截取屏幕上可见的区域.我使用以下代码

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX
caps["marionette"] = True

browser = webdriver.Firefox(capabilities=caps)
browser.get(html_file)
time.sleep(15)

browser.save_screenshot(image_name)
browser.quit()

我已经考虑过:降级,拼接几个屏幕截图或切换到Qgis.但是,我希望有一个更优雅的解决方案,使我能够继续使用最新版本的firefox和大致相同的方法.有人知道解决方案吗?也许是通过欺骗硒而认为视口更大?还是通过使用另一个Linux支持的浏览器,该浏览器允许整个屏幕截图?

解决方法:

这是我用的,只需缝合即可:

#!/usr/bin/python
from selenium import webdriver
from PIL import Image
from cStringIO import StringIO

verbose = 1

browser = webdriver.Firefox()
browser.get('https://stackoverflow.com/questions/37906704/taking-a-whole-page-screenshot-with-selenium-marionette-in-python')

# from here https://stackoverflow.com/questions/1145850/how-to-get-height-of-entire-document-with-javascript
js = 'return Math.max( document.body.scrollHeight, document.body.offsetHeight,  document.documentElement.clientHeight,  document.documentElement.scrollHeight,  document.documentElement.offsetHeight);'

scrollheight = browser.execute_script(js)

if verbose > 0: 
    print scrollheight

slices = []
offset = 0
while offset < scrollheight:
    if verbose > 0: 
        print offset

    browser.execute_script("window.scrollTo(0, %s);" % offset)
    img = Image.open(StringIO(browser.get_screenshot_as_png()))
    offset += img.size[1]
    slices.append(img)

    if verbose > 0:
        browser.get_screenshot_as_file('%s/screen_%s.png' % ('/tmp', offset))
        print scrollheight


screenshot = Image.new('RGB', (slices[0].size[0], scrollheight))
offset = 0
for img in slices:
    screenshot.paste(img, (0, offset))
    offset += img.size[1]

screenshot.save('/tmp/test.png')

代码也位于此处:https://gist.github.com/fabtho/13e4a2e7cfbfde671b8fa81bbe9359fb

滚动/固定的问题是,设置为“显示:固定”的html节点会在每次拍摄时不断重复.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐