Selenium 无法使用我自己的 cookie 打开带有 webdriver 的页面

Selenium can't open a page with webdriver using my own cookies

提问人:Bondavalli69 提问时间:3/30/2019 最后编辑:Bondavalli69 更新时间:4/2/2019 访问量:3286

问:

我正在尝试设置一些我已经拥有的 cookie,以处理对使用 Java 中的 ChromeWebDriver 和 Selenium 的网站的请求:

System.setProperty("webdriver.chrome.driver", "/Users/test/Desktop/Configs/chromedriver");
WebDriver driver = new ChromeDriver();
driver.manage().addCookie(new Cookie("mycookie","test"));
driver.get("https://www.google.com/");  

但是我得到了以下例外: 线程“main”org.openqa.selenium.UnableToSetCookieException中的异常:无法设置cookie。当然,我正在尝试使用真正的 cookie,它们在浏览器中也能正常工作......

java selenium chrome-web-driver

评论


答:

0赞 Rmahajan 3/30/2019 #1

首先导航到 URL,然后尝试添加 cookie,尝试以下顺序:

System.setProperty("webdriver.chrome.driver", "/Users/test/Desktop/Configs/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com/");
driver.manage().addCookie(new Cookie("mycookie","test"));

更新:添加cookie后,我们可以通过显示所有cookie来检查。

Set<Cookie> cookiesList =  driver.manage().getCookies();
for(Cookie getcookies :cookiesList) {
   System.out.println(getcookies );
}

评论

0赞 Bondavalli69 3/30/2019
这样,当您调用 addCookies 时,您添加了第一个请求的 cookie + 我自己的 cookie,因此这不起作用......我之所以这么说,是因为我试图得到它们:Set<Cookie> coo = driver.manage().getCookies();coo.forEach(System.out::p rintln);
1赞 Corey Goldberg 3/31/2019 #2

Selenium 被限制向任意域添加 cookie。Cookie 的域必须等于当前浏览上下文的活动文档的域。此行为在 W3C WebDriver 规范中进行了描述,并由所有主要浏览器供应商实现。请参见:https://w3c.github.io/webdriver/#add-cookie

解决方法是,您可以先导航到域上的任何页面,然后为该域添加 Cookie。

评论

0赞 kyrlon 1/12/2023
绝对不知道这一点。一旦我导航到一个页面,我才能加载我的 cookie,而不会出现错误!
0赞 Abhishek Dhoundiyal 3/31/2019 #3

我同意 Ros5292 的答案。

好的,现在来到您的要求,您需要在打开 url 后删除 cookie,如下所述:

driver.get("https://www.google.com/");
driver.manage().deleteAllCookies();
driver.manage().addCookie(new Cookie("mycookie","test"));
Set<Cookie> coo = driver.manage().getCookies(); 
coo.forEach(System.out::println); 

自选:

还有一件事,如果你想看到通过添加cookie显式完成的更改,你需要刷新你的页面(在添加它之后):

driver.get("https://www.google.com/");
driver.manage().deleteAllCookies();
driver.manage().addCookie(new Cookie("mycookie","test"));
driver.navigate().refresh();
0赞 Adi Ohana 4/2/2019 #4

如上所述,驱动程序当前 URL 必须与 Cookie 位于同一域中。除此之外,您还可以像在普通浏览器中一样使用 javascript 使用 Selenium 设置 cookie:

driver.executeScript("document.cookie ="'cookie1=test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'");

如果要将 Cookie 添加到 Cookie 列表中,可以执行以下操作:

driver.executeScript("document.cookie ="document.cookie + 'cookie1=test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'");