нажал на ссылку с нокогири и механизировал - PullRequest
5 голосов
/ 21 сентября 2011

возможно, я делаю это неправильно, или есть другой более эффективный способ.Вот моя проблема:

Сначала я с помощью nokogiri открываю html-документ и использую его CSS для перемещения по документу, пока не найду ссылку, по которой мне нужно нажать.

Теперь, когда у меня естьссылку, как я могу использовать механизировать, чтобы нажать на нее?Согласно документации, объект, возвращаемый Mechanize.new, является либо строкой, либо объектом Mechanize :: Page :: Link.

Я не могу использовать строку - поскольку там может быть 100 по одной и той же ссылке - я хочу толькомеханизировать, чтобы щелкнуть ссылку, пройденную nokogiri.

Есть идеи?

Ответы [ 3 ]

14 голосов
/ 21 сентября 2011

После того, как вы нашли нужный узел ссылки, вы можете создать объект 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
5 голосов
/ 22 сентября 2011

Более простой способ, чем опция @binarycode:

agent = Mechanize.new
page = agent.get "http://google.com"
page.link_with(:class => 'posted').click
2 голосов
/ 10 сентября 2014

Это просто, вам не нужно использовать механизировать link_with().click

Вы можете просто get ссылку и обновить page переменную

Механизация сохраняет текущий рабочий сайтвнутренне, поэтому он достаточно умен, чтобы переходить по локальным ссылкам

Пример:

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'
...