使用Python中的Selenium Marionette拍摄整个页面的屏幕截图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python中的Selenium Marionette拍摄整个页面的屏幕截图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2274字,纯文字阅读大概需要4分钟。
内容图文
![使用Python中的Selenium Marionette拍摄整个页面的屏幕截图](/upload/InfoBanner/zyjiaocheng/683/d737050771844e6f9c4ba90ab03c4513.jpg)
在最近的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节点会在每次拍摄时不断重复.
内容总结
以上是互联网集市为您收集整理的使用Python中的Selenium Marionette拍摄整个页面的屏幕截图全部内容,希望文章能够帮你解决使用Python中的Selenium Marionette拍摄整个页面的屏幕截图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。