我正在尝试设置一些我已经拥有的cookie,以使用Java中的ChromeWebDriver和Selenium处理对网站的请求:
{}
但是我遇到了以下异常: 线程“主要” org.openqa.selenium.UnableToSetCookieException中的异常:无法设置cookie。当然,我正在尝试使用真正的cookie,它们在浏览器中也能正常工作...
答案 0 :(得分:0)
首先导航到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 );
}
答案 1 :(得分:0)
硒不能将Cookie添加到任意域。 Cookie的域必须等于当前浏览上下文的活动文档的域。 W3C WebDriver规范中对此行为进行了描述,并由所有主要的浏览器供应商实施。参见:https://w3c.github.io/webdriver/#add-cookie
作为一种解决方法,您可以先导航到该域上的任何页面,然后添加该域的cookie。
答案 2 :(得分:0)
我同意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();
答案 3 :(得分:0)
如上所述,驱动程序当前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=/'");