微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Selenium在Chrome 86版中启用Cookie

如何解决使用Selenium在Chrome 86版中启用Cookie

我正在尝试将带有Selenium的Java与chrome更新版本86一起用于自动化,但是它显示禁用了第三方Cookie。我正在工作的网站需要第三方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。指导我该怎么办?

解决方法

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

完整答案here

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?