【问题标题】:python: Selenium webdriver and hanging proxy issuepython:Selenium webdriver和挂起代理问题
【发布时间】:2014-03-06 11:42:03
【问题描述】:

我试图了解如何处理通过代理执行的呼叫挂起的情况。例如我有这个代码:

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 页面(我可以看到正在加载网站的一些元素,例如 css),并且这个过程会持续很长时间。例如。即使经过 10 分钟的等待时间,会话也不会关闭。我想问一下是否有一种方法可以自动关闭浏览器,例如如果页面没有加载一段时间,或者例如我正在执行的测试停止执行(由于某些与代理相关的原因)

【问题讨论】:

  • 也许有些代理服务器很慢?
  • 嗯,它很慢,而且有点。但想法是 Selenium 需要在这种情况下断开连接(我的意思是关闭会话)

标签: python selenium proxy


【解决方案1】:

在java中我们有:

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

来自文档:

页面加载超时

WebDriver.Timeouts pageLoadTimeout(长时间, java.util.concurrent.TimeUnit 单位)

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

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

快速谷歌搜索显示:

webDriver.set_page_load_timeout(30)

对于 Python。在try-catch(或try-except,在你的情况下)试试这个

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 尝试提供详细且记录在案的答案。这种建议被认为是评论而不是答案。
    • 我建议使用它而不是保留它。希望您能从 SO 社区获得帮助和帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2013-07-23
    • 2016-01-08
    • 2012-07-19
    相关资源
    最近更新 更多