HtmlUnit API for Java(无头浏览器)中的问题?

时间:2010-01-25 08:33:09

标签: java htmlunit headless headless-browser

我正在使用HtmlUnit无头浏览器浏览此webpage(您可以看到该网页以更好地了解问题)。

我已将select的值设为“1”

http://i45.tinypic.com/14m70up.jpg

通过以下命令

final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);
    try {
        // Configuring the webClient
        webClient.setJavaScriptEnabled(true);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setCssEnabled(true);
        webClient.setUseInsecureSSL(true);
        webClient.setRedirectEnabled(true);
        webClient.setActiveXNative(true);
        webClient.setAppletEnabled(true);
        webClient.setPrintContentOnFailingStatusCode(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());

        // Adding listeners
        webClient.addWebWindowListener(new com.gargoylesoftware.htmlunit.WebWindowListener() {

            public void webWindowOpened(WebWindowEvent event) {
                numberOfWebWindowOpened++;
                System.out.println("Number of opened WebWindow: " + numberOfWebWindowOpened);
            }

            public void webWindowContentChanged(WebWindowEvent event) {
            }

            public void webWindowClosed(WebWindowEvent event) {
                numberOfWebWindowClosed++;
                System.out.println("Number of closed WebWindow: " + numberOfWebWindowClosed);
            }
        });

        webClient.setWebConnection(new HttpWebConnection(webClient) {
            public WebResponse getResponse(WebRequestSettings settings) throws IOException {
                System.out.println(settings.getUrl());
                return super.getResponse(settings);
            }
        });

        CookieManager cm = new CookieManager();
        webClient.setCookieManager(cm);


        HtmlPage page = webClient.getPage("http://www.ticketmaster.com/event/0B004354D90759FD?artistid=1073053&majorcatid=10002&minorcatid=207");

        HtmlSelect select = (HtmlSelect) page.getElementById("quantity_select");
select.setSelectedAttribute("1", true);

然后点击以下按钮

http://i50.tinypic.com/a27uv5.jpg

通过以下命令

HtmlButtonInput button = (HtmlButtonInput) page.getElementById("find_tickets_button");
HtmlPage captchaPage = button.click();
Thread.sleep(60*1000);
System.out.println("======captcha page=======");
System.out.println(captchaPage.asXml());

但即使点击按钮并等待60秒通过Thread.sleep()方法,我也得到相同的HtmlPage。

但是当我通过真实浏览器做同样的事情时,我会得到包含CAPTCHA的页面。

我想我在htmlunit中遗漏了一些东西。

Q1。为什么我没有通过htmlunit的浏览器获得相同的页面(包含CAPTCHA)?

1 个答案:

答案 0 :(得分:3)

该页面上的Web表单需要填写quantity_select下拉列表。您试图通过假设下拉列表是一个select元素在您的代码中执行此操作。但是,它不再是选择元素。尝试使用Firebug检查下拉列表,您将看到JavaScript已使用一组复杂的嵌套div元素替换了select。

如果你弄清楚如何模仿每个用户点击那个不寻常的下拉菜单的div,那么你应该能够提交表格。