私はこれがうまくいくと思います:
from Selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option('same-site-by-default-cookies', 'true')
driver = webdriver.Chrome(chrome_options=options)
将来予定されている同じサイトのCookie制限を有効にするにはchromeバージョン。そうではありません。エラーが発生します:
Selenium.common.exceptions.InvalidArgumentException:
Message: invalid argument: cannot parse capability: goog:chromeOptions
from invalid argument: unrecognized chrome option: same-site-by-default-cookies
Chrome:// flagsを使用して手動でオプションを変更し、機能していることを確認できます。ただし、自動化し、テストスクリプトを実行して確認したいと思います。
Javaコードはここにあります: https://groups.google.com/forum/#!topic/chromedriver-users/cI8hj7eihRo それは可能ですが、私はそれをPythonに転送する方法がわかりません。
このオプションまたは別のオプションを設定するのに役立つ参照がありますか?
Chrome:バージョン79.0.3945.130(公式ビルド)(64ビット)でテスト済み
Pythonでは、以下のコードを使用できます
chrome_options = webdriver.ChromeOptions()
experimentalFlags = ['same-site-by-default-cookies@1','cookies-without-same-site-must-be-secure@1']
chromeLocalStatePrefs = { 'browser.enabled_labs_experiments' : experimentalFlags}
chrome_options.add_experimental_option('localState',chromeLocalStatePrefs)
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.bing.com")
PythonSeleniumクライアントは以下の機能を送信します
[1579581631.792][INFO]: Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614})
[1579581631.792][INFO]: Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1579581632.264][INFO]: [f6b8433509c420fd317902f72b1d102d] COMMAND InitSession {
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ ],
"extensions": [ ],
"localState": {
"browser.enabled_labs_experiments": [ "same-site-by-default-cookies@1", "cookies-without-same-site-must-be-secure@1" ]
}
},
"platformName": "any"
},
"firstMatch": [ {
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ ],
"extensions": [ ],
"localState": {
"browser.enabled_labs_experiments": [ "same-site-by-default-cookies@1", "cookies-without-same-site-must-be-secure@1" ]
}
},
"platform": "ANY",
"version": ""
}
}
実際に機能したかどうかを確認します。 chrome:// flags /に移動します
あなたはそれを正しく見ました。
記事によると ChromeブラウザはSameSite cookieセキュリティのオーバーホールをプッシュします ChromeはSameSiteサポートを追加しました。 Web開発者は、Set-Cookie
ヘッダーのSameSite
属性を使用して、サイト間でCookieにアクセスするようにCookieを制御します。これはStrict
、Lax
、またはNone
。
Chromiumブログで ウェブ上のプライバシーとセキュリティの向上 @BenGalbraith [Director、Chrome ProductManagement]および@JustinSchuh [Director、Chrome Engineering]は次のように述べています:
この変更により、ユーザーは、単一ドメインのCookieに影響を与えずに、ユーザーのログインと設定を維持しながら、そのようなCookieをすべてクリアできるようになります。また、ブラウザがこれらのCookieを設定しているサイトに関する明確な情報を提供できるようになるため、ユーザーはデータの使用方法について情報に基づいた選択を行うことができます。
この変更は、ユーザーにとって重要なセキュリティ上の利点もあり、デフォルトでSpectreやCSRFなどのクロスサイトインジェクションやデータ開示攻撃からCookieを保護します。また、最終的にクロスサイトCookieをHTTPS接続に制限し、ユーザーにさらに重要なプライバシー保護を提供する計画を発表しました。
ディスカッションのupar ... @ gmail.com 同じサイトのCookieセキュリティのオーバーホールをテストするWebDriverメカニズム?を使用してsameSite
cookieフラグを有効にできることを示しましたlocalState
次のように Selenium までのchromedriverの実験オプション:
ChromeOptions chromeOptions = new ChromeOptions();
HashMap<String, Object> chromeLocalStatePrefs = new HashMap<String, Object>();
List<String> experimentalFlags = new ArrayList<String>();
experimentalFlags.add("same-site-by-default-cookies@1");
experimentalFlags.add("cookies-without-same-site-must-be-secure@1");
chromeLocalStatePrefs.put("browser.enabled_labs_experiments",experimentalFlags);
chromeOptions.setExperimentalOption("localState", chromeLocalStatePrefs);
ドキュメント: