我们需要在特定时间内检索对Stripe实例的日志的访问。那里没有端点API (grrrr),所以我们正在尝试快速的屏幕抓取,因为仪表板很好地构造了它们。
不过,在这一点上,我甚至无法使用机械登录到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>'我试着登录到其他几个站点,并取得了成功。我还对代理进行了化名,并处理了重定向(其他问题中提到的策略)。
有谁知道可以做什么调整来使日志机械化进入条纹呢?
非常感谢
发布于 2016-02-21 09:52:35
简短回答:
我建议使用像Selenium这样的浏览器引擎来获取日志数据,因为这样做要简单得多。
长答案:
尽管您的mechanize表单提交代码是正确的,但假设Stripe登录表单是使用正常的POST请求提交的,但情况并非如此。
Stripe登录表单是使用AJAX请求提交的。
以下是考虑到这一点的工作代码:
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这样的浏览器引擎来获取日志数据,因为这样会简单得多。
https://stackoverflow.com/questions/35532932
复制相似问题