2014-11-25 15 views
9

Quando faccio uno screenshot con PhantomJS come webdriver in Selenium, tutto quello che ottengo è uno sfondo trasparente. Qualche indizio perché? Funziona con pagine come Google.com, ma non con kahoot.it, quella che voglio. Funziona anche con tutto il resto di cui ho bisogno in Firefox, ma non in PhantomJS.Schermata trasparente con PhantomJS in selenio [Python]?

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") 

Questo è il codice

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') 

Qualsiasi aiuto sarebbe molto apprezzato! :)

+3

Non familiare con selenio e PhantomJS.but, questo sembra rilevante. 'PhantomJS non imposta affatto il colore di sfondo della pagina Web, è lasciato alla pagina per decidere il suo colore di sfondo. Se la pagina non imposta nulla, rimane trasparente. [Domande frequenti su PhantomJS] (http://phantomjs.org/faq.html) – Himal

+0

Non riesco a riprodurre uno sfondo trasparente su Windows o Linux con 1.9.7 e 1.9.8 . –

+0

Wow, avevi ragione. Sto usando un Mac su Yosemite e ho installato una macchina virtuale con Windows 8 solo per testarlo. Tutto ha funzionato alla perfezione; anche il resto del codice. Non capisco davvero perché, ma grazie mille! :) –

risposta

6

Il tuo problema riguarda il tuo sito web.

Lo hai digitato come http://www.kahoot.it ma alla fine reindirizza al sito https. Quindi, il tuo PhantomJS sta ricevendo errori dalla versione ssl o ssl stesso se dove errori.

Modifica il tuo webdriver.PhantomJS() a quello: driver = webdriver.PhantomJS(desired_capabilities=dcap, service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any', '--web-security=false']) e tutto dovrebbe funzionare correttamente.

D'altra parte, se non ti piace lo sfondo trasparente puoi impostarlo con: driver.execute_script('document.body.style.background = "black"').

Con il primo esempio vedrete solo il frame di sinistra oscurato, perché un elemento in alto è stato impostato su sfondo bianco. Nell'esempio kahoot non puoi impostarlo perché quella pagina ha il suo script di scambio automatico javascript. Dovresti rimuoverlo prima di tentare di cambiarlo, altrimenti le tue impostazioni verranno annullate presto o tardi.

codice completo, pronto per essere eseguito:

#!/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') 

Come suggerimento per altri problemi trasparenti se non si vuole cercare gli elementi DOM, basta convertire il png a jpg utilizzando la classe Immagine per pitone e ogni trasparente il pixel sarebbe stato impostato su bianco.

Problemi correlati