Java HtmlUnit - 抓取网站时收到空 href
Java HtmlUnit - receiving empty href when scraping website
我目前正在尝试一个项目,将 url 发送到多个网站以扫描它们以进行分类和使用 java 和 HtmlUnit.
www.virustotal.com 的任何安全风险是我必须配置的最后一个网站,由于 href 为空,我在浏览网站时遇到问题。
该站点通过在第一页中输入 URL 然后单击提交来工作。从这里显示一个弹出窗口,用户必须 select 是重新分析还是使用上次扫描结果(在这种情况下,我们希望始终重新分析)。提供空 href 的是重新分析锚点。我的想法是,这是一个 java 脚本问题,它不会为结果页面生成 URL。不幸的是,我不确定下一步该去哪里:/
项目代码(很抱歉它很邋遢!):-
//turn off htmlunit logging//
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http.client.protocol.ResponseProcessCookies").setLevel(java.util.logging.Level.OFF);
//initialise url and obtain users selection//
System.out.println("Please select the url you would like to review:");
Scanner sc = new Scanner(System.in);
String startPath = sc.nextLine();
//enable javascript and use engine to initialise and parse websites code//
String url = "https://www.virustotal.com/#url";
System.out.println("Connecting to Virus Total...");
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.waitForBackgroundJavaScript(8000);
page = webClient.getPage(url);
//fill in form
HtmlForm form = page.getFirstByXPath("//form[@action='/en/url/submission/']");
HtmlTextInput textField = form.getInputByName("url");
textField.setValueAttribute(startPath);
HtmlButton button1 = page.getFirstByXPath("//button[@id='btn-scan-url']");
HtmlPage page1 = button1.click();
//waiting and dealing with popup
webClient.waitForBackgroundJavaScript(8000);
String page1String = page1.getWebResponse().getContentAsString();
System.out.println(page1String);
HtmlAnchor htmlAnchor = page1.getFirstByXPath("//button[@id='btn-url-reanalyse']");
System.out.println(htmlAnchor); //testing what I can see in the anchor
HtmlPage page2 = htmlAnchor.click();
//progressing to next screen
String output = page2.asText();
System.out.println(output);
HTML 我在打印字符串 page1String 时收到:
<div class="modal-footer">
<a id="btn-url-reanalyse" class="btn" href="">
Reanalyse
</a>
HTML 手动浏览站点时:
<a id="btn-url-reanalyse" class="btn" href="/en/url/submission/?force=1&url=http%3A//www.facebook.com/&token=415eda59daae48938b1dcc64f3152ed5ee9ac27d485348d55c87e9da7e714605">
Reanalyse
</a>
如有任何帮助或建议,我们将不胜感激!我也很高兴使用所提供的任何模块建议,只需使用 HtmlUnit
,因为它是我发现的第一个实际与其他站点一起使用的模块之一。
提前致谢。
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
我认为在寻找问题时禁用日志记录是个坏主意。
如果启用日志记录,您将看到一个 js 错误。
webClient.getOptions().setThrowExceptionOnScriptError(false);
因此程序会继续,但 javascript 的部分内容不会执行。
我想这就是为什么您的 link 没有更新的原因。
Javascript 错误看起来像是 HtmlUnit 错误。请打开一个问题并隔离一个最小的测试用例 as described here。
我目前正在尝试一个项目,将 url 发送到多个网站以扫描它们以进行分类和使用 java 和 HtmlUnit.
www.virustotal.com 的任何安全风险是我必须配置的最后一个网站,由于 href 为空,我在浏览网站时遇到问题。
该站点通过在第一页中输入 URL 然后单击提交来工作。从这里显示一个弹出窗口,用户必须 select 是重新分析还是使用上次扫描结果(在这种情况下,我们希望始终重新分析)。提供空 href 的是重新分析锚点。我的想法是,这是一个 java 脚本问题,它不会为结果页面生成 URL。不幸的是,我不确定下一步该去哪里:/
项目代码(很抱歉它很邋遢!):-
//turn off htmlunit logging//
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http.client.protocol.ResponseProcessCookies").setLevel(java.util.logging.Level.OFF);
//initialise url and obtain users selection//
System.out.println("Please select the url you would like to review:");
Scanner sc = new Scanner(System.in);
String startPath = sc.nextLine();
//enable javascript and use engine to initialise and parse websites code//
String url = "https://www.virustotal.com/#url";
System.out.println("Connecting to Virus Total...");
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.waitForBackgroundJavaScript(8000);
page = webClient.getPage(url);
//fill in form
HtmlForm form = page.getFirstByXPath("//form[@action='/en/url/submission/']");
HtmlTextInput textField = form.getInputByName("url");
textField.setValueAttribute(startPath);
HtmlButton button1 = page.getFirstByXPath("//button[@id='btn-scan-url']");
HtmlPage page1 = button1.click();
//waiting and dealing with popup
webClient.waitForBackgroundJavaScript(8000);
String page1String = page1.getWebResponse().getContentAsString();
System.out.println(page1String);
HtmlAnchor htmlAnchor = page1.getFirstByXPath("//button[@id='btn-url-reanalyse']");
System.out.println(htmlAnchor); //testing what I can see in the anchor
HtmlPage page2 = htmlAnchor.click();
//progressing to next screen
String output = page2.asText();
System.out.println(output);
HTML 我在打印字符串 page1String 时收到:
<div class="modal-footer">
<a id="btn-url-reanalyse" class="btn" href="">
Reanalyse
</a>
HTML 手动浏览站点时:
<a id="btn-url-reanalyse" class="btn" href="/en/url/submission/?force=1&url=http%3A//www.facebook.com/&token=415eda59daae48938b1dcc64f3152ed5ee9ac27d485348d55c87e9da7e714605">
Reanalyse
</a>
如有任何帮助或建议,我们将不胜感激!我也很高兴使用所提供的任何模块建议,只需使用 HtmlUnit
,因为它是我发现的第一个实际与其他站点一起使用的模块之一。
提前致谢。
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
我认为在寻找问题时禁用日志记录是个坏主意。 如果启用日志记录,您将看到一个 js 错误。
webClient.getOptions().setThrowExceptionOnScriptError(false);
因此程序会继续,但 javascript 的部分内容不会执行。 我想这就是为什么您的 link 没有更新的原因。
Javascript 错误看起来像是 HtmlUnit 错误。请打开一个问题并隔离一个最小的测试用例 as described here。