我想創建一個應用程序使用java將讀取網頁的信息。爲了從我想要的元素下載信息,我使用了jsoup(優秀的工具!),但我想加載網頁中使用的GridView的下一頁。 的頁面是一個.aspx頁面,並在第二頁的鏈接是這樣的:在Java中的HTMLUnit - 如何導航到GridView頁面
<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身體看起來像它包含了相同的信息作爲第1頁:
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());
你能發佈網頁的網址? '__doPostBack'可能會在後臺觸發一個可以用jsoup複製的請求。 –
你好F.Klein .... http://qatarsale.com/EnMain.aspx是網址... doPostBack看起來像傳遞下一頁參數到ASP.Net服務器....但不幸的是,我沒有管理爲此找到一個新的網址 – thpst