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


    再次运行,终于实现登录后跳转;
  • 相关阅读:
    SparkR初体验2.0
    R语言数据集合并、数据增减、不等长合并
    采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名
    flask实战-个人博客-编写博客前台
    flask实战-个人博客-电子邮件支持
    linux虚拟机获取不到ip的解决方法 --
    flask实战-个人博客-视图函数
    flask实战-个人博客-表单
    flask实战-个人博客-模板 --
    flask实战-个人博客-数据库-生成虚拟数据 --
  • 原文地址:https://www.cnblogs.com/amy420/p/13925947.html
Copyright © 2011-2022 走看看