誰もが、再びこの問題に遭遇する場合には、私は解決策を見つけた:
トリックは、適切なページにBrowser.submit()
にMechanize、および一連の呼び出しを使用することです。
私の経験では、ポストバックベースのナビゲーションの最大のソースであるASP.NETページにはフォーム内に__EVENTTARGET
という非表示のパラメータが必要であるということもあります。機械化を使用してください。
これらのページの__doPostBack('foo')
機能は、各リンクのjavascript onclickイベントを介してに関連する値を示しますが、mechanizeはjavascriptを使用しないため、これらの値を自分で設定する必要があります。私はこれは多分、後でこの質問に出くわす誰にとっても有用であると思います
def add_event_target(form, target):
#Creates a new __EVENTTARGET control and adds the value specified
#.NET doesn't generate this in mechanize for some reason -- suspect maybe is
#normally generated by javascript or some useragent thing?
form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
form.set_all_readonly(False)
form["__EVENTTARGET"] = target
:
私はこれを行うに私のスクリプト内で使用するための簡単な小さなユーティリティ機能を構成しました。
私は、デフォルトのユーザーエージェント(Mechanize)がASP.netでうまくサポートされていないことを知ります。ユーザーエージェントを「Windows IE 8」または「Windows IE 9」に変更すると、フォームに__EVENTTARGETおよび__EVENTARGUMENTの2つの非表示フィールドが表示されます –