Прозрачный скриншот с PhantomJS в Selenium [Python]?

когда я делаю скриншот с PhantomJS в качестве веб-драйвера в Selenium, все, что я получаю, это прозрачный фон. Есть идеи почему? Он работает с такими страницами, как Google.com но не кахут.это то, что я хочу. Он также работает со всем остальным, что мне нужно в 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 ответов


ваша проблема заключается в вашем веб-сайте.

вы набрали его как 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, просто преобразуйте png в jpg, используя класс изображения для python и каждый прозрачный пиксель будут установлены на белый.