所以我有一個 webscraper,它首先需要通過給定網站的 cookie 橫幅。通常我只是通過 id 或 classname 定位元素并完成它,但在這個站點上沒有任何元素可以被定位。我已經嘗試/檢查了以下內容:
- 感興趣的元素是
<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');");也不起作用 - 也找不到父元素和父元素的父元素
我對 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
uj5u.com熱心網友回復:
我可以使用下面的 XPath 找到 web 元素
//*[name()='div' and @id='cookiescript_accept']
并可以在以下代碼的幫助下執行點擊:
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[name()='div' and @id='cookiescript_accept']"))).click();
uj5u.com熱心網友回復:
要click()在元素上ALLES ACCEPTEREN,你可以使用以下的定位策略:
cssSelector:driver.findElement(By.cssSelector("div#cookiescript_accept")).click();xpath:driver.findElement(By.xpath("//div[@id='cookiescript_accept']")).click();
然而,該元素是一個動態的元素,以便于click()需要引起元素WebDriverWait的elementToBeClickable(),你可以使用以下的定位策略:
cssSelector:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div#cookiescript_accept"))).click();xpath:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='cookiescript_accept']"))).click();
選擇
作為替代方案,您還可以使用executeScript()以下方法:
cssSelector:((JavascriptExecutor)driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div#cookiescript_accept"))));xpath:((JavascriptExecutor)driver).executeScript("arguments[0].click();", new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='cookiescript_accept']"))));
參考
您可以在以下位置找到有關NoSuchElementException的詳細討論:
- NoSuchElementException,Selenium 無法定位元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355808.html
上一篇:Selenium無法關閉模態視窗
