Ruby登录使用mechanize进行spotify

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby登录使用mechanize进行spotify相关的知识,希望对你有一定的参考价值。

我正在创建一个需要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方法有关吗?我不太熟悉这种东西,并且将不胜感激!

答案

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

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

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

另一答案

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

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

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

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

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

以上是关于Ruby登录使用mechanize进行spotify的主要内容,如果未能解决你的问题,请参考以下文章

ruby 使用CLI的Magento DB修复工具 - Ruby + Mechanize

ruby 使用Mechanize的Hacky爬虫

Ruby用百度搜索爬虫

ruby 使用docs提供的代码测试Mechanize gem

如何使用python和mechanize登录网站

如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作?