机械化表单提交

时间:2015-05-12 05:02:55

标签: ruby mechanize irb mechanize-ruby

我有一个网站,我试图使用Mechanize。 当我提交表单时,表单将使用以下格式的URL提交: https://www.website.com/Login/Options?returnURL=some_form_options (如果我在浏览器中输入该URL,它会将我发送到一个很好的错误页面,说明所请求的页面不存在)

然而,如果我从网站提交表单,则返回的URL将采用以下格式: https://www.website.com/topic/country/list_of_form_options

该网站有一个登录表单,无需填写即可提交搜索查询。

知道为什么我会使用Mechanize提交不同的URL提交相同的表单?以及如何应对? 我无法处理我得到的网址"机械化"形式。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以找到要提交的确切表单然后提交,如果您无法找到路径,那么您甚至可以使用Mechanize添加表单字段并提交该表单。这是我在我的项目中使用的代码。

我为此任务创建了一个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