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


再次运行,终于实现登录后跳转;

 

posted @ 2020-11-04 14:53  amy**  阅读(4960)  评论(0编辑  收藏  举报