Disable images in Selenium Python

前端 未结 4 1380
你的背包
你的背包 2020-12-05 05:38

Because Webdriver waits for the entire page to load before going on to the next line, I think disabling images, css and javascript will speed things up.

from         


        
相关标签:
4条回答
  • 2020-12-05 06:21

    I understand this is a python question, but it helped me with facebook/php-webdriver. (First result in search engine for php webdriver disable javascript)

    I thought I'd post my code (altered version of @kyrenia answer for php) to help others get up and running.


    Install Everything

    1. Download and install facebook/php-webdriver. composer require facebook/webdriver

    2. Download Selenium & Start it. java -jar selenium-server-standalone-#.jar

    3. Download Quick Java and place it into your project directory.


    Usage

    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
    

    View more preference settings here: https://github.com/ThatOneGuyDotNet/QuickJava/blob/master/defaults/preferences/defaults.js

    0 讨论(0)
  • 2020-12-05 06:25

    UPDATE: The answer might not work any longer since permissions.default.image became a frozen setting and cannot be changed. Please try with quickjava extension (link to the answer).


    You need to pass firefox_profile instance to the webdriver constructor:

    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()
    

    And this is how it would be displayed:

    enter image description here

    0 讨论(0)
  • 2020-12-05 06:33

    Unfortunately the option firefox_profile.set_preference('permissions.default.image', 2) will no longer work to disable images with the latest version of Firefox - [for reason see Alecxe's answer to my question Can't turn off images in Selenium / Firefox ]

    The best solution i had was to use the firefox extension quickjava , which amongst other things can disable images- https://addons.mozilla.org/en-us/firefox/addon/quickjava/

    My Python code:

     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)
    

    Other things can also be switched off by adding the lines:

      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
    
    0 讨论(0)
  • 2020-12-05 06:33

    The accepted answer doesn't work for me either. From the "reason" links referred by kyrenia I gathered that Firefox overrides the "permissions.default.image" preference on the first startup and I was able to prevent that by doing:

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

    Which seems to be ok since I create the profile on each driver startup so there is nothing to actually be migrated.

    0 讨论(0)
提交回复
热议问题