例如,在以下代码中打开浏览器,并在手册中登录到Google.

require "bundler/inline"

gemfile do
  source "https://rubygems.org"
  gem "webdrivers"
  gem "capybara", require: "capybara/dsl"
end

Capybara.current_driver = :selenium_chrome

Capybara.visit("https://www.google.co.jp/")
gets

但是,如果我再次执行它,登录状态将被取消,如果是2FA,则非常麻烦.

有什么好办法吗?

推荐答案

Capybara被设计为一个测试框架,而不是一个web抓取框架(尽管有些人使用if).因此,测试应该相互隔离,而水豚会做一些工作来确保这一点.这意味着在每个测试中,如果该测试有必要,您需要重新进行身份验证,最好使用被测试应用程序正在使用的任何身份验证库的测试模式来处理.

如果您使用Capybara进行web抓取,您可以考虑配置selenium驱动程序以使用特定的用户配置文件,以便保存和重用cookie.您可能还需要重写Capybaras会话#reset方法以防止Cookie被清除,但Capybara实际上并不是为该用例而设计的.

Ruby相关问答推荐

如何通过语法将Ruby Sorbet签名突出显示为不强调的 comments ?

我可以在 Ruby 的 heredoc 中访问变量吗?

如何使用 Ruby 删除字符串中某个字符后的子字符串?

在 MacOS Sierra 上使用 RMagick 2.16 的 ImageMagick 7 找不到 MagickWand.h

为 Ruby 模块中的每个方法调用执行代码

用mustache迭代数组

如何声明 RSpec 中示例之间共享的变量?

Ruby:获取不带扩展名的文件名

Vagrant - 如何拥有特定于主机平台的配置步骤

在 jekyll 博客中支持标签的简单方法

Ruby 'require' 语句是在类定义的内部还是外部?

Ruby 中的 $1 和 \1

`respond_to?` 与 `respond_to_missing?`

Ruby 的所有/最佳列表?

在Ruby中实现平等的正确方法是什么

我可以使用 `else if` 而不是 `elsif` 吗?

to_proc 方法是什么意思?

是否可以使用 Ruby 读取文件的修改日期?

如何在 jekyll markdown 博客中包含视频

如何在 Ruby 中实现回调?