gpt4 book ai didi

java - 使用 HtmlUnit 每页下载多个文件

转载 作者:行者123 更新时间:2023-11-30 09:19:00 24 4
gpt4 key购买 nike

我正在使用 HtmlUnit 浏览网站。它有一个表格,其中包含可供下载的文档列表。我想点击所有链接并收集所有文件(不用担心,信息是公开的,不禁止抓取)。

site是用 JSF 编写的,所以文档的链接实际上是 <a href="#"onclick提交表单(但在此之前将隐藏字段设置为适当的值)。

我的代码是(在 scala 中,但这并不重要):

val link = row.getFirstByXPath[HtmlElement](descriptor.documentLinkPath.get)
if (link.getAttribute("href").endsWith("#")) link.setAttribute("href", "javascript:void(0)")
val documentPage: Page = link.click()
val bytes = IOUtils.toByteArray(documentPage.getWebResponse().getContentAsStream())

但是有一个问题。第一个文档已正确下载。但我无法获得第二个及以后的页面 - 返回的是 html 页面,而不是 PDF 文档。 (注释掉 # -> javascript:void(0) 没有任何效果,我把它放在那里是因为它曾经在某些情况下爆炸)

Javascript 已启用,并且让它在第一个文档中运行意味着一切正常。但是,它不适用于下一个文档。任何想法如何解决?

最佳答案

如果没有页面重新加载,我也无法做到这一点。我认为诀窍是从 onclick() 属性上执行 JavaScript。

这个:

return oamSubmitForm('broi_form','broi_form:dataTable1:4:_idJsp110',null,[['id_','3545']]);');

也许这对你有帮助。

public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException
{
final WebClient webClient = new WebClient();

HtmlPage page = webClient.getPage("http://dv.parliament.bg/DVWeb/broeveList.faces");

for (HtmlAnchor link : (List<HtmlAnchor>) page.getByXPath("//table[@id='broi_form:dataTable1']//a/img/.."))
{
String commandString = link.getOnClickAttribute().replaceAll("return ", "");
System.out.println(commandString);

ScriptResult executeJavaScript = page.executeJavaScript(commandString);

Page newPage = executeJavaScript.getNewPage();
save(newPage.getWebResponse().getContentAsStream());

page = webClient.getPage("http://dv.parliament.bg/DVWeb/broeveList.faces");
}

}

但这不是正确的做法...

关于java - 使用 HtmlUnit 每页下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18173150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com