python:Selenium webdriver和挂起代理问题

时间:2014-03-06 11:42:03

标签: python selenium proxy

我试图理解如何处理通过代理执行的调用挂起的情况。例如,我有这段代码:

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/

的免费代理列表

有时候everythig工作,我正在收到我要求的页面。但有时我会得到一个空白的firefox页面(我可以看到网站的某些元素正在加载,例如css),这个过程会持续很长时间。例如。即使在等待10分钟后,会话仍未关闭。我想询问是否有办法,如果例如页面没有加载一段时间则自动关闭浏览器,或者例如我正在执行的测试停止执行(由于某些与代理相关的原因)

2 个答案:

答案 0 :(得分:0)

在java中我们有:

    webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

来自doc:

  

pageLoadTimeout

     

WebDriver.Timeouts pageLoadTimeout(很长一段时间,                                    java.util.concurrent.TimeUnit unit)

     

设置之前等待页面加载完成的时间   抛出一个错误。如果超时为负,则可以加载页面   无限期的。

     

参数:       time - 超时值。       unit - 时间单位。返回:       超时界面。

快速Google搜索显示:

webDriver.set_page_load_timeout(30)

用于Python。请在try-catch(或您的情况下为try-except)中尝试此操作

答案 1 :(得分:0)

使用队列或其他活动运行时对象(即/ weblistener)实现心跳系统。如果您知道整个站点脚本的最大运行时间,则可以使用类似SE-Grid的功能。

如果您在网站上有可变的时间,并且只担心初始加载时间,那么心跳系统是我能想到的唯一方式。