Прозрачный скриншот с 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 и каждый прозрачный пиксель будут установлены на белый.