使用Selenium HTMLUnitDriver点击Anchor标签事件失效问题
解决HTMLUnitDriver点击Anchor标签时的
getOwnPropertySymbols异常问题 嘿,这个问题我碰到过!报错的核心原因是HTMLUnit默认的JavaScript引擎不支持ES6里的Object.getOwnPropertySymbols()方法——你访问的网站用到了jspdf.plugin.autotable.js,里面调用了这个ES6特性,但旧版HTMLUnit的JS解析器没跟上。给你几个靠谱的解决方案:
方案1:升级HTMLUnitDriver版本
HTMLUnit后续版本对ES6的支持做了不少优化,尽量用最新的稳定版。如果是Maven项目,直接更新依赖:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>htmlunit-driver</artifactId> <version>最新稳定版号</version> </dependency>
注意哦,要确保这个版本和你的Selenium核心包版本兼容,不然可能出其他问题。
方案2:手动开启HTMLUnit的ES6支持
初始化HTMLUnitDriver的时候,手动配置JS引擎启用ES6特性,代码这么写:
WebDriver driver = new HtmlUnitDriver(true) { @Override protected WebClient modifyWebClient(WebClient client) { WebClient webClient = super.modifyWebClient(client); // 开启JS和CSS支持 webClient.getOptions().setJavaScriptEnabled(true); webClient.getOptions().setCssEnabled(true); // 可选:忽略非致命的脚本错误,避免因为小问题中断执行 webClient.getOptions().setThrowExceptionOnScriptError(false); // 关键:把JS引擎版本设置为ES6 webClient.getJavaScriptEngine().getContextFactory().setJavaScriptVersion(JavaScriptVersion.ES6); return webClient; } };
这里的核心就是setJavaScriptVersion(JavaScriptVersion.ES6),强制让JS引擎按ES6标准解析脚本。
方案3:禁用页面JS(如果业务允许的话)
如果你的数据抓取不需要依赖这个JS文件的功能,干脆直接禁用页面的JavaScript:
HtmlUnitDriver driver = new HtmlUnitDriver(false); // 参数false就是禁用JS
不过要注意,禁用JS后页面的动态渲染内容可能加载不出来,得确认你要抓的数据是静态HTML里的才行。
方案4:绕过点击,直接请求目标URL
如果那个Anchor标签的跳转是直接指向某个URL,你可以直接提取它的href属性值,然后用driver.get()跳转,完全避开JS执行的问题:
WebElement anchor = driver.findElement(By.tagName("a")); String targetUrl = anchor.getAttribute("href"); driver.get(targetUrl);
这个方法最直接,适合那种静态跳转的场景,根本不用触发点击事件里的JS。
内容的提问来源于stack exchange,提问作者Akash Chavda
相关产品推荐
相关产品推荐

