我知道如何使用 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&rct=j&q=&esrc=s&source=web&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&rct=j&q=&esrc=s&source=web&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/