在这段代码中,我试图解析url给出的网站的html代码。
我最初尝试使用jsoup.connect.get
但是在文档中加载的html代码并不是我在浏览器中看到的。然后我开始使用htmlunit基于net中给出的反馈,jsoup将无法完全检索基于javascript / ajax的页面的html代码。当我使用htmlunit包及其WebClient
类时,我遇到以下错误:
2017年11月5日上午12:40:15 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE:runtimeError:message = [超出最大堆栈深度] sourceName = [{3}}中的脚本(8,9)到(26,10)] line = [22] lineSource = [null] lineOffset = [0] 2017年11月5日12:40:15 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify 警告:遇到过时的内容类型:'text / javascript'。 2017年11月5日上午12:40:15 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError SEVERE:runtimeError:message = [超出最大堆栈深度] sourceName = [http://www.dspblackrock.com/about-us/mandatory-disclosure/month-end-portfolio-disclosures line = [70] lineSource = [null] lineOffset = [0]
是java的新手。首先是使用htmlUnit正确解决手头的问题?如果是这样,如何解决上述错误?
import java.io.*;
import java.net.*;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.parser.Parser;
import org.jsoup.nodes.Document;
import org.apache.commons.validator.routines.UrlValidator;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class URLToFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World!");
String url;
UrlValidator urlValidator = new UrlValidator();
try {
url = "http://www.dspblackrock.com/about-us/mandatory-disclosure/month-end-portfolio-disclosures";
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
HtmlPage myPage = webClient.getPage(url);
webClient.close();
Document doc = Jsoup.parse(myPage.asXml());
System.out.println(doc);
} catch (MalformedURLException mue) {
System.out.println("Ouch - a MalformedURLException happened.");
mue.printStackTrace();
System.exit(1);
} catch (IOException ioe) {
System.out.println("Oops- an IOException happened.");
ioe.printStackTrace();
System.exit(1);
} finally {
System.out.println("Entered finally");
} // end of 'finally' clause
}
}
答案 0 :(得分:0)
请确保您使用的是HtmlUnit的最新SNAPSHOT版本。使用此版本进行了简短的测试,页面正常运行。
否则
Document doc = Jsoup.parse(myPage.asXml());
从我的角度来看,是一个坏主意。
经过一些分析后,我在页面中找到了这个(最小化/混淆)源代码:
iL(/\x3c/.test(function() {
return "\x3c"
}) & !/x3d/.test(function() {
return "'x3'+'d';"
}));
详细了解此here
看起来页面背后的人正试图检测犀牛。我担心使用HtmlUnit使这个页面可用是一项艰苦的工作。