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环境并运行scraper脚本。

由于您在单独的进程中运行每个任务,因此它们之间应该没有冲突,这将导致假设您在尝试打开多个rails应用程序和浏览器实例时遇到资源(内存或cpu)限制。这些可能会导致浏览器无法打开,或者它们可能只是减慢了事情的速度,以至于你看到由于脚本没有被干净地处理而导致的片状/失败行为。

最新更新