如何通过Java版Selenium获取dataLayer对象?遇backendNodeId异常
问题:使用Java版Selenium提取dataLayer时报错backendNodeId is missing in a node
尝试用Java版Selenium WebDriver提取网站的dataLayer对象,通过JavascriptExecutor.executeScript执行window.dataLayer相关命令并解析为ArrayList,但运行代码时持续报错:
WebDriverException: unknown error: backendNodeId is missing in a node
已尝试的方案
- 替换多种JavaScript命令:
"return dataLayer;""return JSON.stringify(window.dataLayer);""return console.log('dataLayer');"
- 重启电脑
- 命令行执行
Taskkill /F /IM chromedriver.exe /T终止所有ChromeDriver进程
使用版本
- Selenium v4.8.3
- ChromeDriver v116
代码示例
import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.util.ArrayList; import java.time.Duration; public class Example { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); // 访问目标网站 driver.get("https://mvnrepository.com/"); // 创建WebDriverWait对象 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 等待页面加载完成 wait.until(ExpectedConditions.jsReturnsValue("return document.readyState === 'complete';")); // 等待dataLayer对象存在 wait.until(ExpectedConditions.jsReturnsValue("return (typeof dataLayer !== 'undefined');")); // 等待dataLayer为对象类型 wait.until(ExpectedConditions.jsReturnsValue("return (typeof dataLayer === 'object');")); // 获取JavascriptExecutor对象 JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; // 尝试获取dataLayer对象 try { ArrayList<String> dataLayer = (ArrayList<String>) jsExecutor.executeScript("return window.dataLayer;"); } catch (Exception e) { // 处理异常 e.printStackTrace(); } // 打印dataLayer对象 System.out.println(dataLayer); // 关闭驱动 driver.quit(); } }
错误信息
org.openqa.selenium.WebDriverException: unknown error: backendNodeId is missing in a node at Example.Main (Example.java: 19) --> ArrayList<String> dataLayer = (ArrayList<String>) jsExecutor.executeScript("return dataLayer;");
内容的提问来源于stack exchange,提问作者Prince
相关产品推荐
相关产品推荐

