我想登录Facebook,然后打开一个特定的Facebook网址,以获取一个人员列表,为特定公司工作(例如,为了获得谷歌的员工,我需要转到https://www.facebook.com/search/str/google/pages-named/employees/present/intersect )我的第一个想法是简单地登录(工作正常),然后使用driver.navigate()转到特定页面。()
FirefoxDriver driver = new FirefoxDriver();
driver.get("https://www.facebook.com");
WebElement emailElement = driver.findElementById("email");
WebElement passwordElement = driver.findElementById("pass");
emailElement.sendKeys("xxxx@xxxx.com");
passwordElement.sendKeys("xxxx");
emailElement.submit();
driver.navigate().to("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");
然而,这样,facebook页面不可用,并且我被提示再次登录,即使该页面是在同一浏览器选项卡中打开的?!
第二个想法是先登录,获取cookie,然后使用这个cookie作为新驱动程序:
FirefoxDriver driver = new FirefoxDriver();
driver.get("https://www.facebook.com");
WebElement emailElement = driver.findElementById("email");
WebElement passwordElement = driver.findElementById("pass");
emailElement.sendKeys("xxxx@xxxx.com");
passwordElement.sendKeys("xxxxx");
emailElement.submit();
Set<Cookie> cookies = driver.manage().getCookies();
FirefoxDriver driver2 = new FirefoxDriver();
for (Cookie cookie : cookies) {
Cookie cookieNew = new Cookie.Builder(cookie.getName(), cookie.getValue()).expiresOn(cookie.getExpiry())
.isHttpOnly(cookie.isHttpOnly()).isSecure(cookie.isSecure()).path(cookie.getPath()).build();
driver2.manage().addCookie(cookieNew);
}
driver2.get("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");
}
但是,这样会引发异常:org.openqa.selenium.InvalidCookieDomainException:Document是cookie-averse
我做错了什么?
答案 0 :(得分:1)
我不认为将Cookie存储到to get a list of people, working for a specific company
是强制性的。以下代码块在我身边很有效:
driver.findElement(By.cssSelector("input[value='Log In']")).click();
driver.get("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");
System.out.println(driver.getTitle());
driver.quit();
控制台输出:
Facebook Search
答案 1 :(得分:0)
应用第一个想法:
为geckodriver
设置Selenium Java
可以解决我认为的问题。
需要将geckodriver
路径设置为FirefoxDriver
,如下所示:
System.setProperty("webdriver.gecko.driver", "PATH/TO/geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();
- 下载适合您的操作系统的geckodriver
在您选择的文件夹中提取
如上所述正确设置路径
提交()之后,您需要使用等待功能刷新页面,如
emailElement.submit();
//Use WebDriver wait.until() or sleep() to finish the submit action
driver.navigate().to("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");