- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我用 Python 编写了一个脚本,它遍历一长串网页并收集数据,使用 Selenium 和 PhantomJS 作为 webdriver(因为我在运行 Linux 的远程终端机器上运行它,并且需要使用 headless浏览器)。对于短期工作,例如它必须迭代几页,没有问题。但是,对于较长的作业,它必须遍历更长的页面列表,每次加载新页面时,我都会看到内存使用量随着时间的推移急剧增加。最终在大约 20 个奇数页之后,脚本由于内存溢出而被终止。
这是我初始化浏览器的方式 -
from selenium import webdriver
url = 'http://someurl.com/'
browser = webdriver.PhantomJS()
browser.get(url)
该页面有下一个按钮,我通过查找“下一步 >”按钮的 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 驱动程序时,它在我的本地机器上运行没有任何问题,但应该注意我的本地机器比远程服务器有更多的内存。
如果缺少任何重要信息,我深表歉意。请随时告诉我如何使我的问题更全面。
最佳答案
如果 Headless 浏览器适合您,我想推荐一个解决方案来帮助我解决类似的内存问题。使用 AWS Lamda作为您的服务器,使用并行执行库 xdist和宾果游戏你永远不会遇到内存问题,因为 Lamada 是托管服务,确保将捕获的数据上传到 S3 并清理 lamda 上的临时目录。 (我已经在我的一个项目中实现了它,并且效果很好)
关于python - 使用 PhantomJS 的 Selenium 内存使用失控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42356709/
我正在尝试根据空白(空格、返回键、制表符)解析字符串(有些可能很长、段落)。当前使用String.split("\\s++")。在我们更新的上一个项目中,我们只是使用了StringTokenizer。
我在过去可以工作的 Oracle 10 SQL 中有一个分层查询。但是,我删除了它所基于的物化 View ,现在我无法让它正确显示,甚至完全离开了那个 View 。 原始查询如下所示: select
下面的代码有效。该代码调用 API 来获取历史交易(每次拉取 100 笔交易)。因为存在限制 - 允许调用 API 的次数和频率 - 结构类似于递归。 流程如下: 获取当前的 MAX tradeId
.inDB { background-color: #53354A; color: #53354A; padding: 2% 3%; height: 100px; width: 1
echo ''.$result['title'].' '.$result['description'].''; 为什么 .post
我正在使用 Gzip 压缩和 Zlib 压缩来加速我的网站 我使用了下面的代码 ob_start("ob_gzhandler");在包含在所有页面上的公共(public)文件中, lib.output
我是一名优秀的程序员,十分优秀!