当Watir爬行时,避免等待元素渲染?

时间:2017-07-24 10:22:35

标签: ruby web-crawler watir

我正在使用Watir,Selenium ChromeDriver在我的Rails应用中运行抓取脚本。我需要完成的一些表单元素是有条件地显示的,例如基于复选框的选择,以及其中一些有条件显示的元素在淡入时呈现,这需要一段时间才能显示在页面上。

目前我正在使用睡眠以确保在Watir试图操纵它时该元素存在。这导致完成爬行操作的累积公平延迟,我想避免。对我来说,最好的方法是减少这些等待时间而不会错误地表格?

抓取脚本的示例代码:

def complete_form_1
        @browser.text_field(name: 'ctl$Years').set '5'
        @browser.text_field(name: 'ctl$CompanyNumber').set '08216084'
        @browser.select_list(:name, "ctl&IndType").select_value("02")
        @browser.radio(:id => "ctl_CurrentIns").set
        sleep 0.25
        @browser.checkbox(name: "ctl$chkLf").set
        sleep 0.25
        # @browser.checkbox(name: "ctl$chkLf").clear
        # sleep 1
        # @browser.checkbox(name: "ctl$chkLf").set
        # sleep 1
        @browser.select_list(:name, "ctl$LfCar").select_value("14")
end

我刚发现这个SO帖子; How do I use Watir::Waiter::wait_until to force Chrome to wait?

我正在研究这个Watir模块:http://www.rubydoc.info/gems/watir-webdriver/Watir/Wait

欢迎任何其他想法或建议。

1 个答案:

答案 0 :(得分:0)

从版本> 6 Watir已经等待元素出现,版本< 6将需要使用以下内容:

@browser.checkbox(name: "ctl$chkLf").wait_until_present.set

正如Watir docs here中所定义的那样。

我从这篇SO here发表了这篇文章。