2

我想这应该有效:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option('same-site-by-default-cookies', 'true')
driver = webdriver.Chrome(chrome_options=options)

启用为未来的 chrome 版本安排的相同站点 cookie 限制。不是,有错误:

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。

是否有任何参考资料可以帮助我设置此选项或其他选项?

4

2 回答 2

5

在 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")

Python selenium 客户端将发送如下功能

[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/

于 2020-01-21T04:48:04.373 回答
1

你没看错。

根据文章Chrome 浏览器推动 SameSite cookie 安全性大修Chrome 已添加SameSiteSameSite支持,这将要求 Web 开发人员使用标头的属性控制 cookie 以跨站点访问 cookie,该属性Set-Cookie可以是StrictLaxNone

在 Chromium 博客提高网络隐私和安全性中, @BenGalbraith [Chrome 产品管理总监] 和 @JustinSchuh [Chrome 工程总监] 提到:

此更改将使用户能够清除所有此类 cookie,同时不影响单个域 cookie,从而保留用户登录名和设置。它还将使浏览器能够提供有关哪些网站正在设置这些 cookie 的明确信息,因此用户可以就如何使用他们的数据做出明智的选择。

此更改还为用户带来了显着的安全优势,默认情况下保护 cookie 免受跨站点注入和数据泄露攻击,如 Spectre 和 CSRF。我们还宣布了最终将跨站点 cookie 限制为 HTTPS 连接的计划,为我们的用户提供额外的重要隐私保护。

upar...@gmail.com 在讨论WebDriver 机制来测试samesite cookie 安全性大修?证明您可以通过Selenium使用chromedriver 的实验选项启用sameSitecookie 标志,如下所示:localState

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

tl; 博士

文件:

于 2020-01-17T23:07:49.120 回答