Selenium - 登录并导航到不同的页面

问题描述 投票:1回答:2

我想登录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的

我究竟做错了什么?

java selenium exception selenium-webdriver selenium-firefoxdriver
2个回答
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

0
投票

应用第一思想: 为geckodriver设置Selenium Java解决了我认为的问题。

它需要使用geckodriver设置FirefoxDriver路径,如下所示:

System.setProperty("webdriver.gecko.driver", "PATH/TO/geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();

在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");
© www.soinside.com 2019 - 2024. All rights reserved.