我正在使用 Selenium 和本地 FireFox 浏览器来访问 live.com 的垃圾邮件箱并阅读电子邮件。出于测试目的,我一直在使用“binding.pry”与我的脚本进行交互并查看问题出在哪里。
当我尝试查找代表收件箱消息的元素时:
driver.find_element(:css,"#messageListContentContainer .ia_hc")
我在 60 秒后收到此错误:
Timeout::Error: execution expired
from /usr/lib/ruby/1.8/timeout.rb:64:in `rbuf_fill'
但是,当我在 Pry 中时,我可以快速重复相同的命令。大约 5 或 10 秒后,它会找到该元素。
显然,我可以通过在呼叫周围放置一个before
, rescue
,retry
块来解决这个问题,但这意味着我必须等待 70-80 秒才能单击一封电子邮件。有谁知道为什么 find_element 花了这么长时间以至于它超时,或者为什么它第二次没有超时?是因为 live.com(在网站上称为“Outlook Mail”)有大量元素可供搜索吗?他们使用的 JavaScript 有什么问题吗?
我已经能够用 Firefox 和 PhantomJS 复制这个问题
更新:: 我发现在任何页面刷新后所有调用都会发生这种情况。我可以打电话给 driver.page_source 我也有同样的问题。在页面刷新后的一段时间内,似乎 selenium 无法与浏览器交互。难道是硒在阅读网页上的所有内容时遇到了麻烦?