Watir网络刮刀有时可以工作,有时则不工作

时间:2016-06-08 19:57:24

标签: ruby web-scraping watir

b = Watir::Browser.new :firefox
url_input = "www.url.com"
b.goto url_input
b.driver.manage.timeouts.implicit_wait = 100

h3s = b.h3s class:"class-name"

for h3 in h3s
    h3.wait_until_present

    as = h3.as

    for a in as
        # puts a.text
        name = h3.text
        puts name
    end
end

代码有时打印所有h3标签的预期名称,但有时当我从终端运行程序时,它只是不打印任何内容并最终出现如下错误:

  

“/。rvm / rubies / ruby​​-2.3.0 / lib / ruby​​ / 2.3.0 / net / protocol.rb:158:在`rbuf_fill'中:Net :: ReadTimeout(Net :: ReadTimeout)”。

当我尝试打印a.text或者当我尝试通过执行url = a.attribute_value('href')来获取标记的url并打印出来时,它永远无法工作。对我而言,它有时会运行,有时却不会运行,这似乎很奇怪。我怀疑这与时间有关,但我不明白Watir的时间是如何工作的。

1 个答案:

答案 0 :(得分:0)

事实证明这是一个时间问题。最终我得到了它的工作:

for a in as
    a.wait_until_present
    if a.when_present
        name = a.text
        url = a.attribute_value('href')
    end
end

这有时有效,有时却没有。它在随机位置解析数据的过程中停了几次。叹了口气,我最终得到了我需要的数据。