python - 在 Selenium [Python] 中使用 PhantomJS 进行透明截图?

标签 python selenium phantomjs screenshot transparent

当我使用 PhantomJS 作为 Selenium 中的网络驱动程序截取屏幕截图时,我得到的只是透明背景。任何线索为什么?它适用于 Google.com 之类的页面,但不适用于我想要的 kahoot.it。它也适用于我在 Firefox 中需要的所有其他东西,但不适用于 PhantomJS。

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

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36")

这是代码

driver = webdriver.PhantomJS(desired_capabilities=dcap)
time.sleep(12)
driver.set_window_size(1024, 768)
driver.get('http://www.kahoot.it')

driver.save_screenshot('testing.png')

任何帮助将不胜感激! :)

最佳答案

您的问题与您的网站有关。

您输入的是 http://www.kahoot.it但最后,它确实重定向到 https 站点。因此,您的 PhantomJS 从 ssl 版本或 ssl 本身获取错误(如果有错误)。

将您的 webdriver.PhantomJS() 修改为: driver = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any', '--web-security=false']) 一切都应该运行正常。

另一方面,如果您不喜欢透明背景,请设置您自己的背景: driver.execute_script('document.body.style.background = "black"').

在第一个示例中,您只会看到左侧框架变黑,这是因为顶部项目已设置为白色背景。在 kahoot 示例中,您无法设置它,因为该网页有它自己的 javascript 自动更改脚本。您应该在尝试更改它之前将其删除,否则您的设置迟早会被覆盖。

完整代码,准备运行:

#!/usr/bin/env python
#! -*- coding: utf-8 -*-

import os
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36")


driver = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any', '--web-security=false'])
driver.set_window_size(1024, 768)
driver.get('http://www.httpbin.org')
time.sleep(2)
driver.execute_script('document.getElementsByClassName("mp")[0].style.background = "green"')
#driver.execute_script('document.body.style.background = "black"')
driver.save_screenshot('testing1.png')

driver.get('http://www.kahoot.it')
time.sleep(2)
driver.execute_script("var body = document.getElementsByTagName('body')[0]; body.setAttribute('background-color', 'white')")
driver.execute_script('document.body.style.background = "black"')
driver.save_screenshot('testing2.png')

作为其他透明问题的建议,如果您不想查找 DOM 项目,只需使用 Python 的 Image 类将您的 png 转换为 jpg,并且每个透明像素都将设置为白色。

关于python - 在 Selenium [Python] 中使用 PhantomJS 进行透明截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116846/

相关文章:

javascript - 通过 Selenium 在 AngularJS 中自动上传文件

ruby - 找不到 phantomjs

python - 使用Python/Boto/Django直接上传到S3构建Policy

javascript - base64 在 python 中编码,在 javascript 中解码

python - 了解 webapp2 路由

javascript - 如何从 div 标签表示的表中检索行和列数据

python - 使用 Chromedriver 在另一台电脑上运行 pyinstaller

python - python如何限制输入的字符类型

c# - 迭代 IReadOnlyCollection 中的元素时 FindElement 不迭代

ubuntu - 如何解决 ubuntu 中 phantom js 的权限被拒绝错误?