Отключить изображения в 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/")
до конца, он все еще загружает изображения:/
Ответы
Ответ 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
Я понимаю, что это python вопрос, но это помогло мне с facebook/php-webdriver. (Первый результат в поисковой системе для php webdriver disable javascript
)
Я думал, что разместил свой код (измененная версия ответа @kyrenia для php), чтобы помочь другим встать и работать.
Установить все
Использование
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