2

私は HtmlUnit ヘッドレス ブラウザを使用してこのWeb ページを閲覧しています (問題をよりよく理解するために Web ページを表示できます)。

選択の値を「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 を取得しています。

しかし、実際のブラウザで同じことをすると、CAPTCHA を含むページが表示されます。

htmlunit に何かが欠けていると思います。

Q1. htmlunit のブラウザから同じページ (CAPTCHA を含む) を取得できないのはなぜですか?

4

1 に答える 1

3

そのページの Web フォームでは、quantity_select ドロップダウンを入力する必要があります。ドロップダウンが選択要素であると想定して、コードでそれを実行しようとしています。ただし、これは選択要素ではなくなりました。Firebug を使用してドロップダウンを調べてみると、JavaScript が select をネストされた div 要素の複雑なセットに置き換えていることがわかります。

各ユーザーがその異常なドロップダウンの div をクリックするのをエミュレートする方法がわかれば、フォームを送信できるはずです。

于 2010-01-27T12:07:29.453 に答える