禁用Selenium Python中的图像

2024-09-28 16:19:53 发布

您现在位置: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)

我从stackoverflowDo not want images to load and CSS to render on Firefox in Selenium WebDriver tests with Python得到了代码

但是当我加上

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

最后,它仍然加载图像:/


Tags: thefrom图像importselfseleniumfirefoxprofile
3条回答

更新:自^{} became a frozen setting以来,答案可能不再有效,并且无法更改。请尝试使用quickjava扩展名(链接到answer)。


您需要将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

不幸的是,选项firefox_profile.set_preference('permissions.default.image', 2)将无法再使用最新版本的Firefox禁用图像-[原因请参阅Alecxe对我的问题的回答Can't turn off images in 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

接受的答案对我也不起作用。从kyrenia提到的“原因”链接中,我发现Firefox在第一次启动时会覆盖“permissions.default.image”首选项,我可以通过以下操作来防止这种情况:

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

这看起来没问题,因为我在每次驱动程序启动时都会创建配置文件,所以实际上没有什么要迁移的。

相关问题 更多 >