2009-06-19 22 views
1

私のクライアントの1人は、Webサービスから顧客データを定期的に取得する必要があります。データそのものは、サービスのウェブサイト内のほとんどのナビゲーションと同様に、javascriptのポストバックを介してCSVファイルとして提供されます。クライアント側からのポストバックを自動化することは可能ですか?

システム全体の最悪のボトルネックは、人間がWebページにログインしてダウンロードページに移動し、ダウンロードしたファイルを手動でシステムの残りの部分に追加する必要があることです。

ポストバックによるファイルのダウンロードプロセスは自動化できますか? (例えば、cronを介して実行できるシェルスクリプトを介して)?

もしそうなら、そうするための最も適切なツールとして何をお勧めしますか?

答えて

4

誰もが、再びこの問題に遭遇する場合には、私は解決策を見つけた:

トリックは、適切なページに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 

私はこれを行うに私のスクリプト内で使用するための簡単な小さなユーティリティ機能を構成しました。

+0

私は、デフォルトのユーザーエージェント(Mechanize)がASP.netでうまくサポートされていないことを知ります。ユーザーエージェントを「Windows IE 8」または「Windows IE 9」に変更すると、フォームに__EVENTTARGETおよび__EVENTARGUMENTの2つの非表示フィールドが表示されます –

-1

AJAXタイマーを使用できます。 asp.net/ajaxウェブサイトをチェックしてください。

関連する問題