gpt4 book ai didi

Ruby Watir——尝试遍历 cnn.com 中的链接并单击每个链接

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:47 24 4
gpt4 key购买 nike

我创建了这个方法来循环访问网站中某个 div 中的链接。我对该方法的目的是收集链接,将它们插入一个数组中,然后单击其中的每一个。

require 'watir-webdriver'
require 'watir-webdriver/wait'

site = Watir::Browser.new :chrome
url = "http://www.cnn.com/"
site.goto url

box = Array.new
container = site.div(class: "column zn__column--idx-1")
wanted_links = container.links


box << wanted_links
wanted_links.each do |link|
link.click
site.goto url
site.div(id: "nav__plain-header").wait_until_present
end

site.close

到目前为止,我似乎只能点击第一个链接,然后收到一条错误消息:

  unable to locate element, using {:element=>#<Selenium::WebDriver::Element:0x634e0a5400fdfade id="0.06177683611003881-3">} (Watir::Exception::UnknownObjectException)

我对 ruby 很陌生。我感谢任何帮助。谢谢。

最佳答案

问题是,一旦您导航到另一个页面,所有元素引用(即 wanted_links 中的元素引用)都会变得陈旧。即使返回同一个页面,Watir/Selenium 也不知道这是同一个页面,也不知道存储的元素在哪里。

如果您要离开,您需要先收集所有需要的数据。在这种情况下,您只需要 href 值。

# Collect the href of each link
wanted_links = container.links.map(&:href)

# You have each page URL, so you can navigate directly without returning to the homepage
wanted_links.each do |link|
site.goto url
end

如果链接不直接导航到页面(例如,它们在单击时执行 JavaScript),您将需要收集足够的数据以便稍后重新定位元素。您用作定位器的内容将取决于已知的静态/唯一性。例如,我假设链接文本是一个很好的定位器。

# Collect the text of each link
wanted_links = container.links.map(&:text)

# Iterate through the links
wanted_links.each do |link_text|
container = site.div(class: "column zn__column--idx-1")
container.link(text: link_text).click

site.back
end

关于Ruby Watir——尝试遍历 cnn.com 中的链接并单击每个链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924128/

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