【问题标题】:Disable images in Selenium Python在 Selenium Python 中禁用图像
【发布时间】:2014-10-02 13:57:00
【问题描述】:

因为 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 Do 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/")

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

【问题讨论】:

    标签: javascript python css selenium selenium-webdriver


    【解决方案1】:

    更新:自permissions.default.image 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()
    

    这就是它的显示方式:

    【讨论】:

    • 不幸的是,这个答案将不再有效,因为 firefox 不再允许更改 default.image 值 - 感谢 alecxe 为我指明了正确的方向 - 我要解决的代码如下。
    • @kyrenia 真的吗?我有 Firefox 41 并且仍然可以工作。
    • @erm3nda - 肯定是我在 [2015 年 7 月] 左右遇到的问题,可能是 Firefox 39 - 如果不再适用,那么通过 firefox_profile.set_preference('permissions.default.image', 2) 禁用显然是一个更清洁的解决方案。
    • 因为很明显,我评论了它......一些懒惰的读者可能会认为使用扩展程序更好,甚至不尝试它;P
    【解决方案2】:

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

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

    这似乎没问题,因为我在每次驱动程序启动时都创建了配置文件,因此实际上没有任何要迁移的内容。

    【讨论】:

      【解决方案3】:

      我知道这是一个 的问题,但它对facebook/php-webdriver 有帮助。 (php webdriver disable javascript 搜索引擎中的第一个结果)

      我想我会发布我的代码(@kyrenia 对 的回答的更改版本)以帮助其他人启动和运行。


      安装一切

      1. 下载并安装facebook/php-webdrivercomposer require facebook/webdriver

      2. Download Selenium 并启动它。 java -jar selenium-server-standalone-#.jar

      3. Download Quick Java 并将其放入您的项目目录中。


      用法

      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

      【讨论】:

        【解决方案4】:

        不幸的是,选项 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
        

        【讨论】:

        • 有趣的 Java 扩展 :D 从未见过。
        • 这应该是最佳答案!谢谢,这对我帮助很大。
        • 我必须使用2.0.6 版本。最新版本 (2.0.7) 引发了 AddonFormatError 异常。它似乎与清单文件有关,但两者都是相同的。
        • 设置 permissions.default.image 在 Firefox 66.0.5 上适用于我。
        • 我添加了 Image Block X,效果很好:) addons.mozilla.org/en-US/firefox/addon/image-block-x
        猜你喜欢
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 2018-12-29
        相关资源
        最近更新 更多