【问题标题】:Capybara + Selenium + Web scraping - parallel requests failCapybara + Selenium + Web 抓取 - 并行请求失败
【发布时间】:2021-01-21 17:11:43
【问题描述】:

我使用 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 环境并运行爬虫脚本。

【问题讨论】:

  • 你是如何创建并行会话的?
  • 另外——假设你使用的是最近的 selenium-webdriver,你应该能够调用driver.browser.execute_cdp ... 而不必处理bridge——尽管只是调用driver.browser.download_path = DownloadHelpers.getpath) 可能会做同样的事情东西
  • @ThomasWalpole,更新了问题的答案。

标签: selenium selenium-webdriver selenium-chromedriver capybara


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多