0

我正在使用 Ruby 和 Mechanize GEM 来登录 TDAmeritrade 的网站。

我尝试执行:page = agent.get('https://invest.ameritrade.com/grid/p/login')它返回 page.forms 如下:

2.0.0-p0 :049 > page.forms
=> [#<Mechanize::Form
{name nil}
{method "POST"}
{action "https://invest.ameritrade.com/grid/p/login"}
{fields
[hidden:0x5b6684a type: hidden name: mAction value: submit]
[hidden:0x5b665a2 type: hidden name: fp_browser value: ]
[hidden:0x5b66386 type: hidden name: fp_screen value: ]
[hidden:0x5b661e2 type: hidden name: fp_software value: ]
[hidden:0x5b6f36e type: hidden name: fp_timezone value: ]
[hidden:0x5b6ffb2 type: hidden name: fp_language value: ]
[hidden:0x5b6fe5e type: hidden name: fp_java value: ]
[hidden:0x5b6fcc4 type: hidden name: fp_cookie value: ]
[hidden:0x5b6fbfc type: hidden name: flashVersion value: ]
[selectlist:0x5b6f756 type: name: ldl value: main:home]}
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons [button:0x5b6eafe type: submit name: value: ]}>
]

如您所见,即使可以在浏览器中的网站上看到用户名和密码字段,也不会显示它们。如何使用 Mechanize GEM ( http://mechanize.rubyforge.org/ )使用我的 Ruby 脚本登录 TDAmeritrade ?

提前致谢。

4

2 回答 2

1

对于通过 POST 请求登录的站点,您可以在 Firebug 之类的东西中手动捕获 XHR 并将其复制到您的代码中。

例如,您列出的站点有一堆隐藏字段,这些字段会在提交用户名和密码时添加。幸运的是,您可以将哈希传递给 Mechanize::Agent 上的 POST 请求调用。

@agent.post(" https://invest.ameritrade.com/grid/p/login ", {"tbPassword" => yourPass, "tbUsername" => yourUsername})

当然,您还需要添加其他字段。

来自 Firebug 的示例 POST XHR 用于您的示例站点

flashVersion    11.9.900
fp_browser  mozilla/5.0 (macintosh; intel mac os x 10.8; rv:24.0) gecko/20100101 firefox/24.0|5.0 (Macintosh)|MacIntel
fp_cookie   1
fp_java 1
fp_language lang=en-US|syslang=|userlang=
fp_screen   24|2560|1440|1440
fp_software 
fp_timezone -4
ldl main:home
mAction submit
tbPassword  yourPassword
tbUsername  yourUsername
于 2013-10-29T17:45:39.953 回答
0

您可能会在实现 javascript 的不同站点上遇到机械化问题。您可能想尝试使用watir-webdriver,或者如果它是一个使用大量 javascript 的网站,您最好使用phantomjs

于 2014-02-28T07:08:40.233 回答