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.
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
Non riesco a riprodurre uno sfondo trasparente su Windows o Linux con 1.9.7 e 1.9.8 . –
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! :) –