Проблема в HtmlUnit API для Java (безголовый браузер)? - PullRequest
2 голосов
/ 25 января 2010

Я использую безголовый браузер HtmlUnit для просмотра веб-страницы (вы можете просмотреть веб-страницу, чтобы лучше понять проблему).

Я установил значение выбора на «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());

но даже после нажатия кнопки и ожидания в течение 60 секунд с помощью метода Thread.sleep () я получаю тот же HtmlPage.

Но когда я делаю то же самое через настоящий браузер, я получаю страницу, содержащую CAPTCHA.

Мне кажется, что-то не хватает в htmlunit.

Q1. Почему я не получаю ту же страницу (которая содержит CAPTCHA) через браузер htmlunit?

1 Ответ

3 голосов
/ 27 января 2010

Для веб-формы на этой странице требуется заполнить раскрывающийся список amount_select. Вы пытаетесь сделать это в своем коде, предполагая, что раскрывающийся список является элементом select. Тем не менее, это больше не элемент выбора. Попробуйте использовать Firebug для проверки раскрывающегося списка, и вы увидите, что JavaScript заменил select на сложный набор вложенных элементов div.

Если вы поймете, как эмулировать каждого пользователя, нажмите на div для этого необычного раскрывающегося списка, тогда вы сможете отправить форму.

...