HtmlUnit - 非法选择器错误



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

使用以下代码

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'.`

另外,当我将 url 更改为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]

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

在重新加载页面并使用 chrome javascript 控制台非常快速地执行给定的无效选择器后,我能够在 chrome 中收到您的错误。 这让我相信 seletcor 针对的元素是由 javascript 创建的(如果您在页面的所有文件中搜索选择器,这实际上是可以确认的(,这就是您的代码给出错误的原因。 尝试添加

webClient.waitForBackgroundJavaScript(3000);

就在打电话给getPage之后。这应该让你的代码等待 3 秒,这应该足以让 js 创建请求的元素。

更好的方法是收听一些像onload这样的事件,但我不确定如何从客户端而不是从页面本身完成此操作......

尝试将以下行添加到代码中:

webClient.getOptions().setThrowExceptionOnScriptError(false);

它将防止HtmlUnit在任何 JavaScript 失败时抛出异常。

最新更新