Python:Selenium webdriver与挂起代理问题

1 投票
2 回答
1944 浏览
提问于 2025-04-17 21:06

我正在尝试理解如何处理通过代理进行的请求出现挂起的情况。比如,我有以下这段代码:

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)中尝试这个。

撰写回答