使用PhantomJS与Selenium一起使用失控内存

时间:2017-02-21 00:42:49

标签: python linux selenium amazon-ec2 phantomjs

我已经用Python编写了一个脚本,它迭代了很长的网页列表并收集数据,使用Selenium和PhantomJS作为webdriver(因为我在运行Linux的远程终端机器上运行它,需要使用无头浏览器)。对于短期工作,例如它必须迭代几页,没有问题。但是,对于较长的作业,它必须遍历更长的页面列表,我看到每次加载新页面时内存使用量会随着时间的推移而显着增加。最终在大约20多页之后,脚本因内存溢出而被终止。

以下是我初始化浏览器的方法 -

from selenium import webdriver

url = 'http://someurl.com/'
browser = webdriver.PhantomJS()
browser.get(url)

页面有下一个按钮,我通过找到'Next>'的xpath遍历页面按钮 -

next_xpath = "//*[contains(text(), 'Next >')]"
next_link  = browser.find_element_by_xpath(next_xpath)
next_link.click()

我已尝试通过以下方式清除PhantomJS浏览器的Cookie和缓存 -

browser.get('javascript:localStorage.clear();')
browser.get('javascript:sessionStorage.clear();')
browser.delete_all_cookies()

但是这些都没有对内存使用产生任何影响。当我使用Firefox驱动程序时,在我的本地计算机上它没有任何问题,但应该注意我的本地计算机比远程服务器有更多的内存。

如果遗漏任何重要信息,我道歉。请随时告诉我如何使我的问题更全面。

1 个答案:

答案 0 :(得分:0)

如果Headless浏览器为您工作,那么我想提出一个解决方案,该解决方案可以帮助我解决类似的内存问题。 使用AWS Lamda作为服务器,使用并行执行库xdist和bingo,因为Lamada是托管服务,因此永远不会遇到内存问题,请确保将捕获的数据上传到S3并清理lamda上的temp目录。 (我已经在我的一个项目中实现了它,并且像一个吊饰一样工作)