Java Selenium Chromedriver加载Cookies但不使用它们

时间:2016-02-23 17:17:34

标签: java selenium cookies selenium-chromedriver

我需要每天多次访问网站,并希望跳过登录页面。这就是为什么我想在Java Selenium Chromedriver中使用Cookie,以便在一天中第一次访问后跳过该登录。 Selenium正在保存Cookie,但不使用它们,我无法访问以下页面。你能救我吗?

这是我的代码:

public static void main(String[] args) throws InterruptedException {

    Set<Cookie> cookie = null;
    Iterator<Cookie> itr = null;
    while (true) {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Maxi\\Desktop\\ChromeDriver.exe");

        driver = new ChromeDriver();
        driver.get("https://www.xxxxxx.xxx");

        while (itr != null && itr.hasNext()) {
            driver.manage().addCookie(itr.next());
        }

        driver.navigate().refresh();

        WebDriverWait wait0 = new WebDriverWait(driver, 20);
        if (itr == null) {
            String UserID = "LoginFieldXpath";
            wait0.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(UserID)));

            driver.findElement(By.xpath(UserID)).sendKeys("Username");

            String PW = "PasswordField Xpath";
            driver.findElement(By.xpath(PW)).sendKeys("Password");

            String LogIn = "LoginButtonXpath";
            driver.findElement(By.xpath(LogIn)).click();

            cookie = driver.manage().getCookies();
            itr = cookie.iterator();    
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以像这样在Chrome中创建用户个人资料 选项:

addArguments("user-data-dir="+"path_to_empty_folder");

然后进行注册,以便cookie存储在此个人资料中。而不只是将此用户数据目录复制到另一个文件夹

FileUtils.copyDirectory(new File("path-to-dir-with-cookie"), new File("new-dir"));
options.addArguments("user-data-dir="+"new-dir");

答案 1 :(得分:0)

Selenium每次都会启动一个新的临时浏览器实例,因此它不会存储任何cookie,缓存或类似的东西。

我建议将打开的chrome驱动程序移到while循环之外,这样每次要检查页面时都可以重用它。也许要么将登录移动到循环外部,要么检查是否需要登录。然后在每次需要时抓住你想要在循环内检查的任何页面。

public static void main(String[] args) throws InterruptedException {

    Set<Cookie> cookie = null;
    Iterator<Cookie> itr = null;

    // move this outside the loop
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\Maxi\\Desktop\\ChromeDriver.exe");
    driver = new ChromeDriver();

    while (true) {

        driver.get("https://www.xxxxxx.xxx");

        // not sure why you're adding a cookie?
        // it should automatically accept page cookies that are set
        while (itr != null && itr.hasNext()) {
            driver.manage().addCookie(itr.next());
        }

        driver.navigate().refresh();

        WebDriverWait wait0 = new WebDriverWait(driver, 20);

        // check to make sure that you need to log in
        if (itr == null) {
            String UserID = "LoginFieldXpath";
            wait0.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(UserID)));

            driver.findElement(By.xpath(UserID)).sendKeys("Username");

            String PW = "PasswordField Xpath";
            driver.findElement(By.xpath(PW)).sendKeys("Password");

            String LogIn = "LoginButtonXpath";
            driver.findElement(By.xpath(LogIn)).click();

            cookie = driver.manage().getCookies();
            itr = cookie.iterator();    
        }
    }
}