难以点击与nokogiri和机械化的链接

时间:2011-09-20 22:44:31

标签: ruby nokogiri mechanize

也许我做错了,或者还有另一种更有效的方法。这是我的问题:

我首先使用nokogiri打开一个html文档并使用它的css遍历文档,直到找到我需要点击的链接。

现在,一旦我有链接,我如何使用mechanize点击它?根据文档,Mechanize.new返回的对象是字符串或Mechanize :: Page :: Link对象。

我不能使用字符串 - 因为可能有100个相同的链接 - 我只想要机械化点击nokogiri遍历的链接。

有什么想法吗?

3 个答案:

答案 0 :(得分:14)

找到所需的链接节点后,您可以手动创建Mechanize::Page::Link对象,然后点击它:

agent = Mechanize.new
page = agent.get "http://google.com"
node = page.search ".//p[@class='posted']"
Mechanize::Page::Link.new(node, agent, page).click

答案 1 :(得分:5)

比@binarycode选项更简单:

agent = Mechanize.new
page = agent.get "http://google.com"
page.link_with(:class => 'posted').click

答案 2 :(得分:2)

这很简单,您不需要使用mechanize link_with().click

您只需get该链接并更新page变量

即可

Mechanize在内部保存当前的工作站点,因此它足够智能,可以关注本地链接

例:

agent = Mechanize.new
page = agent.get "http://somesite.com"

next_page_link =  page.search('your exotic selectors here').first rescue nil  #nokogyri object 
next_page_href =  next_page_link['href'] rescue nil  # '/local/link/file.html'

page = agent.get(next_page_href) if next_page_href  # goes to 'http://somesite.com/local/link/file.html'
相关问题