2010-01-25 8 views
2

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

Я поставил значение, выберите на "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. Почему я не получаю одну и ту же страницу (содержащую CAPTCHA) через браузер htmlunit?

+0

укажите код, который вы создаете в настройке 'webClient' – Bozho

+1

,' BROWSER_VERSION' должен установить заголовок User-Agent. Поэтому, возможно, отслеживайте заголовки HTTP, отправленные вашим браузером по запросу, и те, которые отправлены вашим приложением (через прокси), чтобы увидеть разницу. – Bozho

+0

Я тоже пробовал. Все заголовки запросов одинаковы в обоих случаях. –

ответ

3

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

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

+0

Или вы также можете просто попробовать использовать firebug, чтобы выяснить, что сайт хочет для формы и подражать этому для вашего запроса. Может быть проще пропустить этот шаг иногда :-) – jpswain

 Смежные вопросы

  • Нет связанных вопросов^_^