7

为了我的一生,我不能装备 HtmlUnit 来获取这个网站:

http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+ class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+机场&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e= BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true

我确信这与在后台运行的大量脚本有关。也许这些脚本没有得到足够的时间来完全加载?

我也尝试过简单地抓取 bing.com/travel,但也没有成功。它破坏了新 HtmlPage 客户端的 getPage 功能。

输出给出了过多的 runtimeErrors(“完成此操作所需的数据尚不可用”),所有这些都是相同的 sourceName(“ http://www.bing.com/travel/jsxc.vjs?a=common&v=5.5 .0-1278007084280 ")

然后,在 bing.com 上的几个脚本中,由于缺少“(”而引发了几个异常。

然后它调用javascript,然后突然结束。

我意识到这可能是一些其他人可能看不到的问题,所以如果没有建议,有人会介意通过他们自己的 HtmlUnit 使用的测试实现来抽取这两个站点,看看他们是否可以获得基本输出XML 或文本结果?我不想在这里做任何花哨的事情,只是得到一些基本的文本或结果的 XML 输出。

知道其他人的实施是否有效会很方便,这样我就可以继续陪审团完成我的工作。

代码:

import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.WebClient;

public class test {

public static void main(String[] args) throws Exception {

        WebClient client = new WebClient();
        System.out.println("webclient loaded");

        HtmlPage currentPage = client.getPage("http://www.bing.com/travel/flight/flightSearch?form=FORMTRVLGENERIC&q=flights+from+SLC+to+BKK+leave+07%2F30%2F2010+return+08%2F11%2F2010+adults%3A1+class%3ACOACH&stoc=0&vo1=Salt+Lake+City%2C+UT+%28SLC%29+-+Salt+Lake+City+International+Airport&o=SLC&ve1=Bangkok%2C+Thailand+%28BKK%29+-+Suvarnabhumi+International&e=BKK&d1=07%2F30%2F2010&r1=08%2F11%2F2010&p=1&b=COACH&baf=true");
        client.waitForBackgroundJavaScript(10000);
        System.out.println("htmlpage init'd");

        //System.out.println(currentPage.getTitleText());
        String textSource = currentPage.asXml();
        System.out.println(textSource);

}

}

谢谢!

4

3 回答 3

3

尝试添加这个:

client.setThrowExceptionOnScriptError( false ) ;

运行需要很长时间,并且男孩确实会喷出日志……但最终出现了一个页面:

htmlpage init'd
<?xml version="1.0" encoding="utf-8"?>
<html id="">
  <head>
   ...
于 2010-07-16T18:56:57.567 回答
2

我也遇到了“完成此操作所需的数据尚不可用”的问题。
将用户代理切换到“Firefox”有助于...
http://steveliles.github.com/jquery_htmlunit_runtimeerror_messages_galore.html

于 2012-07-17T08:53:22.840 回答
2

浏览器对它们可能检测到的错误有很高的容忍度(在 Javascript 中,还有 HTML、css 等)。这部分是因为 Javascript 如何实现的各种相互冲突的“标准”:)。在一个浏览器上看起来不错的东西在另一个浏览器上会出现问题。因此,当所有这些消息都可见时,它应该有点令人不安。

为了正确看待这一点 - 在 Internet Explorer 中,进入您的设置并检查“高级设置”中的“显示有关每个脚本错误的通知”,然后浏览相同的站点。您可能会惊讶于 IE 仅仅忽略了它可能检测到的问题而获得了多少代码。

在各种浏览器下使用 HtmlUnit 只会暴露其中的一些冲突。

告诉 HtmlUnit 执行类似“忽略...对于这个浏览器”这样的操作是一种完全有效的做法。就我而言,我从一个检查所有用户是否都在使用 Internet Explorer 的网站中引入数据(不,我不知道他们为什么这样做),所以如果不忽略 javascript 错误,我就无法继续。有趣的是,即使 IE 认为有很多 Javascript 错误,该网站也能正常工作。

于 2014-06-04T14:16:39.647 回答