我想登录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("[email protected]");
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("[email protected]");
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的
我究竟做错了什么?
我不认为将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
应用第一思想:
为geckodriver
设置Selenium Java
解决了我认为的问题。
它需要使用geckodriver
设置FirefoxDriver
路径,如下所示:
System.setProperty("webdriver.gecko.driver", "PATH/TO/geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();
- 从https://github.com/mozilla/geckodriver/releases下载适合您的操作系统的geckodriver
- 将其解压缩到您选择的文件夹中
- 如上所述正确设置路径
在submit()之后,您需要使用等待功能来刷新页面
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");