【问题标题】:Watir Error: unable to locate elementWatir 错误:无法定位元素
【发布时间】:2015-10-06 11:25:01
【问题描述】:

我正在用 Watir 编写一个网络爬虫,但我似乎无法弄清楚我遇到的这个错误。我在某个页面上有一组用于链接的文本,但是当我遍历它并单击链接然后返回时,它会中断。

这是 HTML 代码

<div>
  <a href="wherever">Text here</a>
</div>
<div>
  <a href="wherever">Text here 2</a>
</div>
<div>
  <a href="wherever">Text here 3</a>
</div>

这是我的 Watir 代码

browser = Watir::Browser.new
browser.goto 'some_valid_site.com'
array = ['Text here', 'Text here 2', 'Text here 3']
array.each do |text|
  browser.link(:text, text).click
  browser.back
end

它正确执行了第一个链接,但是当涉及到第二个链接时,我收到以下错误消息:

ruby-2.2.2@gemset/gems/watir-webdriver-0.8.0/lib/watir-webdriver/elements/element.rb:533:
in `assert_element_found': unable to locate element, 
using {:element=>#<Selenium::WebDriver::Element:0x1bef61e9aef3c36a 
id="{ad42ba23-8037-a745-8fd7-21955ab49406}">} 
(Watir::Exception::UnknownObjectException)

我对此很陌生,因此非常感谢任何建议。谢谢!

【问题讨论】:

  • 当您看到浏览器执行此操作时,它是否会在出现错误之前重新加载 back 上的页面?我知道现在大多数浏览器都会去back,然后调用重新加载页面。不知道这是否是浏览器的一项功能,或者网络程序员是否都将他们的页面设置为强制重新加载后退按钮调用以刷新页面(并刷新他们的广告点击)。
  • 您是否尝试过在下次点击之前添加一些等待时间,以防页面加载不够快?
  • @Beartech 看起来它试图在页面加载完成之前单击舔,但添加等待时间不起作用。

标签: ruby watir


【解决方案1】:

Watir 有一个wait_until_present 方法:

browser = Watir::Browser.new
browser.goto 'some_valid_site.com'
array = ['Text here', 'Text here 2', 'Text here 3']
array.each do |text|
  browser.link(:text, text).wait_until_present
  browser.link(:text, text).click
  browser.back
end   

默认等待时间是 30 秒,这应该绰绰有余。如果页面没有在 back 上重新加载,您可能需要使用显式 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 2019-01-09
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2021-07-04
    • 1970-01-01
    相关资源
    最近更新 更多