使用selenium webdriver限制phantomjs的内存使用?

时间:2013-05-22 04:29:02

标签: python selenium-webdriver phantomjs

我正在使用phantomjs --webdriver 8910在Remote WebDriver模式下运行phantomjs,然后使用Selenium python绑定获取许多页面,例如:

wd = webdriver.PhantomJS(port=8910)
for url in big_url_list:
    wd.get(url)
    # do something here, e.g. wd.save_screenshot or print wd.page_source
    wd.quit()

wd.quit()似乎无能为力。使用top监视进程表明,当检索到更多页面时,phantomjs进程的内存使用量会继续增加。如果我重新启动phantomjs进程,那么内存使用率会下降并开始再次稳定攀升。

close method mentioned in the phantomjs docs听起来很有希望,但我认为没有办法通过WebDriver protocol来调用它。

是否有(i)在发出许多请求时保持phantomjs的内存使用率下降的方法,或者(ii)监视和定期重启phantomjs进程的可靠方法,以便内存永远不会失控?

2 个答案:

答案 0 :(得分:1)

This SO question建议使用已被弃用的release,以支持close。好像是python webdriver API exposes the close method

答案 1 :(得分:1)

只有在关闭WebDriver会话时,才能通过Ghostdriver调用PhantomJS网页关闭方法。 当达到内存限制时,您可以尝试使用runit重新启动PhantomJS。按如下方式创建bash脚本:

#!/bin/sh
exec 2>&1
exec chpst -u your_user -m 104857600 /usr/bin/phantomjs --webdriver=8910

-m标志将内存限制设置为100MB。

将上面的脚本放在一个名为“run”的空目录下:

 |
 `-phantomjs-runit-+
                   `-run

现在你可以开始使用phantomjs

sv start ./phantomjs-runit/