2013-04-26 4 views
1

Все, что я хочу сделать, это дистанционно задать вопрос на ask.fm, используя java nad HTMLUnit framework. Я думаю, что это не работает из-за кода javascript, но я не уверен.HTMLUnit исполняющая форма с кодом javascript

это то, как задать вопрос форма выглядит следующим образом:

<form action="/userame/questions/create" autocomplete="off" id="question_form" method="post" onsubmit="$.ajax({data:$.param($(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('b9o8BHnVU6KDQ/oMsdQh+ClYPlS10134bpa7bFCkqtA='), dataType:'script', type:'post', url:'/username/questions/create'}); Forms.Profile.afterSubmit(); return false;" style="display:block"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="b9o8BHnVU6KDQ/oMsdQh+ClYPlS10134bpa7bFCkqtA=" /></div> 

    <div id="profile-title"> 
     <div class="profile-title-text"> 
     <span class="text-headline" dir="ltr"><span dir="ltr">KILO K ♣</span></span> 
     </div> 
    </div> 

    <div id="postLoaderTerritory"> 
     <textarea class="composeQuestion-form growable-textarea" id="profile-input" name="question[question_text]"></textarea> 
     <div id="postLoader"></div> 
    </div> 

    <div id="post_options-border"> 
     <div id="post_options"> 



     <div id="generalLevel"> 
      <div class="profile-title-counter" id="question_counter_span"></div> 

      <input class="submitBlue submitBlue-active" id="question_submit" name="commit" onclick="RLTME.rec('profile_q_send_click');return Forms.Profile.allowSubmit(this)" type="submit" value="Ask" /> 


     </div> 

     </div> 
    </div> 


     <script type="text/javascript"> 
//<![CDATA[ 

      window.setTimeout(function(){try{$("textarea#profile-input").focus();}catch(e){}},10); 

//]]> 
</script> 




    </form> 

Это, как я пытаюсь сделать:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17); 
      webClient.getCookieManager().setCookiesEnabled(true); 
      webClient.setJavaScriptEnabled(true); 
      webClient.setThrowExceptionOnScriptError(false); 
      HtmlPage page = webClient.getPage("http://ask.fm/username"); 
      List<HtmlForm> forms = page.getForms(); 

      HtmlForm ask = forms.get(1); 

      HtmlSubmitInput button = ask.getInputByName("commit"); 
      HtmlTextArea text = ask.getTextAreaByName("question[question_text]"); 
      text.setText("question"); 
      HtmlPage click = button.click(); 

      webClient.closeAllWindows(); 

Я получил также много предупреждений во время выполнения программы:

PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl уведомит ПРЕДУПРЕЖДЕНИЯ: тип Устаревшего содержания встречается: 'Текст/JavaScript'.

Это то, что сообщение содержит когда занесена в хроме:

authenticity_token:b9o8BHnVU6KDQ/oMsdQh+ClYPlS10134bpa7bFCkqtA= 
question[question_text]:question 
authenticity_token:b9o8BHnVU6KDQ/oMsdQh+ClYPlS10134bpa7bFCkqtA= 

Как я могу получить это работает? Есть идеи?

ответ

1

Вы делаете это правильно, вы просто не дожидаетесь, пока подача будет обработана. Добавьте это после HtmlPage click = button.click(); линии:

webClient.waitForBackgroundJavaScript(10 * 1000); 

Он будет ждать 10 секунд. Для более приятного решения вы также можете попробовать this one.

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

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