我正在使用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
欢迎任何其他想法或建议。