簡體   English   中英

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

[英]Transparent screenshot with PhantomJS in Selenium [Python]?

當我用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')

任何幫助將非常感激! :)

您的問題與您的網站有關。

您將其鍵入為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,並將每個透明像素設置為白色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM