Python:Selenium webdriver与挂起代理问题
我正在尝试理解如何处理通过代理进行的请求出现挂起的情况。比如,我有以下这段代码:
def call_with_proxy(ip, port):
profile = FirefoxProfile()
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.socks', ip)
profile.set_preference('network.proxy.socks_port', port)
profile.update_preferences()
driver= webdriver.Firefox(profile)
driver.get("http://somewebsite.com")
这个代理是从这里的免费代理列表获取的:https://hidemyass.com/proxy-list/
有时候一切正常,我能顺利获取到我请求的页面。但有时候,我却只看到一个空白的Firefox页面(虽然能看到网站的一些元素在加载,比如样式表),而这个过程会持续很长时间。例如,即使等了10分钟,连接也没有关闭。我想问有没有办法自动关闭浏览器,比如当页面加载时间过长时,或者当我进行的测试因为某些与代理相关的原因停止执行时。
2 个回答
0
用队列或者其他活跃的运行对象(比如网络监听器)来实现一个心跳系统。如果你知道整个网站脚本的最大运行时间,可以使用类似SE-Grid的功能。
如果你的网站加载时间不固定,而且只关心初始加载时间,那么我能想到的唯一办法就是心跳系统。
1
在Java中,我们有:
webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
根据文档:
pageLoadTimeout
WebDriver.Timeouts pageLoadTimeout(long time, java.util.concurrent.TimeUnit unit)
这个方法设置了在页面加载完成之前等待的时间。如果超时时间是负数,页面加载可以无限期进行。
参数: time - 超时时间的数值。 unit - 时间的单位。返回值: 一个 Timeouts 接口。
快速搜索一下可以发现:
webDriver.set_page_load_timeout(30)
对于Python,可以在 try-catch
(或者在你的情况下是 try-except
)中尝试这个。