使用htmlUnit刮擦aspx页面

时间:2013-12-03 13:17:55

标签: java web-scraping htmlunit

我正在尝试编写一个程序来访问页面http://www.bmfbovespa.com.br/cias-listadas/empresas-listadas/BuscaEmpresaListada.aspx?Idioma=pt-br,然后在页面上点击“todas”按钮。

预计结果是一张名为许多公司的桌子,但我不知道为什么我没有得到它。

我的代码:

package xx;

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class teste {

    public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException
    {
       HtmlPage page = null;
       String url = "http://www.bmfbovespa.com.br/cias-listadas/empresas-listadas/BuscaEmpresaListada.aspx?Idioma=pt-br";

       WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);

       webClient.getOptions().setThrowExceptionOnScriptError(false);
       webClient.getOptions().setCssEnabled(false);
       webClient.getOptions().setJavaScriptEnabled(false);
       webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
       webClient.getOptions().setTimeout(30000);

       page = webClient.getPage( url );

       System.out.println("Current page: Empresas Listadas | BM&FBOVESPA");

       HtmlElement theElement1 = (HtmlElement) page.getElementById("ctl00_contentPlaceHolderConteudo_BuscaNomeEmpresa1_btnTodas");
       page = theElement1.click();

       System.out.println(page.asText());

       System.out.println("Test has completed successfully");
    }

}

1 个答案:

答案 0 :(得分:1)

在浏览了那个页面后,我注意到它正在使用AJAX来获取数据。您似乎没有等待数据的进展,这可能是问题。

您应首先查看HTMLUnit FAQ

然后,可能这个question可能有助于提供一个如何做到这一点的具体例子。