提问人:Bondavalli69 提问时间:3/30/2019 最后编辑:Bondavalli69 更新时间:4/2/2019 访问量:3286
Selenium 无法使用我自己的 cookie 打开带有 webdriver 的页面
Selenium can't open a page with webdriver using my own cookies
问:
我正在尝试设置一些我已经拥有的 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,它们在浏览器中也能正常工作......
答:
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=/'");
评论