2015-05-12 183 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