Подтвердить что ты не робот

Отключить изображения в Selenium Python

Поскольку Webdriver ждет загрузки всей страницы, прежде чем перейти к следующей строке, я думаю, что отключение изображений, css и javascript ускорит процесс.

from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

def disableImages(self):
    ## get the Firefox profile object
    firefoxProfile = FirefoxProfile()
    ## Disable CSS
    firefoxProfile.set_preference('permissions.default.stylesheet', 2)
    ## Disable images
    firefoxProfile.set_preference('permissions.default.image', 2)
    ## Disable Flash
    firefoxProfile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so',
                                      'false')
    ## Set the modified profile while creating the browser object 
    self.browserHandle = webdriver.Firefox(firefoxProfile)

Я получил код из stackoverflow Не хочу загружать изображения и CSS для рендеринга в Firefox в тестах Selenium WebDriver с Python

Но когда я добавляю

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

до конца, он все еще загружает изображения:/

4b9b3361

Ответ 1

UPDATE: ответ может не работать, поскольку permissions.default.image стал замороженным параметром и не может быть изменен. Попробуйте расширение quickjava (ссылка на ответ).


Вам нужно передать экземпляр firefox_profile в конструктор webdriver:

from selenium import webdriver

firefox_profile = webdriver.FirefoxProfile()
firefox_profile.set_preference('permissions.default.stylesheet', 2)
firefox_profile.set_preference('permissions.default.image', 2)
firefox_profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')

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

driver.close()

И вот как это будет отображаться:

enter image description here

Ответ 2

К сожалению, опция firefox_profile.set_preference('permissions.default.image', 2) больше не будет работать, чтобы отключить изображения с последней версией Firefox - [для причины см. ответ Alecxe на мой вопрос Невозможно отключить изображения в Selenium/Firefox]

Лучшим решением было использовать расширение firefox quickjava, которое, среди прочего, может отключить образы - https://addons.mozilla.org/en-us/firefox/addon/quickjava/

Мой код Python:

 from selenium import webdriver
 firefox_profile = webdriver.FirefoxProfile()

 firefox_profile.add_extension(folder_xpi_file_saved_in + "\\quickjava-2.0.6-fx.xpi")
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.curVersion", "2.0.6.1") ## Prevents loading the 'thank you for installing screen'
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Images", 2)  ## Turns images off
 firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.AnimatedImage", 2)  ## Turns animated images off

 driver = webdriver.Firefox(firefox_profile)
 driver.get(web_address_desired)

Другие вещи также можно отключить, добавив строки:

  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.CSS", 2)  ## CSS
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Cookies", 2)  ## Cookies
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Flash", 2)  ## Flash
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Java", 2)  ## Java
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.JavaScript", 2)  ## JavaScript
  firefox_profile.set_preference("thatoneguydotnet.QuickJava.startupStatus.Silverlight", 2)  ## Silverlight

Ответ 3

Принятый ответ тоже не работает для меня. Из ссылок "причины", упомянутых киринией, я понял, что Firefox переопределяет предпочтение "permissions.default.image" при первом запуске, и я смог предотвратить это:

# Arbitrarily high number
profile.set_preference('browser.migration.version', 9001)

Кажется, что это нормально, так как я создаю профиль при каждом запуске драйвера, поэтому на самом деле ничего не нужно переносить.

Ответ 4

Я понимаю, что это вопрос, но это помогло мне с facebook/php-webdriver. (Первый результат в поисковой системе для php webdriver disable javascript)

Я думал, что разместил свой код (измененная версия ответа @kyrenia для ), чтобы помочь другим встать и работать.


Установить все


Использование

use Facebook\WebDriver\Firefox\FirefoxProfile;
use Facebook\WebDriver\Firefox\FirefoxDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;

// Change this to the path of you xpi
$extensionPath = $this->container->getParameter('kernel.root_dir').'/../bin/selenium/quickjava-2.0.6-fx.xpi';

// Build our firefox profile
$profile = new FirefoxProfile();
$profile->addExtension($extensionPath);
$profile->setPreference('thatoneguydotnet.QuickJava.curVersion', '2.0.6.1');
$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.Images', 2);
$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.AnimatedImage', 2);
$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.CSS', 2);
//$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.Cookies', 2);
$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.Flash', 2);
$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.Java', 2);
//$profile->setPreference('thatoneguydotnet.QuickJava.startupStatus.JavaScript', 2);
$profile->setPreference("thatoneguydotnet.QuickJava.startupStatus.Silverlight", 2);

// Create DC
$dc = DesiredCapabilities::firefox();
$dc->setCapability(FirefoxDriver::PROFILE, $profile);

// Create our new driver
$driver = RemoteWebDriver::create($host, $dc);
$driver->get('http://stackoverflow.com');

// The HTML Source code
$html = $driver->getPageSource();

// Firefox should be open and you can see no images or css was loaded

Дополнительные настройки настроек здесь: https://github.com/ThatOneGuyDotNet/QuickJava/blob/master/defaults/preferences/defaults.js