Не хотите, чтобы изображения загружались и CSS отображались в Firefox в тестах Selenium WebDriver с Python

Я использую Selenium 2 с привязками python для получения некоторых данных с сайта нашего партнера. Но в среднем это занимает около 13 секунд, чтобы выполнить эту операцию.

Я искал способ отключить изображения css и flash и т. д.

Я использую Firefox 3.6, а также использую pyvirtualdisplay для предотвращения открытия окна firefox. Любая другая оптимизация для ускорения firefox также будет полезна.
Я уже пробовал network.http.* варианты, но не помогает много.

и permissions.default.image = 2

5 ответов


Я придумал способ предотвратить загрузку Firefox CSS, изображений и Flash.

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)

еще раз спасибо @Simon и @ernie за ваши предложения.


параметр 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)

отключение CSS (и я думаю, flash) все еще работает с Firefox propertiees. но их и другие части также можно отключить, добавив строки:

  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) 

Новый Изменить

прошло так много времени с тех пор, как я написал это, и я могу сказать, что область веб-автоматизации (либо для тестирования, либо для обхода/очистки) сильно изменилась. Основные браузеры уже представили --headless флаг и даже интерактивная оболочка. Нет больше изменить старый добрый DISPLAY переменная в Linux.

Firefox также изменился, Перейдя на электрозеркала двигатель написан ржавчиной. Я пробовал профиль с современной версией (в частности, 62.0). Кто-то работал, кто-то нет. Имейте это в виду.


Я просто расширяю ответ Кирении в этом вопросе. Однако отключение CSS может привести к тому, что Jquery не сможет манипулировать элементами DOM. Используйте QuickJava и ниже:

profile.set_preference("network.http.pipelining", True)
profile.set_preference("network.http.proxy.pipelining", True)
profile.set_preference("network.http.pipelining.maxrequests", 8)
profile.set_preference("content.notify.interval", 500000)
profile.set_preference("content.notify.ontimer", True)
profile.set_preference("content.switch.threshold", 250000)
profile.set_preference("browser.cache.memory.capacity", 65536) # Increase the cache capacity.
profile.set_preference("browser.startup.homepage", "about:blank")
profile.set_preference("reader.parse-on-load.enabled", False) # Disable reader, we won't need that.
profile.set_preference("browser.pocket.enabled", False) # Duck pocket too!
profile.set_preference("loop.enabled", False)
profile.set_preference("browser.chrome.toolbar_style", 1) # Text on Toolbar instead of icons
profile.set_preference("browser.display.show_image_placeholders", False) # Don't show thumbnails on not loaded images.
profile.set_preference("browser.display.use_document_colors", False) # Don't show document colors.
profile.set_preference("browser.display.use_document_fonts", 0) # Don't load document fonts.
profile.set_preference("browser.display.use_system_colors", True) # Use system colors.
profile.set_preference("browser.formfill.enable", False) # Autofill on forms disabled.
profile.set_preference("browser.helperApps.deleteTempFileOnExit", True) # Delete temprorary files.
profile.set_preference("browser.shell.checkDefaultBrowser", False)
profile.set_preference("browser.startup.homepage", "about:blank")
profile.set_preference("browser.startup.page", 0) # blank
profile.set_preference("browser.tabs.forceHide", True) # Disable tabs, We won't need that.
profile.set_preference("browser.urlbar.autoFill", False) # Disable autofill on URL bar.
profile.set_preference("browser.urlbar.autocomplete.enabled", False) # Disable autocomplete on URL bar.
profile.set_preference("browser.urlbar.showPopup", False) # Disable list of URLs when typing on URL bar.
profile.set_preference("browser.urlbar.showSearch", False) # Disable search bar.
profile.set_preference("extensions.checkCompatibility", False) # Addon update disabled
profile.set_preference("extensions.checkUpdateSecurity", False)
profile.set_preference("extensions.update.autoUpdateEnabled", False)
profile.set_preference("extensions.update.enabled", False)
profile.set_preference("general.startup.browser", False)
profile.set_preference("plugin.default_plugin_disabled", False)
profile.set_preference("permissions.default.image", 2) # Image load disabled again

что он делает? Вы можете видеть, что он делает в строках комментариев. Тем не менее, я также нашел несколько записей about:config для повышения производительности. Например, код выше не загружается шрифт или цвета документа, но он загружает CSS, поэтому Jquery-или любая другая библиотека - может манипулировать элементами DOM и не вызывает ошибки. (Для дальнейшей отладки вы все еще загружаете CSS, но ваш браузер будет прыгать по строкам, содержащим специальное семейство шрифтов или определение цвета. Таким образом, браузер будет загружать и загружать CSS, но использовать системные значения по умолчанию в стиле и делает страницу быстрее.)

дополнительные сведения проверить это статья.


Изменить (Тесты)

Я только что сделал тест производительности. Вам действительно не нужно принимать результаты всерьез, так как я сделал этот тест только один раз, чтобы у вас была идея.

Я сделал тест на старой машине на процессоре Intel Pentium 2.2 gHZ, ОЗУ 3 gB с областью подкачки 4gB, системе Ubuntu 14.04 x64.

тест состоит из трех шагов:

  • Водитель Нагрузке: секунды впустую загрузить драйвер в webdriver модуль.
  • Производительность Загрузки Страницы: секунды, потраченные на загрузку страницы. Он также включает в себя скорость интернета, однако процесс рендеринга также включен.
  • DOM проверка производительности: DOM проверяет скорость на странице.

Я на этой странице как предмет и осмотрел .xxy a как селектор CSS. Затем я использовал специальный процесс один.

Селен, Firefox, Нет Профиля

Driver Loading Performance: 13.124099016189575
Page Loading Performance: 3.2673521041870117
DOM Inspecting Performance: 67.82778096199036

Селен, Firefox, Профиль Выше

Driver Loading Performance: 7.535895824432373
Page Loading Performance: 2.9704301357269287
DOM Inspecting Performance: 64.25136017799377

Edit (О Безголовости)

Я сделал тест, возможно, месяц назад, но я не мог принять результаты. Однако я хочу упомянуть, что загрузка драйверов, загрузка страниц и скорость проверки DOM уменьшается под десять секунд когда Firefox используется без головы. Это было действительно круто.


вы можете отключить изображения / css с помощью аддона панели инструментов веб-разработчика.

https://addons.mozilla.org/en-US/firefox/addon/web-developer/

перейти к CSS - >отключить и изображения - >отключить


для всех, кто заинтересован в использовании оригинального прямого подхода, предложенного Anupam:

просто установите firefox версии 20.0.1 (https://ftp.mozilla.org/pub/firefox/releases/20.0.1/) - работает отлично.

другие версии также могут работать (версии 32 и выше и версии 3.6.9 и ниже не работают)