HtmlUnit-非法选择器错误

时间:2018-08-23 18:00:10

标签: java htmlunit

我正在尝试使用HtmlUnit提交表单here

具有以下代码

try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {
  final HtmlPage page = webClient.getPage("https://nseindia.com/products/content/equities/equities/eq_security.htm");
  System.out.println(page.getTitleText());
}

但是我得到这个错误

Aug 23, 2018 10:50:35 PM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '#main_menu > ul > li:last' error: Invalid selector: *#main_menu > ul > li:last).] sourceName=[https://nseindia.com/common/js/jquery-1.4.4.min.js] line=[100] lineSource=[null] lineOffset=[0]

错误来自jquery-1.4.4.min.js。因此,它可能不应该是代码问题。另外,当我尝试在Chrome上访问网页时,不会出现此错误。

我还添加了以下内容,但仍然出现相同的错误

webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setTimeout(10000);

有人可以帮我吗?我将htmlunit-2.32Java 1.8

一起使用

更新:在实际错误出现之前,我还多次收到以下警告

Aug 24, 2018 11:16:55 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.`

此外,当我将网址更改为https://stackoverflow.com时,我又遇到了运行时错误

Aug 24, 2018 11:41:53 AM com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError
SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: *:x).] sourceName=[https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js] line=[2] lineSource=[null] lineOffset=[0]

,但是代码仍然向前移动并打印页面标题。就我而言,该程序不会终止,但也不会前进。

2 个答案:

答案 0 :(得分:0)

重新加载页面并使用chrome javascript控制台很快执行给定的无效选择器后,我能够在chrome中得到您的错误。 这使我相信以seletcor为目标的元素是由javascript创建的(如果您在页面的所有文件中搜索选择器,则实际上可以确定这一点),这就是代码导致错误的原因。 尝试添加

webClient.waitForBackgroundJavaScript(3000);

在调用getPage之后。那应该让您的代码等待3秒钟,这应该足以让js创建请求的元素。

一种更好的方法是监听onload之类的事件,但是我不确定如何从客户端而不是页面本身来完成此操作...

答案 1 :(得分:0)

尝试将此行添加到您的代码中:

webClient.getOptions().setThrowExceptionOnScriptError(false);

它将阻止HtmlUnit在任何JavaScript失败时引发异常。