Ruby登录使用mechanize进行spotify

问题描述 投票:0回答:2

我正在创建一个需要spotify登录的脚本,我有这个代码:

require 'mechanize'

mechanize = Mechanize.new

page = mechanize.get('https://accounts.spotify.com/en/login')

form = page.forms.first

form['username'] = 'username'
form['password'] = 'password'

page = form.submit

这段代码给我留下了这个错误:

:in `<top (required)>': undefined method `[]=' for nil:NilClass (NoMethodError)

但是,如果我在Facebook上尝试相同的代码(当然要查找名称),或者我尝试过的任何其他网站,我都没有错误。这可能与spotifys形式没有post方法有关吗?我不太熟悉这种东西,并且将不胜感激!

ruby login mechanize spotify
2个回答
1
投票

查看页面正文(page.body),你会看到它是空的。

这是因为该页面的主体(包括表单)是通过javascript(Angular)呈现的。

由于Mechanize无法处理javascript,您需要另一种解决方案。退房:How do I use Mechanize to process JavaScript?


0
投票

你试图在一个不理解该方法的对象上调用[]=方法,特别是,你试图在对象nil上调用它,这是一个代表缺少某些东西的对象。

您可以在两个地方调用[]=方法,在第9行和第10行,两次都在同一个对象上,即在变量form引用的对象上。所以,你的问题是form由于某种原因是nil

form来自哪里?它在第7行分配给在first对象的forms访问器上调用page方法的结果。 Ergo,由于某种原因,first返回nil

并且很容易理解为什么:您链接到的页面没有表单,因此它显然也没有第一个表单。

你会得到错误,因为你希望有一个没有任何形式的表格。

© www.soinside.com 2019 - 2024. All rights reserved.