python - example - warnings.warn(''selenium support for phantomjs has been deprecated, please use headless
Captura de pantalla transparente con PhantomJS en Selenium[Python]? (1)
Cuando tomo una captura de pantalla con PhantomJS como webdriver en Selenium, todo lo que obtengo es un fondo transparente. ¿Alguna pista de por qué? Funciona con páginas como Google.com, pero no con kahoot.it, la que yo quiero. También funciona con todo lo demás que necesito en Firefox, pero no en 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")
Este es el código
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'')
¡Cualquier ayuda sería muy apreciada! :)
Tu problema es sobre tu sitio web.
Lo tipeó como http://www.kahoot.it pero al final, redirige al sitio https. Entonces, tu PhantomJS está recibiendo errores de la versión ssl o ssl si hay errores.
Modifique su webdriver.PhantomJS () a eso: driver = webdriver.PhantomJS(desired_capabilities=dcap, service_args=[''--ignore-ssl-errors=true'', ''--ssl-protocol=any'', ''--web-security=false''])
y todos deberían ejecutarse correctamente.
Por otro lado, si no te gusta el fondo transparente establece el tuyo con: driver.execute_script(''document.body.style.background = "black"'')
.
Con el primer ejemplo, verá solo el marco izquierdo oscurecido, eso se debe a que un elemento superior se ha establecido en fondo blanco. En el ejemplo de kahoot, no puede establecerlo porque esa página web tiene su propio script de autocambio de JavaScript. Debe eliminarlo antes de intentar cambiarlo, de lo contrario su configuración se anulará pronto o más tarde.
Código completo, listo para funcionar:
#!/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'')
Como sugerencia para otros problemas transparentes, si no desea buscar elementos DOM, simplemente convierta su png a jpg utilizando la clase de imagen para python y cada píxel transparente se establecerá en blanco.