【发布时间】:2021-12-22 16:12:42
【问题描述】:
所以我有一个网络爬虫,首先需要通过给定网站的 cookie 横幅。通常我只是通过 id 或 classname 定位元素并完成它,但在this site 上找不到任何元素。我已经尝试/检查了以下内容:
- 感兴趣的元素是
<div id="cookiescript_accept" tabindex="0" role="button" data-cs-i18n-text="[]">Alles accepteren</div> - 元素不是 iframe 的一部分
- 该元素不是影子 DOM 的一部分
- 使用
wait.until(ExpectedConditions.visibilityOfElementLocated会达到 15 秒超时 - 使用
driver.executeScript("return document.getElementById('cookiescript_accept');");也不起作用 - 父元素和parent的父元素也找不到
我对 Selenium 和 HTML 还很陌生,所以我一定遗漏了一些东西,如果你知道那是什么,请告诉我
代码:
public void loadUrl(String url) {
System.out.println("\t\t- loadUrl " + url);
idle5000();
driver.get(url);
idle5000();
setWindowSize();
idle5000();
printFirefoxCPU();
scrollViewport();
idle5000();
printFirefoxCPU();
}
loadUrl("https://www.schoolplaten.com/");
prepRunnable.getDriver().findElement(By.id("cc-cookiescript_accept")).click();
// -> NoSuchElementException
WebDriverWait wait = new WebDriverWait(prepRunnable.getDriver(), 15);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("cookiescript_accept")));
// -> Timeout
WebElement elem = (WebElement) prepRunnable.getDriver().executeScript("return document.getElementById('cookiescript_accept');");
elem.click();
// -> elem is null
【问题讨论】:
-
显示使用你的代码。
-
在您的代码执行时元素是否已呈现在屏幕上?如果没有,您应该在找到元素之前等待,或者尝试经典的 sleep 10 秒并查看结果?