HtmlUnit不可能的网站?

时间:2010-07-15 06:03:36

标签: java javascript ajax screen-scraping htmlunit

我不能,为了我的生活,装备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+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

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

我也尝试过简单地抓住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输出。

知道其他人的实施是否有效是很方便的,所以我可以让陪审团操纵我的完成。

CODE:

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);

}

}

谢谢!

3 个答案:

答案 0 :(得分:3)

尝试添加此内容:

client.setThrowExceptionOnScriptError( false ) ;

这需要很长时间才能运行,而且男孩会花掉日志记录......但最终出现了一个页面:

htmlpage init'd
<?xml version="1.0" encoding="utf-8"?>
<html id="">
  <head>
   ...

答案 1 :(得分:2)

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

答案 2 :(得分:2)

浏览器对它们可能检测为错误的内容具有很高的容忍度(在Javascript中,但也包括HTML,css等)。 这部分是因为各种相互冲突的标准&#34; :) Javascript如何实现。 在一个浏览器上显示正常的东西在另一个浏览器上出现问题 因此,当所有这些消息都可见时,它应该有点令人不安。

要正确看待这一点 - 在Internet Explorer中进入您的设置并检查&#34;高级设置&#34; for&#34;显示有关每个脚本错误的通知&#34;然后浏览相同的网站。 您可能会对IE获取的代码数量感到惊讶,只是忽略它可能会检测到的问题。

在各种浏览器下使用HtmlUnit只会带来一些冲突。

告诉HtmlUnit执行类似&#34;忽略...对于此浏览器&#34;是一个非常有效的做法。 就我而言,我从一个网站引入数据,检查所有用户都在使用Internet Explorer(不,我不知道他们为什么这样做),所以我无法忽略javascript错误。 有趣的是,即使IE认为存在大量的Javascript错误,该网站也能正常运行。