HtmlUnit是一个“无头浏览器”。这意味着没有浏览器GUI,也没有渲染。虽然它有一个CSS和JS引擎来模拟真正的浏览器。主要目的是测试和信息提取。
我使用 htmlUnit 和 java 构建了一个网络机器人,它做了很多事情,但运行了大约 10 分钟后,我总是收到以下错误。 该程序处理了一些文本文件,但错误...
HtmlUnit 似乎不会关闭 Web 客户端中的窗口,从而造成内存泄漏。我正在尝试使用 HtmlUnit 获取页面并将其传递给 JSoup 进行解析。我知道 JSoup 可以
我在一个 javascript 重的网站上写了一个爬虫(用 Angular 编写),它工作得很好。但几个月后我得到了错误 严重:错误错误:未捕获(承诺) 我怀疑当我...
如何解决此错误 Exception in thread "main" java.lang.NoClassDefFoundError: javax/crypto/SecretKey
如何解决此错误 Exception in thread "main" java.lang.NoClassDefFoundError: javax/crypto/SecretKey 导入 com.gargoylesoftware.htmlunit.WebClient; 导入 com.gargoylesoftware.htmlunit.html.
我在点击 htmlunit 中的链接时遇到问题。 我浏览了网站上的 api(我不太理解)并查看了我能找到的所有示例代码,但我仍然哈维...
我正在使用 htmlunit 尝试打开一个网站,但我不断收到 404 错误。 该网站可以在我的 python 脚本和浏览器中运行,但由于某种原因不能在 html 单元中运行。 我认为我的网址本身没问题...
无法使用 HtmlUnitDriver 执行 JavaScript
以下代码使用 new HtmlUnitDriver(true) 声明启用了 javascript 的 HtmlUnitDriver,然后创建一个 JavaScriptExecutor,如下所示 WebDriver 驱动程序 = new HtmlUnitDriver(true...
我正在尝试使用html单元在这个网站上爬行:https://www.softpedia.com/get/Programming/Other-Programming-Files/Apidog.shtml。 我想“单击”“立即下载”按钮,...
Java/HtmlUnit - 如何从 HtmlImageInput 获取 HtmlImage?
我在 html 页面上有一张图像,它也是一个输入。 我在 html 页面上有一张图像,它也是一个输入。 <input type="image" src=... 我根本不在乎点击图片。我想将图像保存到文件中。这似乎是不可能的,又显得可笑。我尝试从 HtmlImageInput 转换为 HtmlImage 但出现错误。我怎样才能做到这一点?我需要从 HtmlUnit 切换到其他东西吗?我不在乎我需要做什么才能完成这件事。 顺便说一句,我尝试使用 selenium 并截取屏幕截图,但它截取了错误区域的屏幕截图。尝试了同一元素的多个不同的 xpath,但它总是采用错误的屏幕截图。 感谢您的报告。 与HtmlImage类似,.saveAs(File)刚刚被添加到HtmlImageInput。 顺便说一句,如果你不能使用最新的快照,那么你可以使用: try (WebClient webClient = new WebClient()) { HtmlPage page = webClient.getPage("http://localhost:8080"); HtmlImageInput input = page.querySelector("input"); URL url = page.getFullyQualifiedUrl(input.getSrcAttribute()); final String accept = webClient.getBrowserVersion().getImgAcceptHeader(); final WebRequest request = new WebRequest(url, accept); request.setAdditionalHeader("Referer", page.getUrl().toExternalForm()); WebResponse imageWebResponse = webClient.loadWebResponse(request); } HtmlImage codeImg = (HtmlImage) findElement(xpath, index); InputStream is = null; byte[] data = null; try { is = codeImg.getWebResponse(true).getContentAsStream(); data = new byte[is.available()]; is.read(data); } catch (IOException e) { log.error("get img stream meets error :", e); } finally { IOUtils.closeQuietly(is); } if (ArrayUtils.isEmpty(data)) { String errorMessage = String.format("downLoad img verify code with xpath %s failed.", xpath); throw new EnniuCrawlException(TargetResponseError.ERROR_RESPONSE_BODY, errorMessage); } String base64Img = Base64Utils.encodeToString(data); 如果您需要图像对象: public Image getImage(final HtmlImage img) throws IOException { try (final InputStream is = img.getWebResponse(true).getContentAsStream() { return ImageIO.read(is); } }
我想抓取/收集页面上特定类名称下的所有链接 例如超文本标记语言 农业 (92) 农业&...
我正在使用 HtmlUnit Android 从网站上抓取数据,我能够创建 Web 客户端并将其连接到网站,但单击按钮后我无法获取更多元素。在代码中...
我一直在尝试将htmlunit(https://www.htmlunit.org/)从2.27版本升级到2.70版本。我注意到静态方法 HtmlParser.parseHtml() 不再存在。 我明白我必须这么做
如何从字符串创建 HtmlUnit HTMLPage 对象?
这个问题已经被问过一次了,但我猜 API 已经改变,答案不再有效。 URL url = new URL("http://www.example.com"); StringWebResponse 响应 = 新 StringWebRespo...
为什么我使用 HtmlUnitDriver 会收到 UnknownHostException?
我正在编写一个测试,应该只从重定向中获取URL,不需要加载不存在的页面。每次我遇到这个异常时: java.lang.RuntimeException:java.net。
我正在尝试使用 Html 单元使用谷歌搜索来筛选特定新闻报纸特定日期的热门新闻。我能够获得搜索结果,但是当我尝试访问...
尝试使用带有 HTMLUnit 的 css 选择器来选择正确的按钮
我有以下 HTML 代码片段: 我有以下 HTML 代码片段: <div class="LocationsIndex__paginationBar__YE2Xo"> <div> <nav> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw Pagination__symbol__KHv6r" type="button"> <div style="transform: rotate(180deg);">➞</div> </button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw" type="button">1</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw" type="button">2</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw Pagination__active__EK2e1" type="button">3</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw" type="button">4</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw Pagination__disabled__FbUC6 Pagination__symbol__KHv6r" type="button">...</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw" type="button">79</button> <button class="Control__control__ijHLR Pagination__pageItem__NsQSw Pagination__symbol__KHv6r" type="button"> <div class="">➞</div> </button> </nav> </div> <div class="LocationsIndex__paginationInfo__YbpCl">Showing 81 to 120 of 3121</div> </div> 我尝试使用以下代码中所示的 HtmlPage.querySelector() 方法捕获该组中的最后一个按钮控件(它是一个分页器)。此方法调用始终返回 null。我尝试了几种不同的方法来获取这些信息,但没有成功。 'class="Control__Control__xxxxx" 类的最后几个字符可能不同,所以我只想根据类值的开头查找。 // do the pagination HtmlButton button = page.querySelector("button[class^='Control__control']:nth-child(8) div"); page = button.click(); 我做错了什么? 要定位最后一个按钮控件,您可以使用 last-child 伪类来选择导航中的最后一个按钮元素 page.querySelector("nav button[class^='Control__control']:last-child div");
Java HtmlUnit 不再能够查找列表<HtmlFieldSet> 使用 getByXPath(@class=)
如果您访问 https://parcelinquirytreasurer.cochise.az.gov/ ,在文本字段中输入 1010501508 并单击“提交”,您将看到一个新网页(第 2 页)。第 2 页有一个邮寄地址。如果您
我尝试了 stackoverflow 网站上的所有选项,我是一名编程实习生。只需指示如何点击即可。 网站:https://calculator888.ru/random-generator/sluchaynoye-slovo 按钮: 我尝试了 stackoverflow 网站上的所有选项,我是一名编程实习生。只需指示如何点击即可。 网站:https://calculator888.ru/random-generator/sluchaynoye-slovo 按钮: <div class="knop_pusk_blok"> <input type="button" id="genr" data-tip="skivo" value="Случайное Слово" class="knop_dstv_vchl"> </div> 我的一些尝试: ublic class Main2 { public static void main(String[] args) throws IOException, InterruptedException { System.out.println("start"); WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.getOptions().setCssEnabled(false); webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setUseInsecureSSL(true); webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); webClient.getCookieManager().setCookiesEnabled(true); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.waitForBackgroundJavaScriptStartingBefore(10000); webClient.waitForBackgroundJavaScript(10000); HtmlPage page = webClient.getPage("https://calculator888.ru/random-generator/sluchaynoye-slovo"); List<HtmlElement> countOfWords = page.getByXPath("//*[@id=\"klch\"]"); System.out.println("Count of words is " + countOfWords.size()); List<HtmlElement> setOfWords = page.getByXPath("//*[@id=\"psz\"]");//word!!1111 System.out.println("set of words is " + setOfWords.size()); for (HtmlElement item : countOfWords) item.setAttribute("data-vpmn", "10"); countOfWords = page.getByXPath("//*[@id=\"klch\"]"); System.out.println("Count of words AFTER is " + countOfWords.get(0).getAttribute("data-vpmn")); //press button HtmlInput input = page.getHtmlElementById("genr"); //Html + ButtonInput + Input + SubmitInput HtmlPage after = input.click(); webClient.waitForBackgroundJavaScript(10000); for (int i = 0; i < 20; i++) { if (after.getByXPath("//*[@id=\"psz\"]").size() != 1) { break; } synchronized (page) { page.wait(500); } } List<HtmlElement> setOfWords1 = after.getByXPath("//*[@id=\"psz\"]");//after System.out.println("set of words is AFTER CLICK " + setOfWords1.size()); System.out.println("end"); } } 我这两天一直在寻找解决方案。感谢您的帮助! Cibiyanna26 评论后编辑: package org.example; import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlElement; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { WebClient webClient = new WebClient(); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); webClient.getOptions().setJavaScriptEnabled(false); HtmlPage page = webClient.getPage("https://calculator888.ru/random-generator/sluchaynoye-slovo"); webClient.waitForBackgroundJavaScript(10000); HtmlElement htmlInputLineOfWords = (HtmlElement) page.getByXPath("//*[@id=\"bov\"]").get(0); System.out.println("before click =" + htmlInputLineOfWords.getTextContent()); webClient.waitForBackgroundJavaScript(10000); HtmlElement button = (HtmlElement) page.getElementById("genr"); page = button.click(); htmlInputLineOfWords = (HtmlElement) page.getByXPath("//*[@id=\"bov\"]").get(0); System.out.println("after click = " + htmlInputLineOfWords.getTextContent()); System.out.println(page.asText()); } } 和pom.xml: <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.13</version> </dependency> 检查您的依赖项是否正确安装 然后试试这个: import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnitExample { public static void main(String[] args) { try (final WebClient webClient = new WebClient()) { webClient.getOptions().setJavaScriptEnabled(false); final HtmlPage page = webClient.getPage("https://example.com"); final HtmlButton button = page.getElementById("buttonId"); button.click(); System.out.println(page.asText()); } catch (Exception e) { e.printStackTrace(); } } }
在java项目中,我必须使用HtmlUnit来检索网页的内容。 我如何搜索具有内容 123 的元素。它是 html 文档的一部分。引用元素 h...
我对 HtmlUnit 很陌生,但我在这里尝试做的事情如下 我们有一个水晶服务器,我们需要调用它来获取报告 我们正在使用从水晶服务器公开的 Restful API...