2015-05-12 186 views
0

我有一個網站,我試圖使用機械刮。 當我提交表單時,表單被提交一個以下格式的URL: https://www.website.com/Login/Options?returnURL=some_form_options (如果我在瀏覽器中輸入該URL,它會發送給我一個很好的錯誤頁面,表明請求的頁面不存在)機械化表單提交

然而,如果我從網站上提交表單,返回的URL將是以下格式: https://www.website.com/topic/country/list_of_form_options

該網站有一個登錄表單,這是沒有必要填寫,以便能夠提交搜索查詢。

任何想法,爲什麼我會得到一個不同的URL提交相同的形式與機械化?而如何對付呢? 我無法處理「機械化」表單後得到的URL。

謝謝!

+0

檢查頭,並將它們與您的瀏覽器與像查爾斯或招潮蟹調試代理請求。 – pguardiario

回答

0

您可以找到想要提交然後提交的確切形式,如果您無法找到路徑,那麼即使您可以使用機械化添加表單字段並提交該表單。這是我在我的項目中使用的代碼。

我不得不創建一個rake任務完成這個任務:

namespace :test_namespace do 
    task :mytask => [:environment] do 
     site = "http://www.website.com/search/search.aspx?term=search term" 
     # prepare user agent 
     ua = Mechanize.new 
     page = ua.get("#{site}") 
     while (true) 
     page.search("//div[@class='resultsNoBackground']").each do |res| 
      puts res.at("table").at('tr').at('td').text 
      link_text =res.at_css('strong').at('a').text 
      link_href = res.at_css('strong').at('a')['href'] 
      link_href ="http://www.website.com"+link_href 
      page_content='' 
      res.css('span').each do |ss| 
      ss.css('strong').remove 
      page_content=ss.text.gsub(/Vi.*s\)/, '') 
      end 
      # puts "HERE IS THE SUMMMER ......#{content_summery}" 
     end 

     if page.search("#ctl00_ContentPlaceHolder1_ctrlResults_gvResults_ctl01_lbNext").count > 0 
      form = page.forms.first 
      form.add_field! "__EVENTTARGET", "ctl00$ContentPlaceHolder1$ctrlResults$gvResults$ctl01$lbNext" 
      form.add_field! "__EVENTARGUMENT", "" 
      page = form.submit 
     else 
      break 
     end 
     end 
    end 
end