2013-02-25 2 views
1

Я пытаюсь следовать ссылке с Mechanize, но, похоже, она не работает, синтаксис кажется правильным, я неправильно ссылаюсь или мне нужно сделать что-то еще?Почему Mechanize не следует по ссылке

Проблема область

agent.page.links_with(:text => 'VG278H')[2].click 

Полный код

require 'rubygems' 
require 'mechanize' 
require 'open-uri' 

agent = Mechanize.new 

agent.get ("http://icecat.biz/en/") 

#Show all form fields belonging to the first form 
form = agent.page.forms[0].fields 

#Enter VG278H into the text box lookup_text, submit the data 
agent.page.forms[0]["lookup_text"] = "VG278H" 
agent.page.forms[0].submit #Results of this is stored in Mechanize agent.page object 

#Call agent.page with our results and assign them to a variable page 
page = agent.page 

agent.page.links_with(:text => 'VG278H')[2].click 

doc = page.parser 
puts doc 

ответ

0

Вы должны захватить копию Чарльз (http://www.charlesproxy.com/) или что-то, что позволяет наблюдать то, что происходит, когда вы отправите форму из вашего браузера. Во всяком случае, ваша проблема в том, что эта часть:

agent.page.forms[0]["lookup_text"] = "VG278H" 
agent.page.forms[0].submit 

возвращает фрагмент HTML, который выглядит следующим образом:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><script>self.location.href="http://icecat.us/index.cgi?language=en&new_search=1&lookup_text=VG278H"</script> 

Так что вам на самом деле нужно назвать это непосредственно или ломом вне в self.location. HREF и ваш агент выполнить ПОЛУЧАЕТЕ:

page = agent.get("http://icecat.us/index.cgi?language=en&new_search=1&lookup_text=VG278H") 

Если вы собираетесь сделать, это работает:

require 'rubygems' 
require 'mechanize' 
require 'open-uri' 

agent = Mechanize.new 

agent.get ("http://icecat.biz/en/") 

page = agent.get("http://icecat.us/index.cgi?language=en&new_search=1&lookup_text=VG278H") 

page = page.links_with(:text => 'VG278H')[2].click 

doc = page.parser 
puts doc 

Happy scraping

+0

Вышеприведенный код дает те же результаты, что и мой первоначальный код, был ли ваш предполагаемый результат? – Ninja2k

+0

действительно? Я не понимаю, как это возможно. Вы пытались сделать это точно так же, как написано, по сравнению с тем, что вы разместили? Сбой вашего кода: tmp/s1.rb: 19: in '

': undefined method' click' для nil: NilClass (NoMethodError), мой код возвращает страницу результатов. – rainkinz

+0

oops извините, вы правы, я не вставлял правильный код! Исправлено (я оставил этот бит: page = page.links_with (: text => 'VG278H') [2] .click) – rainkinz

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