我怎样才能使 .goto 成为非阻塞的?

How can I make .goto non-blocking?

我正在编写一个 rails 应用程序,它使用 Watir 和 Chrome Headless 从 HTML 页面获取文本。目前一切顺利!

当我请求一个加载时间很长的页面来完全加载 所有 元素时,问题就开始了,尽管我不需要它们。

我目前使用的代码:

browser = Watir::Browser.new :chrome, headless: true

browser.goto(url)

但是,.goto 函数调用会阻塞,直到所有元素都已加载。这并不是我真正需要的 - 我需要的是让 goto 开始获取页面,然后继续 运行 代码,因为我真的只想等到我需要的文本出现,然后获取它。

有什么想法吗?

Goto 会在 60 秒后离开控件,如果页面加载时间超过 60 秒,则会抛出错误。而且 Watir.default_timeout 与 Goto 的页面加载无关。您需要设置 page_load 的时间,这可以通过直接调用 selenium 驱动程序来完成,就像我在下面所做的那样,因为 Watir 没有为此提供任何 systax

编写下面的代码,你可以实现你想要的

 begin
  b.driver.manage.timeouts.page_load=5
  b=Watir::Browser.new
  b.goto(url)
rescue            #I have written the rescue block here because goto will the error for you If page is not loaded within a given time
end

然后您可以在此处编写其余代码,例如,

puts b.span(text: 'something').text

这里发生的事情是,goto 会阻塞 goto 后面代码的执行 5 秒,然后它会落入 rescue 块,所以程序会继续执行下一行,正如你所期望的。

随着新的w3c webdriver规范,您可以将页面加载策略设置为'none.' https://w3c.github.io/webdriver/webdriver-spec.html#navigation

只有 Firefox 和 IE 可能已经实现了此功能。