问题描述
我正在尝试将带有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);