在生产中运行像Watir这样的慢速Web驱动程序

时间:2017-09-14 07:02:43

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

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

现在它100%完全是在我刚刚在irb中执行的ruby类中编写的,但是我想把它放到Rails应用程序中并将它放到网上。我没有找到关于使用像Capybara或Watir这样的东西进行测试以外的任何其他信息。这是因为它们有多慢还是能力问题?

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

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

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

3 个答案:

答案 0 :(得分:1)

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

对于你正在考虑的事情,你应该问问自己,你是否正在使用套筒扳手作为锤子,如果你可以使用更好的工具。

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

您还应该检查您正在与之互动的网站的服务条款(如果您不拥有它们),以确保不会禁止使用“机器人”。或其他自动化方式来访问该网站。如果是这样,那么如果您的访问模式显然是自动化过程的结果,那么以您提议的方式使用Watir可能最终会导致您被禁止访问该网站。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果您发现自己必须使用Watir,那么最好的方法是使用它来渲染页面(例如在javascript的无头模式下),保存它然后使用Nokogiri来处理它。很多人不建议使用Apis而且不能找到刮刮的用途,但有时是必要的并且完全合法(你甚至可能正在抓取自己的数据)。 Apis不是一个普遍的选择。

其次,您应该将其用于后台工作。如果您有最终用户(并且您真的不应该有很多并发用户),许多服务会告知客户数据将在几小时到几天内提供