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

时间:2014-11-25 00:37:26

标签: python selenium phantomjs screenshot transparent

当我使用PhantomJS作为Selenium中的webdriver进行截图时,我得到的只是透明背景。有什么线索的原因?它适用于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')

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

1 个答案:

答案 0 :(得分:6)

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

您输入的内容为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项目,建议其他透明问题,只需使用Image类为python将您的png转换为jpg,并将每个透明像素设置为白色。