首页 > 解决方案 > 为什么 Chrome 驱动程序崩溃或元素不在 Cron 作业中?

问题描述

我使用 watir/mechanize 和 chrome 驱动程序创建了一个刮刀,它在开发中完美运行。它在生产中不起作用,chrome 驱动程序崩溃了,所以我不得不在我的刮板开头添加这些行(在 stackoverflow 的另一个主题上找到它们)

 args = %w[--disable-infobars --disable-dev-shm-usage --headless --no- 
 sandbox --disable-gpu]
    options = {
     binary: ENV['GOOGLE_CHROME_BIN'],
     prefs: { password_manager_enable: false, 
     credentials_enable_service: false },
     args:  args
  }
  browser = Watir::Browser.new(:chrome, options: options)

它现在在生产中运行良好,即使是我的后台作业(我基本上通过单击按钮触发正在抓取的后台作业)。

我还有另一个后台工作,这次是一个 Cron 工作,它每两周自动刮一次。但由于某种原因,这个不起作用。在添加上述所有行之前,我收到了相同的错误消息

 Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed 
  to start: crashed (unknown error: DevToolsActivePort file doesn't 
exist) 
 (The process started from chrome location /app/.apt/o...)

有时我没有收到此错误消息,并且刮板从 Cron 作业开始(无需我进行任何更改),但它无法找到我想要的元素(而它每次都与其他后台作业一起工作,而不是使用 Cron 和它是完全相同的内容)

您知道为什么当我使用 Cron 作业时会有不同的行为吗?如果我到处都有相同的错误,我会理解,但我不明白为什么只有在我使用 Cron 时它才会崩溃或难以找到我的元素。最后一个问题:为什么我的错误一直在变化?通常,我会修复一些东西并且它可以工作很长时间,但是使用 Selenium/ChromeDriver 似乎我必须每 3 天更新一次代码!

非常感谢!

标签: ruby-on-railsseleniumcronselenium-chromedriverwatir

解决方案


推荐阅读