当我使用 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/