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


    再次运行,终于实现登录后跳转;
  • 相关阅读:
    一个简单的PHP登录演示(SESSION版 与 COOKIE版)
    web系统之session劫持解决
    CKFinder 1.4.3 任意文件上传漏洞
    linux服务器磁盘扩容的方法
    Linux下lvm在线扩容步骤
    Centos7使用LVM扩容磁盘(测试成功)
    CentOS7下利用init.d启动脚本实现tomcat开机自启动
    Linux tomcat安装详解(未完)
    linux下 目录(扩容)挂载磁盘
    Linux下环境变量设置
  • 原文地址:https://www.cnblogs.com/amy420/p/13925947.html
Copyright © 2011-2022 走看看