【问题标题】:Running slow web drivers like Watir in production在生产环境中运行像 Watir 这样的慢速 Web 驱动程序
【发布时间】:2018-11-29 13:53:40
【问题描述】:

我创建了一个应用程序,它使用 Watir 自动登录并在站点内执行一些功能。

现在它是 100% 纯粹用我在 irb 中执行的 ruby​​ 类编写的,但我想把它放到 Rails 应用程序中并放到网上。除了测试之外,我还没有找到很多关于使用 Capybara 或 Watir 之类的东西的信息。这是因为它们的速度有多慢还是功能问题?

我能否运行一个后台进程,用 Watir 打开浏览器并为生产中的每个用户执行一些功能?

我的另一个问题是如何让会话保持更长的时间。我的应用程序登录有两个需要 2FA 的网站。如果我想使用 Watir 浏览器每小时登录并执行一次功能,我可以将其创建为后台进程(如果可行的话)。但是当进程完成时,浏览器会关闭,当后台进程在一小时内再次运行时,它需要再次进行 2FA。

我的另一个担心是速度。如果我有 50 个用户都需要同时运行 Watir 浏览器,我想这会很慢。只要他们运行并收集数据并执行我们需要的少数操作,我并不担心速度,但它会如何影响应用程序的完整性。

【问题讨论】:

  • 使用 API 比自动浏览器更快、更可靠。抛开速度问题不谈,如果你正在抓取的网站突然改变了他们的标记会发生什么?所以我想说,除非绝对必要,否则不要将自动浏览器作为面向用户的应用的核心部分。
  • 两个站点 API 之一是不可能的。我可能会将抓取工具更改为 API,但不幸的是,我的应用程序的主要功能需要自动浏览器。
  • 任何需要浏览器的地方,都可以使用 HTTP 库

标签: ruby-on-rails ruby watir watir-webdriver


【解决方案1】:

WATIR 专门设计为一种测试工具。WATIR 代表 Ruby 中的 Web 应用程序测试。它的设计以用户的方式与浏览器交互为中心,有效地模拟了用户在使用网站时会采取的相同操作。对于其他任务来说,这将是次优的,这是可以预料的。由于抓取和测试的活动非常相似,因此有很多人使用 watir 来完成该任务,但它并不是为此目的而设计的,而且 WATIR 开发人员不太可能添加特定于数据抓取和测试的功能。

对于您正在考虑的事情,您应该问问自己,您所做的是否相当于将套筒扳手用作锤子,以及是否有更好的工具可以使用。

如果您与之交互的站点支持 API,那么这将是与它们交互的首选方式,以从站点获取信息。如果不支持,您可能需要考虑查看其他可以让您请求站点 HTML 或直接解析 HTML 的 gem(例如 Nokogiri)

您还应检查与您互动的网站的服务条款(如果您不拥有这些网站),以确保没有禁止使用“机器人”或其他自动方式访问该网站的禁令。如果是这样,那么如果您的访问模式显然是自动化过程的结果,那么按照您建议的方式使用 Watir 最终可能会禁止您访问该站点。

【讨论】:

  • Nokogiri 是我的第一个 goto。我使用它的网站非常繁重,我使用过的唯一爬虫是 Nokogiri 和 Mechanize,两者都被排除在外。我用 Watir 创建了我的原创,因为它是我认为我只会使用一次的东西的简单解决方案。既然将其投入生产的想法,我意识到这远不是最佳解决方案。我已经拆开了一半的应用程序以尽可能使用 API,但其中两个必须是自动化的。有没有读 JS 的 Nokogiri 的替代品?
  • 我认为它需要读取和执行JS,我不知道这样的野兽。执行 JS 代码主要限于浏览器和 NODE 之类的东西。即使这样,我也很确定 Node 不会像浏览器那样执行 JS,不完全是。
【解决方案2】:

这实际上比人们想象的更频繁。也许不是专门针对 Watir,而是在工作中运行浏览器自动化任务。作业应该排队并异步运行,最好在与您的主 Web 应用程序不同的进程中。

我在这里写过这个策略:https://blogstephenarifin.wordpress.com/2018/08/23/integrating-a-third-party-without-an-api-using-rails-5-and-heroku/

【讨论】:

    【解决方案3】:

    如果您发现自己必须使用 Watir,那么最好的方法是使用它来呈现页面(例如在 javascript 的无头模式下),保存它,然后使用 Nokogiri 来处理它。很多人建议使用 API,他们不知道也无法找到用于抓取的用途,但有时是必要且完全合法的(您甚至可能正在抓取自己的数据)。 API 不是通用选项。

    其次,您可能应该将其用于后台作业。如果您有最终用户(而且您真的不应该同时拥有很多用户),许多服务会通知客户数据将在几小时到几天内可用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      相关资源
      最近更新 更多