2017-09-26 78 views
0

我試圖使用JSOUPfood delivery website中獲取數據。目標是填寫address field,單擊submit button並向用戶顯示響應。但是當試圖找到主頁上的表格時,我得到java.lang.RuntimeException: Unable to find formsearchFormResponse.parse()包含主頁HTML,所以問題不在那裏。我已經嘗試了多種方式從jsoup網站選擇表單,但似乎沒有任何效果。任何幫助都感激不盡。如果它有任何重要性,它是一個Android應用程序。提前致謝。jsoup android java.lang.RuntimeException:無法找到表格

這裏是我的代碼

 final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"; 
     final String LOGIN_FORM_URL = "https://deliveroo.fr/fr/"; //TODO make it adapt to the country 
     final String myAddress = a; 

// # Go to login page 
     Connection.Response searchFormResponse = Jsoup.connect(LOGIN_FORM_URL) 
       .method(Connection.Method.GET) 
       .userAgent(USER_AGENT) 
       .execute(); 

// # Fill the search form 
// ## Find the search first... 
     FormElement searchForm = (FormElement)searchFormResponse.parse() 
       .select("div#landing-index-page-search__container > form").first(); 

// ## ... then "type" the address ... 
     Element searchField = searchForm.select("#landing-index-page-search--input").first(); 
searchField.val(myAddress); 


// # Now send the form 
     Connection.Response loginActionResponse = searchForm.submit() 
       .cookies(searchFormResponse.cookies()) 
       .userAgent(USER_AGENT) 
       .execute(); 
    System.out.println(loginActionResponse.parse().html()); 

網站代碼

<div class="landing-index-page-search__container" data-reactid=".1d1c1t7z20w.2.0.0.1.1"> 
    <h1 class="landing-index-page-search--main-title" data-reactid=".1d1c1t7z20w.2.0.0.1.1.0">Vos restaurants préférés, livrés en moins de 30 minutes.</h1> 
    <form method="get" action="" class="landing-index-page-search--form landing-index-page-search--non-postcode" data-reactid=".1d1c1t7z20w.2.0.0.1.1.2"> 
    <span data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.0"></span> 
    <div data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.1"> 
    <div class="landing-index-page-search--input" data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.1.1"> 
    <div class="landing-index-page-search--input address-search" data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.1.1.1"> 
    <input name="address_search" type="text" tabindex="-1" class="" placeholder="Saisissez votre adresse" value=" " data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.1.1.1.0"/></div> 
    <input id="find_food" type="submit" value="Voir les restaurants" class="button" data-reactid=".1d1c1t7z20w.2.0.0.1.1.2.1.1.2"/> 

回答

1

我猜的部分問題是,你儘量選擇<div>IDlanding-index-page-search__container用線

FormElement searchForm = (FormElement)searchFormResponse.parse() 
       .select("div#landing-index-page-search__container > form").first(); 

但據我所看到的,只是一個<div>landing-index-page-search__container

的選擇應該是

FormElement searchForm = (FormElement)searchFormResponse.parse() 
        .select("div.landing-index-page-search__container > form").first(); 

不同的是,與您選擇由id(點),您選擇元素的class

只能由類選擇一個元素,不知道/提及您可以使用標籤:奏效

Elements elements = searchForm.getElementsByClass("landing-index-page-search--input"); 
+0

非常感謝。另一個快速的問題可能是你知道答案,我怎麼才能得到我點擊提交按鈕後打開的網址? –

+0

我想[這篇文章](https://stackoverflow.com/questions/24907808/jsoup-get-redirected-url)應該幫助你 – Nico

相關問題