gpt4 book ai didi

ruby - 使用 Mechanize gem 根据链接在 DOM 中的位置返回链接集合

转载 作者:数据小太阳 更新时间:2023-10-29 07:03:59 25 4
gpt4 key购买 nike

我正在为 Mechanize 而苦苦挣扎。我希望“单击”一组只能通过其位置(div#content 中的所有链接)或其 href 来识别的链接。

以上两种识别方法我都试过了,都没有成功。

从文档中,我无法弄清楚如何根据链接在 DOM 中的位置而不是直接通过链接上的属性返回一组链接(用于单击)。

其次,documentation建议你可以使用 :href 来匹配部分 href,

page = agent.get('http://foo.com/').links_with(:href => "/something")

但我让它返回链接的唯一方法是传递一个完全限定的 URL,例如

page = agent.get('http://foo.com/').links_with(:href => "http://foo.com/something/a")

如果我想返回带有 href 的链接集合,这不是很有用

http://foo.com/something/a
http://foo.com/something/b
http://foo.com/something/c
etc...

我做错了什么吗?我有不切实际的期望吗?

最佳答案

第二部分默认情况下,您传递给 :href 的值必须完全匹配。所以你的例子中的 href 只会匹配 <a href="/something"></a>而不是 <a href="foo.com/something/a"></a>

您要做的是传入一个正则表达式,以便它匹配 href 字段中的子字符串。像这样:

page = agent.get('http://foo.com/').links_with(:href => %r{/something/})

编辑:第一部分为了让它只在一个链接中选择链接,在你的字符串中添加一个 nokogiri 风格的搜索方法。像这样:

page = agent.get('http://foo.com/').search("div#content").links_with(:href => %r{/something/})    # **

好吧,那是行不通的,因为在你做了 page = agent.get('http://foo.com/').search("div#content") 之后你得到一个 Nokogiri 对象而不是一个 Mechanize 对象,所以 links_with 将不起作用。但是,您将能够使用 css 方法从 Nokogiri 对象中提取链接。我会建议这样的事情:

page = agent.get('http://foo.com/').search("div#content").css("a")

如果这不起作用,我建议查看 http://nokogiri.org/tutorials

关于ruby - 使用 Mechanize gem 根据链接在 DOM 中的位置返回链接集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com