如何解决Capybara + Selenium + Web 抓取 - 并行请求失败
我使用 Capybara + ChromeDriver Selenium 来抓取网页。 在请求期间,主要目标是下载 csv 文件。 请求大约需要 15-20 秒。
当我同时运行 2 个请求时 - 它运行良好 3、4、5 等并行请求失败 - 文件似乎没有被下载。
这里有什么问题? 这是我的配置。
谢谢!
require 'csv'
require 'capybara'
require 'capybara/dsl'
class Scraper
include Capybara::DSL
Capybara.default_driver = :selenium
Capybara.register_driver :selenium do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-popup-blocking')
options.add_argument('--window-size=1920,1268')
options.add_preference(:download,directory_upgrade: true,prompt_for_download: false,default_directory: DownloadHelpers.getpath)
options.add_preference(:browser,set_download_behavior: { behavior: 'allow' })
driver = Capybara::Selenium::Driver.new(app,browser: :chrome,options: options)
bridge = driver.browser.send(:bridge)
path = '/session/:session_id/chromium/send_command'
path[':session_id'] = bridge.session_id
bridge.http.call(:post,path,cmd: 'Page.setDownloadBehavior',params: {
behavior: 'allow',downloadPath: DownloadHelpers.getpath
}
)
driver
end
Capybara.default_driver = :selenium
Capybara.javascript_driver = :selenium
end
更新
我如何运行任务 - 通过 rake 任务。
Scraper 位于 rails lib 文件夹内。 每个请求都通过 rake 任务调用,即初始化 rails 环境并运行抓取脚本。
解决方法
由于您在单独的进程中运行每个任务,因此它们之间应该没有冲突,这会导致您在尝试打开多个 Rails 应用程序时遇到资源(内存或 CPU)限制的假设和浏览器实例。这些可能会导致浏览器无法打开,或者它们可能只是减慢了速度,以至于您看到由于您的脚本没有编写干净来处理这种情况而导致不稳定/失败的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。