HtmlUnit 无法获取页面 - javascript 块

HtmlUnit Failed to fetch Page - javascript block

首先我想说明我是 HtmlUnit 的新手。 我正在尝试获取网页并解析其内容。 URL: https://secure.fattal.co.il/BE_Results.aspx?Lang=heb&In=2016-08-07&Out=2016-08-11&Region=2&Rooms=1&Ad1=2&Ch1=0&Inf1=0

但我最终得到了以下 javascript 内容:

<html><head><meta charset="utf-8"></head><body><script>window.rbzns = {fiftyeightkb: 43200000, days_in_week : 1};</script><script src="//d1a702rd0dylue.cloudfront.net/js/sugarman/v7/flat.js"></script><script>rbzns.challdomain=".fattal.co.il"; rbzns.ctrbg="NMdHaCamRWvRkFxSyeq856yW5EEmzuHN32UH9RoO3YoeT4HIU++m8k1QIpK0EQqM2RF/9vvBg5S4A3I18QPa4mRMEb+S4Fh3ZVljis2xiCe2tYg/zlUJMN5kVMgLQKw/mbEk8L77gcYBrz56tLIPxg==";rbzns.rbzreqid="fc167e1a3134363136353639343033970795be87d166"; winsocks(true);</script></body></html>

注意:我开始使用 jsoup 解析器 获取 URL,但响应是相同的 javascript.

谷歌搜索 javascript 内容后,我意识到我应该使用像 HtmlUnit 这样的无头浏览器。

但即使使用 HtmlUnit 获取页面,javascript 内容又回来了。

以下是一小部分:

String url = "https://secure.fattal.co.il/BE_Results.aspx?Lang=heb&In=2016-08-07&Out=2016-08-11&Region=2&Rooms=1&Ad1=2&Ch1=0&Inf1=0"; // hard coded just for example
webClient = new WebClient();

// Get the first page
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);

webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setRedirectEnabled(true);
webClient.setJavaScriptTimeout(100000);
webClient.waitForBackgroundJavaScript(100000);

page = webClient.getPage(url);
System.out.println(page.getWebResponse().getContentAsString());

我到处寻找解决方案,没有任何具体答案。

任何帮助将不胜感激

好的,我想通了。

javascript来源我post:

<html><head><meta charset="utf-8"></head><body><script>window.rbzns = {fiftyeightkb: 43200000, days_in_week : 1};</script><script src="//d1a702rd0dylue.cloudfront.net/js/sugarman/v7/flat.js"></script><script>rbzns.challdomain=".fattal.co.il"; rbzns.ctrbg="NMdHaCamRWvRkFxSyeq856yW5EEmzuHN32UH9RoO3YoeT4HIU++m8k1QIpK0EQqM2RF/9vvBg5S4A3I18QPa4mRMEb+S4Fh3ZVljis2xiCe2tYg/zlUJMN5kVMgLQKw/mbEk8L77gcYBrz56tLIPxg==";rbzns.rbzreqid="fc167e1a3134363136353639343033970795be87d166"; winsocks(true);</script></body></html>

是一个已知的脚本,用于检查请求是否来自浏览器,而不是某种机器人或爬虫。 由于 HtmlUnit 支持(部分)JavaScript,我更改了我的代码以使用 Selenium.webdriver + phantomJS,它现在工作得很好。