1

特定のWebサイトからレポートを取得する機能が必要です。content-disposition:filename=report.csv以下のメソッドは、必要なすべてのことを実行します。唯一のキャッチは、ページが投稿されたとき(ページがそれ自体に投稿されたとき)に応答ヘッダーに「」が含まれるレポート「report.csv」が返されることです。

def download_report
  page = @mechanize.click(@mechanize.current_page().link_with(:text => /Reporting/))
  page.form.field_with(:name => "rep").option_with(:value => "adperf").click

  page.form_with(:name => "get-report").field_with(:id => "sasReportingQuery.dateRange").option_with(:value => "Custom").click

  start_date = DateTime.parse(@start_date)
  end_date = DateTime.parse(@end_date)

  page.form_with(:name => "get-report").field_with(:name => "sd_display").value = start_date.strftime("%m/%d/%Y")
  page.form_with(:name => "get-report").field_with(:name => "ed_display").value = end_date.strftime("%m/%d/%Y")
  page.form_with(:name => "get-report").submit
end

私の知る限り、Mechanizeはファイルを取得できる場所にキャプチャしていません。Mechanizeにこのファイルをキャプチャしてダウンロードさせる方法はありますか?

@mechanize.current_page()ファイルが含まれておら@mechanize.history()ず、ファイルのURLがMechanizeに提示されたことを示していません。

4

2 に答える 2

0

サーバーはブラウザにドキュメントを保存するように指示しているようです。「Content-disposition:filename」がその手がかりです。Mechanize はそれをどう処理すればよいか分からず、コンテンツを読み取って解析しようとしますが、それが CSV の場合は機能しません。

作業している HTML ページを見なければ、ダウンロードをトリガーするためにどのメカニズムを使用しているかを正確に知ることは不可能です。要素をクリックすると、Mechanize が処理しない JavaScript イベントが発生する可能性があります。または、ドキュメントのダウンロードで応答するサーバーにフォームを送信することもできます。どちらの場合でも、何が送信されているのか、なぜ送信されているのか、必要なドキュメントを具体的に定義しているものを把握し、その情報を使用してドキュメントを要求する必要があります。

Mechanize は、添付ファイルをダウンロードするための適切なツールではありません。Mechanize を使用してフォームをナビゲートし、Mechanize に埋め込まれたNokogiriを使用してドキュメントの URL を抽出します。

次に、curbや Ruby の組み込みOpenURI などを使用して添付ファイルを取得するか、詳細については「WWW:Mechanize を使用してファイルをディスクにダウンロードし、最初にすべてのファイルをメモリに読み込まずにダウンロードする」を参照してください。

于 2012-09-19T18:54:06.163 に答える
0

返されたページのクラスを確認してくださいpage.class。もしそうならFile、あなたはそれを保存することができます。

...
page = page.form_with(:name => "get-report").submit
page.class # File?
page.save('path/to/file')
于 2015-01-15T16:33:41.957 に答える