0

Mechanize GEM で Ruby を使用して、TDAmeritrade の Web サイトにログインしています。

次のように実行しようとする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: ]}>
]

ご覧のとおり、ユーザー名とパスワードのフィールドは、ブラウザーで Web サイトに表示できますが、どちらも表示されません。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 を実装しているさまざまなサイトで mechanize を使用すると、問題が発生する可能性があります。watir-webdriverを使用してみるか、javascript を多く使用するサイトの場合は、 phantomjsを使用することをお勧めします。

于 2014-02-28T07:08:40.233 に答える