【问题标题】:How to set Chrome experimental option same-site-by-default-cookie in python selenium如何在 python selenium 中设置 Chrome 实验选项 same-site-by-default-cookie
【发布时间】:2020-01-17 12:52:55
【问题描述】:

我想这应该可行:

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。

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

【问题讨论】:

    标签: python-3.x selenium google-chrome selenium-chromedriver samesite


    【解决方案1】:

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

    【讨论】:

    • @1 中的same-site-by-default-cookies@1 是什么意思?要将same-site-by-default-cookies设置为Disable怎么办?
    • @1 表示启用,@2 表示禁用
    • 如何使用 Web.Config 在 asp.net Web 应用程序中进行设置?如果有人可以为我提供解决方案,那将很有用。谢谢..!
    【解决方案2】:

    你没看错。

    根据文章 Chrome browser pushes SameSite cookie security overhaul Chrome 已添加 SameSite 支持,这将要求 Web 开发人员使用 Set-Cookie 标头的 SameSite 属性控制 cookie 以跨站点访问 cookie,这可以是 StrictLaxNone

    在 Chromium 博客 Improving privacy and security on the web @BenGalbraith [Chrome 产品管理总监] 和 @JustinSchuh [Chrome 工程总监] 中提到:

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

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

    upar...@gmail.com 在讨论中WebDriver mechanism to test samesite cookie security overhaul? 演示了您可以通过Selenium 使用chromedriver 的localState 实验选项启用sameSite cookie 标志,如下所示:

    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;博士

    文档:

    【讨论】:

    • 感谢您的回答,我很清楚 SameSite 属性的用途以及为什么要对其进行测试。但是,当我尝试在 python selenium 代码中保存实验选项时,出现错误:unrecognized chrome option: same-site-by-default-cookies 这是问题,我想解决。如何在 python 中保存这个实验选项?
    • 感谢您的支持 - 我们需要在 localstate 方面禁用此设置以进行测试。 Seleniumhq 网站上没有很好的记录。
    • @SystemsInCode 很高兴能为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2021-07-24
    • 2019-04-12
    • 1970-01-01
    • 2019-12-14
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多