我怎样才能使 .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 可能已经实现了此功能。
我正在编写一个 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 可能已经实现了此功能。