我一直都知道,好的编码意味着:不要重复自己。但是这些天我一直在重复自己,试图让我的爬虫处理超时错误。
对于我单击的每个链接或按钮,我添加一个救援异常 => e 并刷新页面。
例如
browser.link(:xpath, "//tr[@class='pager'][1]/td/a").when_present.click
变成
begin
browser.link(:xpath, "//tr[@class='pager'][1]/td/a").wait_until_present
browser.link(:xpath, "//tr[@class='pager'][1]/td/a").click
rescue Exception => e
sleep (10)
puts "timed out, let's refresh"
browser.refresh
end
也许有一个更清洁、不重复的解决方案。我试过操纵 Watir::wait 但我无法让它工作..
class Watir::Wait
alias_method :__do_wait, :wait_until
def wait_until
begin
__do_wait{ yield }
rescue Exception => e
puts "timed out. let's refresh"
$browser.refresh
end
end
end