首页 > 解决方案 > 使用 Selenium 在 Chrome 版本 86 中启用 Cookie

问题描述

我正在尝试将 Selenium 与 Java 一起使用,并通过更新 chrome 版本 86 进行自动化,但它显示第三方 cookie 已禁用。我正在处理的网站需要 3rd 方 cookie。

我尝试使用以下代码启用 cookie:

    ChromeOptions options = new ChromeOptions();
    options.addArguments("incognito");
    options.addArguments("start-maximized");
    // options.addArguments("disable-infobars");
    options.addArguments("ignore-certificate-errors");
    options.addArguments("disable-popup-blocking");
    options.addArguments("disable-extensions");
    options.addArguments("disable-notifications");
    options.addArguments("no-sandbox");
    options.addArguments("allow-running-insecure-content");
    options.setAcceptInsecureCerts(true);

    options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));

    HashMap<String, Object> prefs = new HashMap<String, Object>();
    prefs.put("profile.default_content_settings.cookies", 0);
    options.setExperimentalOption("prefs", prefs);

    Boolean headless = Boolean.valueOf(ApplicationProperties.getInstance().getProperty("headless"));
    if (Boolean.TRUE.equals(headless)) {
        options.addArguments("headless");
        options.addArguments("window-size=1600x1200");
    }

    options.setCapability(ChromeOptions.CAPABILITY, options);
    options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,
    UnexpectedAlertBehaviour.IGNORE);````

不启用 cookie。指导我怎么办?

标签: javagoogle-chromeselenium-webdrivercookiesselenium4

解决方案


我找到了一种解决方法,可以在浏览器新标签页开始页面上启用第三方 cookie(我正在使用Robot Java 库库打开一个新标签页,因为其他方法无法打开相应的页面)。

完整答案在这里

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public void enableThirdPartyCookies(WebDriver driver) throws Exception {
    ArrayList<String> windowHandles = new ArrayList<String> (driver.getWindowHandles());

    // Activate Browser window
    driver.switchTo().window(driver.getWindowHandle());

    // Open New Tab Ctrl + T
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_CONTROL);

    // Wait for open new tab
    int retries = 100;
    for (int i = 0; i < retries; i++)
    {
        Thread.sleep(100);
        if (driver.getWindowHandles().size() > windowHandles.size())
            break;
    }

    // Enable Third Party Cookies
    if (driver.getWindowHandles().size() > windowHandles.size())
    {
        driver.close();
        windowHandles = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(windowHandles.get(windowHandles.size() - 1));
        List list = driver.findElements(By.id("cookie-controls-toggle"));
        Optional<WebElement> selectedCookieControlsToggle = driver.findElements(By.id("cookie-controls-toggle")).stream()
                .filter(x -> x.getAttribute("checked") != null).findFirst();
        Optional.ofNullable(selectedCookieControlsToggle).get().get().click();
    }
}

使用:

ChromeOptions options = new ChromeOptions();
options.addArguments("–no-sandbox");
options.addArguments("incognito");
options.addArguments("start-maximized");
WebDriver driver = new ChromeDriver(options);
enableThirdPartyCookies(driver);

推荐阅读