2014-11-24 25 views
7

The following code wyłącza arkusze stylów i obrazy na stronie obciążonej Selen Firefox webdriver:Wyłącz stylizacji w wyszukiwarce Google z selenem FirefoxDriver

from selenium import webdriver 

firefox_profile = webdriver.FirefoxProfile() 
firefox_profile.set_preference('permissions.default.stylesheet', 2) 
firefox_profile.set_preference('permissions.default.image', 2) 

driver = webdriver.Firefox(firefox_profile) 
driver.get('http://www.stackoverflow.com/') 

driver.close() 

Współpracuje z stackoverflow.com, facebook.com, yahoo.com ... ale co ciekawe nie działa w wyszukiwarce Google; tylko logo Google znika, a jego arkusz stylów pozostaje na miejscu.

Jeśli spróbujesz z poniższego linku http://google.com/search?q=nelson+mandela, dostaniesz:

enter image description here

Podczas gdy oczekiwany wynik powinien wyglądać następująco (nie stylów + brak zdjęcia):

enter image description here

  • Co się dzieje?
  • Jak to naprawić?
+0

Mogę odtworzyć problem. Bardzo interesujące pytanie. –

Odpowiedz

3

Logo Google pochodzi z css, gdzie obrazy są osadzone w HTML jako dane (img src = "data: image/jpeg; base64, ....) kod wyłącza ładowanie zdalnych obrazów nie ten typ źródeł

  • permissions.default.stylesheet: wyłączyć żadnego formatowania

  • permissions.default.image: wyłączyć dowolny obraz i cSS background-image

jeśli obraz jest osadzony na stronie jako base64 kodowanych nie jest blokowany przez tych uprawnień, ponieważ jest częścią kodu HTML (patrz http://en.wikipedia.org/wiki/Data_URI_scheme)

wyłączyć bardziej formatowania należy dodać:

  • firefox_profile .set_preference ("permissions.default.script", 2);
  • firefox_profile.set_preference ("javascript.enabled", False);
+0

Nie rozumiem. Czy możesz oświecić swoje wyjaśnienia? –

+0

Zaktualizowałem swoją odpowiedź, nie wiem, czy jest to właściwy sposób, czy muszę dodać komentarz. – sax

+0

Powiedziałeś, że logo zniknęło, ponieważ jest częścią CSS, który został wyłączony. Dlaczego nadal widzimy cały układ strony i formatowanie? –

2

uruchomić następujący skrypt poprzez egzekutora skryptu selenu

var queries = ['link[rel=stylesheet][href]', 'style']; 
for (var i = 0; i < queries.length; i++) { 
    var remove = document.querySelectorAll(queries[i]); 
    for (var j = 0; j < remove.length; j++) { 
     remove[j].outerHTML = ''; 
    } 
} 
var inline = document.querySelectorAll('*[style]'); 
for (var i = 0; i < inline.length; i++) { 
    inline[i].removeAttribute('style'); 
} 

ja testowałem to z google, to działa. uzyskałem powyższy skrypt z tego firefox extension kod

driver = webdriver.Firefox(firefox_profile) 
driver.get('http://www.google.com/') 
driver.execute_script("<put the above javascript here as string>") 
+0

Jak widzisz, masz nagrodę, myślę, że ten kod działa! Doceniam to. Ale nie mam doświadczenia w selenach, to nie znajduję żadnego sposobu na użycie tego kodu. Czy mógłbyś oświecić mnie, jak używać "executora skryptów selenu" lub gdzie umieścić scenariusz? @deepak –

+0

@nazmussaif: zaktualizowałem odpowiedź. mam nadzieję, że pomaga. – deepak