【问题标题】:Python: Disable images in Selenium Google ChromeDriverPython:禁用 Selenium Google ChromeDriver 中的图像
【发布时间】:2015-01-21 15:01:20
【问题描述】:

我花了很多时间搜索这个。 在一天结束时,我结合了许多答案并且它有效。我分享我的答案,如果有人编辑它或为我们提供更简单的方法,我将不胜感激。

1-Disable images in Selenium Google ChromeDriver 中的答案适用于 Java。所以我们应该在 Python 中做同样的事情:

opt = webdriver.ChromeOptions()
opt.add_extension("Block-image_v1.1.crx")
browser = webdriver.Chrome(chrome_options=opt)

2- 但是下载“Block-image_v1.1.crx”有点棘手,因为没有直接的方法可以做到这一点。为此,而不是去:https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj

你可以去http://chrome-extension-downloader.com/ 并将扩展 url 粘贴到那里以便能够下载扩展文件。

3- 然后你就可以使用上面提到的代码和你下载的扩展文件的路径了。

【问题讨论】:

    标签: python google-chrome selenium web-scraping web-crawler


    【解决方案1】:

    这是另一种禁用图像的方法:

    from selenium import webdriver
    
    chrome_options = webdriver.ChromeOptions()
    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(chrome_options=chrome_options)
    

    我在下面找到了它:

    http://nullege.com/codes/show/src@o@s@osintstalker-HEAD@fbstalker1.py/56/selenium.webdriver.ChromeOptions.add_experimental_option

    【讨论】:

    • 这适用于几页,但不适用于 thisthis
    【解决方案2】:

    Java: 有了这个 Chrome 和 Firefox 都不会加载图像。语法不同,但参数上的字符串是一样的。

        chromeOptions = new ChromeOptions();
        HashMap<String, Object> images = new HashMap<String, Object>();
        images.put("images", 2);
        HashMap<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("profile.default_content_setting_values", images);
        chromeOptions.setExperimentalOption("prefs", prefs);
        driver=new ChromeDriver(chromeOptions);
    
        firefoxOpt = new FirefoxOptions();
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("permissions.default.image", 2);
        firefoxOpt.setProfile(profile);
    

    【讨论】:

      【解决方案3】:

      每个人都可能想到另一种方法来访问chrome://settings,然后使用 selenium 进行设置遇到超过 3 个阴影根元素与动态内容相结合显然是一种混淆并使其无法自动化的方法,虽然听起来至少在理论上可能这种方法看起来更像是死胡同,我将把这个答案留给示例代码,仅用于纯粹的学习目的,以宣传那些想去挑战的人。。由于 shadowroots 和动态变化,当您发现此时按钮不可点击时,不仅很难找到内容设置。

      driver = webdriver.Chrome()
      
      
      def expand_shadow_element(element):
        shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
        return shadow_root
      
      driver.get("chrome://settings")
      root1 = driver.find_element_by_tag_name('settings-ui')
      shadow_root1 = expand_shadow_element(root1)
      
      root2 = shadow_root1.find_element_by_css_selector('[page-name="Settings"]')
      shadow_root2 = expand_shadow_element(root2)
      
      root3 = shadow_root2.find_element_by_id('search')
      shadow_root3 = expand_shadow_element(root3)
      
      search_button = shadow_root3.find_element_by_id("searchTerm")
      search_button.click()
      
      text_area = shadow_root3.find_element_by_id('searchInput')
      text_area.send_keys("content settings")
      
      root0 = shadow_root1.find_element_by_id('main')
      shadow_root0_s = expand_shadow_element(root0)
      
      
      root1_p = shadow_root0_s.find_element_by_css_selector('settings-basic-page')
      shadow_root1_p = expand_shadow_element(root1_p)
      
      
      root1_s = shadow_root1_p.find_element_by_css_selector('settings-privacy-page')
      shadow_root1_s = expand_shadow_element(root1_s)
      
      content_settings_div = shadow_root1_s.find_element_by_css_selector('#site-settings-subpage-trigger')
      content_settings = content_settings_div.find_element_by_css_selector("button")
      content_settings.click()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 2014-10-02
        相关资源
        最近更新 更多