zoukankan      html  css  js  c++  java
  • Java Selenium中禁用Chrome实验性选项same-site-by-default-cookies和cookies-without-same-site-must-be-secure

    背景:

    Selenium + Java 实现UI自动化,发现登录后,进不了主界面,还是调回登录页,前台报错401,后台日志没发现问题chrome版本 86.0.4240.111(正式版本) (64 位),查资料可知,原来Chrome 51 开始,浏览器的Cookie新增加了一个SameSite属性,用来防止CSRF 攻击和用户追踪。但是我们开发时,少不了跨域啊,上网找了一下资料,有以下解决方法

    方法一:

    在chrome浏览器的地址栏输入:chrome://flags/ ;然后在搜索框输入:SameSite 将SameSite by default cookies 和 Cookies without SameSite must be secure 状态都改为:desabled;设置后点击“relaunch”按钮生效

     

     然后重新打开网址,登录,发现可以登录后跳转,接着运行UI 自动化代码,发现还是无法登录,重新查看SameSite设置,发现已被重置;没办法,查阅资料后,只能代码中解决;

    方法二:

    代码中设置:

    //设置chrome跨域
    ChromeOptions options=new ChromeOptions();
    options.addArguments("--args --disable-web-security --user-data-dir");
    driver=new ChromeDriver(options);
    Log.info("初始化chrome浏览器");
     
    再次运行,还是无法实现登录后跳转;
     
    方法三:
    那么,如何在Java Selenium中禁用Chrome实验性选项same-site-by-default-cookiescookies-without-same-site-must-be-secure

    可以使用same-site-by-default-cookies@2禁用cookies-without-same-site-must-be-secure@

    代码如下:

    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.setHeadless(false);//true不打开页面,false打开页面
    HashMap<String, Object> chromeLocalStatePrefs = new HashMap<String, Object>();
    List<String> experimentalFlags = new ArrayList<String>();
    experimentalFlags.add("same-site-by-default-cookies@2");
    experimentalFlags.add("cookies-without-same-site-must-be-secure@2");
    chromeLocalStatePrefs.put("browser.enabled_labs_experiments", experimentalFlags);
    chromeOptions.setExperimentalOption("localState", chromeLocalStatePrefs);


    再次运行,终于实现登录后跳转;
  • 相关阅读:
    SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
    远程数据同步的三种方法
    粗俗易懂的SQL存储过程在.NET中的实例运用之二
    SSIS脚本组件的代码
    浅谈C# StackTrace 类的实例说明
    解决了:无法加载文件或程序集'stdole, Version=7.0.3300.0'
    收藏: .NET中类型的转换
    WCF 实例 —— Android 短信助手 (WCF + Android)
    粗俗易懂的SQL存储过程在.NET中的实例运用
    此发送邮件的代码对吗?
  • 原文地址:https://www.cnblogs.com/amy420/p/13925947.html
Copyright © 2011-2022 走看看