【问题标题】:Problem in HtmlUnit API for Java (Headless Browser)?用于 Java(无头浏览器)的 HtmlUnit API 中的问题?
【发布时间】:2010-01-25 08:33:09
【问题描述】:

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

我已将选择的值设置为“1”

通过以下命令

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);

然后点击下面的按钮

通过以下命令

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());

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

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

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

第一季度。为什么我无法通过 htmlunit 的浏览器获得相同的页面(包含 CAPTCHA)?

【问题讨论】:

  • 给出你用来创建webClient的代码
  • setting BROWSER_VERSION 应该设置 User-Agent 标头。因此,也许可以监视浏览器根据请求发送的 HTTP 标头,以及您的应用程序(通过代理)发送的 HTTP 标头以查看差异。
  • 我也试过了。在这两种情况下,所有请求标头都是相同的。

标签: java htmlunit headless headless-browser


【解决方案1】:

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

如果您知道如何模拟每个用户点击 div 的异常下拉菜单,那么您应该能够提交表单。

【讨论】:

  • 或者您也可以尝试使用 firebug 来确定站点对表单的需求,并根据您的请求进行模拟。有时可以更容易跳过该步骤:-)
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多