【问题标题】:Selenium loop script using too much ram, eventually crashing ChromeSelenium 循环脚本使用太多 ram,最终导致 Chrome 崩溃
【发布时间】:2021-06-07 19:04:52
【问题描述】:

我有一个非常大的 URL 列表,我正在尝试抓取,我正在使用 for 循环遍历每个 URL。

最终,在列表的 x 元素中,我的 Chrome 窗口将崩溃(浏览器窗口上出现“Aw Snap!”错误)。我不知道如何解决这个问题。

我不能分享我的代码,但是是这样的:

very_large_url_list = [url1, url2, url3, url4...]

for x in very_large_url_list:
    driver.get(x)
    doStuff()

如果我尝试在每次迭代时关闭驱动程序,如下所示:

for x in very_large_url_list:
    driver.get(x)
    doStuff()
    driver.close()

我会收到一条错误消息,指出会话 ID 无效。如果我不关闭它,那么最终会发生内存泄漏,我将无法完成对列表的迭代。我可以做些什么来解决这个问题?

如果我不够清楚,请告诉我,以便我可以编辑问题!

【问题讨论】:

  • 你试过 driver.navigate() 吗?而不是得到?
  • pastebin.com/EDU67gY2 这是列表,底部是我用来获取链接的字符串格式。就我而言,Webdriver 没有看到名为“导航”的属性
  • @JainilPatel 这些在 python webdriver 中没有 .navigate() 这样的方法。
  • 抱歉我的最后一条评论,这是我用于此问题的列表以及 for 循环 pastebin.com/6j5CxvrU

标签: python selenium


【解决方案1】:

如果您尝试在每次迭代时关闭驱动程序,您不应该这样做吗?

for x in very_large_url_list:
    driver = webdriver.Chrome()
    driver.get(x)
    doStuff()
    driver.close()

【讨论】:

  • 驱动是在for循环外定义的。如果我在循环中使用 driver.close,在下一次迭代中,我会收到以下错误:selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id 因为在 WebDriver 为 .close()
  • 你的传奇。这解决了我的问题,关闭窗口可以防止内存泄漏。您能否向我解释为什么在 for 循环之外定义 WebDriver 时我不能 .close() WebDriver?我似乎没有抓住逻辑
  • 呃。如果您关闭 WebDriver,则它已关闭。您需要重新打开它才能再次使用它。
  • 当然,即使它在 for 循环之外定义,它也不应该工作。编辑:是的,我现在明白了。我发誓我不傻
  • 或者更好的是,让脚本数据驱动,并行运行,速度快 X 倍。
【解决方案2】:

您知道我们也可以在不使用任何浏览器的情况下打开 URL 吗?这也是经常被问到的面试问题。学习一下吧。

让我们先执行一些步骤:

  1. 打开浏览器。
  2. 按 F12。
  3. 切换到控制台选项卡。
  4. 输入 window.location='https://www.redbus.in' 并按 Enter 键。

您会注意到 redbus 网站已加载。

这是一种不使用get()navigate() 等方法的URL 加载方式。上面的语句称为 JavaScript 命令。我们稍后会看到 JavaScript 的概念。

【讨论】:

  • 我建议您在磁盘上使用尽可能多的可用虚拟内存,将虚拟内存更改为已满。
  • 你有多少内存?我有 8 GB。
  • 我确信只要遍历列表就可以正常工作。我的内存泄漏是由于我的示例中的 doStuff() 而发生的。而且我必须使用 doStuff(),这就是我的脚本的重点。我有 12 GB 的 RAM。
  • 您没有提供 dostuff()。好的尝试将所有内容写入文件而不是存储在变量名中,在 for 循环之外使用 AS MANY GLOBAL 变量。
  • for循环中的变量被创建了很多次,占用了更多的空间。
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
相关资源
最近更新 更多