Net::HTTPNotFound for https://dashboard.stripe.com/login -- 未处理的响应
Net::HTTPNotFound for https://dashboard.stripe.com/login -- unhandled response
我们需要检索特定时间段内 Stripe 实例的日志访问权限。那里没有端点 API (grrrr) 所以我们正在尝试快速抓取屏幕,因为仪表板很好地构建了它们。
此时我什至无法使用 Mechanize 登录 Stripe。下面是我用来登录的代码
require 'mechanize'
agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari'
agent.follow_meta_refresh = true
starting_link = 'https://dashboard.stripe.com/login'
page = agent.get(starting_link)
login_form = page.form
login_form.email = email
login_form.password = pass
new_page = agent.submit(login_form, login_form.buttons[0])
我从 运行 得到的回复是:
Mechanize::ResponseCodeError: 404 => Net::HTTPNotFound for https://dashboard.stripe.com/login -- unhandled response
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize/http/agent.rb:316:in `fetch'
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize.rb:1323:in `post_form'
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize.rb:584:in `submit'
from (irb):21
from /Users/Nicholas/.rvm/rubies/ruby-2.2.2/bin/irb:11:in `<main>'
我尝试登录其他几个网站并成功。我还给代理起了别名并处理了重定向(其他问题中提到的策略)。
有谁知道可以对 Mechanize 登录 Stripe 进行哪些调整?
非常感谢
简答:
我建议使用像 Selenium 这样的浏览器引擎来获取日志数据,因为那样会简单得多。
长答案:
虽然您的 mechanize
表单提交代码是正确的,但假设 Stripe
登录表单是使用正常的 POST
请求提交的,但事实并非如此。
正在使用 AJAX
请求提交 Stripe
登录表单。
这是考虑到这一点的工作代码:
require 'mechanize'
agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari'
agent.follow_meta_refresh = true
starting_link = 'https://dashboard.stripe.com/login'
page = agent.get(starting_link)
login_form = page.form
login_form.action = 'https://dashboard.stripe.com/ajax/sessions'
login_form.email = email
login_form.password = password
new_page = agent.submit(login_form, login_form.buttons[0])
如您所见,只需将表单的操作 属性 设置为 AJAX
url 即可解决您的问题。
但是,一旦您成功登录,就无法使用 mechanize
在站点中导航以抓取日志,因为它不支持 javascript
。您可以通过请求仪表板的 url 来检查。您将收到启用 javascript
.
的错误消息
此外,Stripe 的仪表板已完全 javascript
供电。它只是发出 AJAX
请求从服务器获取数据,然后将其呈现为 HTML
.
这对您有用,因为服务器响应是 JSON
。您可以简单地解析它并从日志中获取所需的信息。
经过进一步检查(在 Chrome 开发人员工具中),我发现日志是从 url https://dashboard.stripe.com/ajax/logs?count=5&include%5B%5D=total_count&limit=10&method=not_get
请求的
同样,如果您尝试使用 mechanize
访问此 url,您将 运行 陷入 CSRF
令牌问题,该问题由 Stripe
.
CSRF
令牌问题可以使用 mechanize
cookie 解决,但不值得付出努力。
我建议使用像 Selenium 这样的浏览器引擎来获取日志数据,因为那样会简单得多。
我们需要检索特定时间段内 Stripe 实例的日志访问权限。那里没有端点 API (grrrr) 所以我们正在尝试快速抓取屏幕,因为仪表板很好地构建了它们。
此时我什至无法使用 Mechanize 登录 Stripe。下面是我用来登录的代码
require 'mechanize'
agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari'
agent.follow_meta_refresh = true
starting_link = 'https://dashboard.stripe.com/login'
page = agent.get(starting_link)
login_form = page.form
login_form.email = email
login_form.password = pass
new_page = agent.submit(login_form, login_form.buttons[0])
我从 运行 得到的回复是:
Mechanize::ResponseCodeError: 404 => Net::HTTPNotFound for https://dashboard.stripe.com/login -- unhandled response
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize/http/agent.rb:316:in `fetch'
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize.rb:1323:in `post_form'
from /Users/Nicholas/.rvm/gems/ruby-2.2.2/gems/mechanize-2.7.4/lib/mechanize.rb:584:in `submit'
from (irb):21
from /Users/Nicholas/.rvm/rubies/ruby-2.2.2/bin/irb:11:in `<main>'
我尝试登录其他几个网站并成功。我还给代理起了别名并处理了重定向(其他问题中提到的策略)。
有谁知道可以对 Mechanize 登录 Stripe 进行哪些调整?
非常感谢
简答:
我建议使用像 Selenium 这样的浏览器引擎来获取日志数据,因为那样会简单得多。
长答案:
虽然您的 mechanize
表单提交代码是正确的,但假设 Stripe
登录表单是使用正常的 POST
请求提交的,但事实并非如此。
正在使用 AJAX
请求提交 Stripe
登录表单。
这是考虑到这一点的工作代码:
require 'mechanize'
agent = Mechanize.new
agent.user_agent_alias = 'Mac Safari'
agent.follow_meta_refresh = true
starting_link = 'https://dashboard.stripe.com/login'
page = agent.get(starting_link)
login_form = page.form
login_form.action = 'https://dashboard.stripe.com/ajax/sessions'
login_form.email = email
login_form.password = password
new_page = agent.submit(login_form, login_form.buttons[0])
如您所见,只需将表单的操作 属性 设置为 AJAX
url 即可解决您的问题。
但是,一旦您成功登录,就无法使用 mechanize
在站点中导航以抓取日志,因为它不支持 javascript
。您可以通过请求仪表板的 url 来检查。您将收到启用 javascript
.
此外,Stripe 的仪表板已完全 javascript
供电。它只是发出 AJAX
请求从服务器获取数据,然后将其呈现为 HTML
.
这对您有用,因为服务器响应是 JSON
。您可以简单地解析它并从日志中获取所需的信息。
经过进一步检查(在 Chrome 开发人员工具中),我发现日志是从 url https://dashboard.stripe.com/ajax/logs?count=5&include%5B%5D=total_count&limit=10&method=not_get
同样,如果您尝试使用 mechanize
访问此 url,您将 运行 陷入 CSRF
令牌问题,该问题由 Stripe
.
CSRF
令牌问题可以使用 mechanize
cookie 解决,但不值得付出努力。
我建议使用像 Selenium 这样的浏览器引擎来获取日志数据,因为那样会简单得多。