ruby - 如何点击 Nokogori 或 Mechanize 的特定链接?

标签 ruby nokogiri bots mechanize open-uri

我知道如何使用 Nokogiri 查找元素。我知道如何使用 Mechanize 单击链接。但我不知道如何找到特定链接并单击它。这看起来应该很容易,但由于某种原因我找不到解决方案。

假设我只是想点击 Google 搜索中的第一个结果。我不能只点击 Mechanize 的第一个链接,因为 Google 页面有很多其他链接,比如设置。搜索结果链接本身似乎没有类名,但它们被包裹在 <h3 class="r"></h3> 中。 .

我可以使用 Nokogiri 来关注 href链接的值(value)如下:

document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)
href = parsed_content.css('.r').children.first['href']
new_document = open(href)
# href is equal to "/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;url=https%3A%2F%2Fstackoverflow.com%2F"

但它不是一个直接的 url,访问该 url 会出错。 data-href value 是一个直接的 url,但我不知道如何获得那个值 - 除了 ...first['data-href'] 做同样的事情返回零。

任何人都知道我如何才能找到第一个 .r元素并单击其中的链接?

这是我行动的开始:
require 'open-uri'
require 'nokogiri'
require 'mechanize'
document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)

这是.r Google 搜索结果页面上的元素:
<h3 class="r">
  <a href="/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;url=https%3A%2F%2Fstackoverflow.com%2F" data-href="https://stackoverflow.com/">Stack Overflow</a>
</h3>

最佳答案

您应该确保您的问题在您的示例中是正确的代码 - 看起来不是,因为您没有用引号将 url 括起来,并且 css 选择器是 .r a不是 r .您使用 .r a因为您想使用 r 访问元素内部的链接类(class)。

无论如何,你可以使用详细的方法here像这样:

require 'open-uri'
require 'nokogiri'
require 'uri'

base_url = "https://www.google.com/search?q=stackoverflow"
document = open(base_url)
parsed_content = Nokogiri::HTML(document.read)
href = parsed_content.css('.r').first.children.first['href']
new_url = URI.join base_url, href
new_document = open(new_url)

我对此进行了测试并遵循 new_url确实按预期重定向到 StackOverflow。

关于ruby - 如何点击 Nokogori 或 Mechanize 的特定链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253439/

相关文章:

javascript - 这个数组定义到底做了什么?

ruby-on-rails - 如何在 Nokogiri 中使用 [% 特殊字符

javascript - 如何创建日志 channel 命令?

html - 有没有办法用 Watir 突出显示元素?

ruby - 使用字符串插值动态创建 Ruby 变量

ruby-on-rails - 尝试输出模型集合的列

Ruby:在方法之间传递选项参数

css - 如何通过 CSS 选择器定位标签,引用兄弟标签的内容?

ruby - 使用 Nokogiri 解析大型 HTML 文件

ios - Xcode 机器人卡在 "Processing Results"上