簡體   English   中英

無法在Selenium Webdriver中設置cookie

[英]Unable to set cookies in Selenium Webdriver

我嘗試在使用webdriver打開鏈接之前將Cookie添加到鏈接中,但它一直顯示以下錯誤:

org.openqa.selenium.UnableToSetCookieException:無法設置cookie(警告:服務器未提供任何堆棧跟蹤信息)

請在下面找到我的代碼:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example

請提供相關解決方案的幫助。

您要先創建cookie,然后再導航到該站點。 如果您嘗試在域www.example.com上創建cookie,那么您將希望導航到該域上的某個頁面,創建cookie,然后開始測試。

從我的閱讀中,最好的方法是導航到您知道該域中不存在的某個頁面,例如www.example.com/this404page,然后創建cookie。 由於它是一個錯誤頁面,並且應該不包含太多內容,因此加載速度應該更快。 在404頁上創建cookie后,開始測試。

您無法執行此操作,因為WebDriver規范要求您將瀏覽器置於要為其設置Cookie的域上。

提到的解決方法是在設置cookie之前先轉到頁面。 但這會導致一些問題:

不幸的是,這阻止了2個關鍵用例:

  1. 您想在新會話中重新使用另一個Webdriver會話中的cookie,以避免重復獲取cookie所花費的工作。 例如必須重復登錄。
  2. 允許在不相關的線程之間共享Webdriver池,其中每個線程可能都有自己的Cookie。

Webdriver規范顯然需要考慮到這一點。 我在這里打開了一個問題:

https://github.com/w3c/webdriver/issues/1238

給它一些票。 所有的瀏覽器都應該開始處理這種情況。

首先導航到URL,然后嘗試添加cookie,請嘗試以下代碼:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example 

用以下代碼替換您的代碼:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example 
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);

在導航到域之前添加cookie稱為無域cookie,我認為這是不可能的。

我還沒有找到在網址前刪除Cookie的方法,但是我認為以下情況可能會幫助您-

  1. 創建一個工廠類來創建webdriver實例
  2. 返回Webdriver實例之前,請導航至被測域上的任何頁面,並放下cookie,然后向后瀏覽瀏覽器。
  3. 現在就可以開始測試,而無需注意導航和cookie刪除已發生

以防萬一,這很簡單,我不需要創建工廠類,只需從站點加載根頁面(不需要cookie)

首先如上所述收集cookie

pickle.dump(driver.get_cookies(), open("ChromeCookies.pkl", "wb"))

然后獲取不需要cookie的網站根目錄(以我為例)

driver.get(url_root)

然后執行cookie加載

for cookie in pickle.load(open("ChromeCookies.pkl", "rb")):
driver.add_cookie(cookie)

然后轉到我實際上想要訪問的頁面

driver.get(url_not_root_demanding_cookie_which_is_now_there)

如果此方法有問題,請發表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM