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


再次運行,終於實現登錄后跳轉;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM