web-dev-qa-db-ja.com

Python:Selenium Google ChromeDriverで画像を無効にする

私はこれについて多くの時間を費やして検索しています。結局のところ、私はいくつかの答えを組み合わせてみましたが、うまくいきました。私は私の答えを共有します。誰かがそれを編集したり、これを行うためのより簡単な方法を提供してくれたりしたら、感謝します。

1- 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-次に、ダウンロードした拡張ファイルへのパスで上記のコードを使用できます。

42
1man

画像を無効にする別の方法を次に示します。

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@[email protected]/56/Selenium.webdriver.ChromeOptions.add_experimental_option

76
rocky qi

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);
1
user3453444

おそらく誰もがchrome://settingsにアクセスしてSeleniumで設定を行うために思い浮かぶ別の方法があります。教訓的な好奇心のためにこの方法で始めましたが、次に遭遇したときにシャドウルーツ要素の森に行きました動的コンテンツと組み合わされた3つ以上のシャドウルート要素は、明らかに難読化して自動化を不可能にする方法です少なくとも理論的にはこのアプローチは行き止まりのように見えるかもしれませんが、この答えはサンプルコード、純粋に学習目的で、挑戦に誘惑された人々を宣伝するためのものです。この時点でボタンがクリックできないことがわかったときに、シャドウルートと動的な変更のためにコンテンツの設定だけを見つけるのが困難だっただけではありません。

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