使用Watir检查错误的链接
我有一个无序的链接列表,我保存到一边,我想点击每个链接,并确保它进入一个真实的页面,并没有404,500等。
问题是我不知道该怎么做。是否有一些我可以检查的对象会给我http状态代码或其他什么?
mylinks = Browser.ul(:id, 'my_ul_id').links
mylinks.each do |link|
link.click
# need to check for a 200 status or something here! how?
Browser.back
end
没有找到相关结果
已邀请:
4 个回复
痰降锭骂奸
舞备联
请求将让您了解URL是否解析并且速度更快。 Ruby的
可以做到,或者你可以使用
。 使用Open :: URI,您可以请求URI,然后返回页面。因为您并不真正关心页面包含的内容,所以您可以丢弃该部分,只返回是否有内容:
好处是Open :: URI解析了HTTP重定向。缺点是它返回整页,所以它可能很慢。 Ruby的Net :: HTTP可以有所帮助,因为它可以使用HTTP
请求,它们不返回整个页面,只返回标题。这本身并不足以知道实际页面是否可以访问,因为HEAD响应可能会重定向到无法解析的页面,因此您必须循环重定向,直到您没有获得重定向,或者您得到一个错误。 Net :: HTTP文档有一个示例可以帮助您入门:
同样,该示例是返回页面,这可能会减慢您的速度。您可以将
替换为
,它会返回类似
的响应,这应该会有所帮助。 在任何一种情况下,你都需要考虑另一件事。许多站点使用“元刷新”,这会导致浏览器在解析页面后使用备用URL刷新页面。处理这些需要请求页面并解析它,寻找
标签。 其他HTTP宝石如Typhoeus和Patron也可以轻松做到
请求,所以也要看看它们。特别是,Typhoeus可以通过其伴侣
处理一些重负荷,让您轻松使用并行请求。 编辑:
如果你没有玩过一个,这就是响应的样子。它对于你所看到的那种情况非常有用:
如果要检查的URL很多,请参阅Typhoeus中的Hydra示例。
涸坍饺
粳饶瓢部
值得注意的是,上述命令将遵循HTTP重定向,重试10次以查找临时错误(超时或5xx),当然只会获取标头。 更新:添加了--globoff,以便curl不会扩展任何url,如果它包含{}或[]