ruby-on-rails - 为什么 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 天更新一次代码!
非常感谢!
解决方案
推荐阅读
- c# - Unity Collider - Box Collider 和 Mesh Renderer 在碰撞后移动
- paypal - PayPal next_billing_time 总是返回 10:00:00Z
- arrays - 如何在数组 Golang 中找到不重复的项目
- javascript - 如何使用 JavaScript 将作为数组的字符串转换为数组
- terraform - 当 Terraform 模板中的元组为空时,如何获取默认值?
- excel - 停止宏以在导入的数据中添加标题(标题必须手动添加,因为每次都有不同的库号)
- mongodb - MongoDB findOneAndUpdate 嵌套对象
- json - 如何使用组合从 SwiftUI 中的 URL 解析单个 JSON 对象?
- sql - SQL 重新排列行
- pynamodb - JSON 表示 PynamoDB 实例