- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 java 创建一个应用程序,该应用程序将从网页中读取信息。为了从我想要的元素中下载信息,我使用了 jsoup(优秀的工具!),但我想加载网页中使用的 GridView 的下一页。该页面是一个 .aspx 页面,第二页的链接是这样的:
<a href="javascript:__doPostBack('GridView1','Page$2')" style="color:White;">2</a>
下面是使用的javascript函数:
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
目前,我正在尝试使用 HTMLUnit 来完成它,但看起来不起作用。下面是我正在使用的代码:
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
HtmlPage page = webClient.getPage("http://www.webpage.com/Main.aspx");
HtmlAnchor anchor = null;
List<HtmlAnchor> anchors = page.getAnchors();
for (int j = 0; j < anchors.size(); j++)
{
anchor = anchors.get(j);
String sAnchor = anchor.asText();
String sAnchorxml = anchor.asXml();
if (sAnchor.equals("2"))
{
HtmlPage page2 = anchor.click();
doc = Jsoup.parse(page2.asXml());
.....
当我使用与第一页相同的代码阅读该页面时,出现以下错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at test.advacus.com.MainProgram.main(MainProgram.java:148)
我假设我的错误在 'Jsoup.parse()'
行中。只是为了澄清一下,一旦您单击下一页,url 不会改变,只会更改 GridView 中的信息,因此我无法使用新 url 进行解析。
任何额外的帮助或任何建议的工具而不是 HTMLUnit 将更好地与 jsoup 合作真的会有所帮助!提前致谢!
编辑附加信息:看起来 click()
不起作用...我修改了代码,newPage 主体看起来包含与第一页相同的信息:
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
HtmlPage page = webClient.getPage("http://www.qatarsale.com/EnMain.aspx");
HtmlAnchor anchor = page.getAnchorByText("2");
HtmlPage newPage = anchor.click();
HtmlElement el = newPage.getBody();
System.out.println(el.asText());
最佳答案
检查 anchor - 正如您已经指出的那样 - doPostBack
被调用,因此调用 javascript 调用比首先获取 anchor 并调用点击要简单得多。
示例代码
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setTimeout(10000);
try {
HtmlPage htmlPage = webClient.getPage("http://qatarsale.com/EnMain.aspx");
Document doc = Jsoup.parse(htmlPage.asXml());
System.out.println(doc.select("[id$=Label10]").text());
ScriptResult result = htmlPage.executeJavaScript("__doPostBack('GridView1','Page$2')");
htmlPage = (HtmlPage)result.getNewPage();
Thread.sleep(3000); // delay needed for lazy loading, there might be something cleaner
doc = Jsoup.parse(((HtmlPage)htmlPage).asXml());
System.out.println(doc.select("[id$=Label10]").text());
} catch (Exception e) {
e.printStackTrace();
} finally {
webClient.close();
}
输出
Toyota Porsche Mercedes-Benz Cadillac Jeep Porsche Porsche Nissan Mitsubishi BMW Porsche Ford Mitsubishi Toyota Nissan Land Rover Nissan Mercedes-Benz Nissan Nissan Toyota Toyota Porsche Mitsubishi Mitsubishi Nissan Nissan Mercedes-Benz Nissan Jeep Mercedes-Benz Lexus BMW Lexus
BMW Lexus Toyota Toyota Lexus Nissan Mercedes-Benz Mercedes-Benz Ferrari Dodge BMW Mercedes-Benz Aston Martin Mitsubishi Suzuki Maserati Porsche Maserati Land Rover Chevrolet Land Rover GMC Toyota Porsche Lexus Land Rover GMC Mercedes-Benz Toyota Lexus Toyota Lexus Toyota Nissan
关于javascript - Java 中的 HTMLUnit - 如何导航到 GridView 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39673782/
htmlunit 报告从 css 到页面上解析错误的所有内容。 这个怎么静音?? 最佳答案 把这些放在声明 webClient 之后 webClient.setCssError
可能显示 Javascript 测试支持 package htmlunitpoc; import com.gargoylesoftware.htmlunit.WebClient; import co
我正在尝试使用 HtmlUnit 登录到我的本地 wordpress 网站,但它似乎存在 cookie 问题。 那是代码的开头: WebClient webClient = new WebClient
有什么办法可以在 HtmlUnit 中使用 session 更改 url? 我的情况如下所示, 登录 http://test.raja.com与凭据。 获取页面http://home.raja.com
我有以下代码: WebClient webClient = new WebClient(); HtmlPage page = webClient.getPage("http://www.myland.
我研究过htmlunit、httpunit、jwebunit、selenium等ui测试工具。 我对测试工具不是很熟悉。 Htmlunit 在 javascript 支持方面听起来是个不错的选择。然后
我拥有的页面对象是 click() 长链的结果调用(以防万一您想知道如何在不知道用于获取它的 URL 的情况下拥有一个页面对象)。 方法HtmlPage.getDocumentURI未实现。 Html
这是我要抓取的页面:https://www.tokopedia.com/berkahcell2/promo-termurah-vr-virtual-reality-box-v-2-0-remote-b
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我的站点结构看起来像这样: Item 1 Desc 1
我的代码是这样的: WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.setAjaxController(ne
我只希望页面的文本内容,并且希望抓取尽可能轻巧。我可以关闭HTMLUnit开箱即用的所有JavaScript和CSS以及其他外部内容的解析和其他加载功能吗? 最佳答案 我认为与您正在寻找的最接近的东西
我有一个提交按钮,但无法点击.. Send SMS 我已经尝试过这个: page = (HtmlPage) form.getInputByValue("Send SMS").click()
我使用 HtmlUnit 对我的网站进行自动化测试。我的网站使用 gmaps api - 发送外部网站请求需要花费大量时间(我有数百次测试和数千次页面加载)。 我需要一些方法来告诉 HtmlUnit
我使用 HtmlUnit 对我的网站进行自动化测试。我的网站使用 gmaps api - 发送外部网站请求需要花费大量时间(我有数百次测试和数千次页面加载)。 我需要一些方法来告诉 HtmlUnit
我正在使用 HtmlUnit 加载一个充满 JavaScript 的网页。 WebClient 可以很好地执行 JavaScript。 但是,当我单击调用 Ajax 调用的特定表单上的按钮时,即使调用
我正在尝试使用 HtmlUnit 登录 Facebook 页面并查看其 HTML 内容。我正在尝试通过 HtmlUnit 填写登录凭据,但在单击提交按钮时我没有看到正在执行的 session 。 在
Hy...我想使用 HtmlUnit 登录到一些 3rd 方网站。但是 HtmlUnit 应该能够告诉我对输入站点的登录尝试是否成功。有什么办法可以使用 HtmlUnit 执行此任务。请帮忙 ..!!
我正在从 selenium-1 升级到 selenium-2 并尝试新的 HtmlUnit 驱动程序。我已经尝试了一些基本的测试(打开一个页面,get_text,..),它似乎 极慢(我认为 chro
我正在使用 HTMLUnit。我正在访问页面,但是特殊(马耳他)字符显示错误。例如,ġuvni 显示为 ?uvni HtmlPage page = submit_button.click(); Sys
我是一名优秀的程序员,十分优秀!