3

背景: 以下のスクリプトは、私の salesforce.com アカウントにログインし、一連の「ダウンロード」リンクをクリックして、結果の .zip エクスポート ファイルをローカルに保存しようとします。

私はjrubyとcelerityを使用しています(これは、javascriptもサポートするヘッドレスブラウザであるhtmlunitのjrubyラッパーです)。

要件は、GUI/ブラウザをインストールせずにLINUXコマンド ラインから実行することです。ヘッドレス ブラウザは、javascript をサポートする必要もあります。そうしsalesforce.comないと、エラーが返され、ダウンロード リンクがレンダリングされません。(CURL を試しましたが、javascript をサポートしていないため失敗します)。(現在、 WINDOWSボックスのコマンド ラインから実行すると、スクリプトは正常に動作します)

質問: Linux ボックスからこれを実行しようとすると、以下のエラーが表示され、スクリプトが Salesforce にログインしているように見えません。.js の警告は問題ないと思いますが (私はそう思います)、VBScript not supported in Window.execScript()警告の意味がわかりませんか?:

[root@ip-10-114-241-55 ~]# jruby download_sf_export_files.rb
Jan 18, 2011 2:16:41 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'https://www.salesforce.com/common/assets/js/global2.js?date=100817', but got 'application/x-javascript'.
Jan 18, 2011 2:16:41 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'https://www.salesforce.com/common/assets/thirdparty/omniture/s_code3.js?date=101012', but got 'application/x-javascript'.
Jan 18, 2011 2:38:05 AM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'https://na7.salesforce.com/static/101210/js/functions.js', but got 'application/x-javascript'.
Jan 18, 2011 2:38:06 AM com.gargoylesoftware.htmlunit.javascript.host.Window jsxFunction_execScript
WARNING: VBScript not supported in Window.execScript().



-----install instructions------
download jruby:                 http://jruby.org/download
install gem from command line:  jruby -S gem install celerity
run script from command line:   jruby download_sf_export_files.rb

-----download_sf_export_files.rb-------
require "rubygems"
require "celerity"

browser = Celerity::Browser.new
browser.goto('https://na7.salesforce.com')
browser.text_field(:name, 'username').value = 'myuserlogin@domain.com'
browser.text_field(:name, 'pw').value = 'mysecretpassword'
browser.button(:name, 'Login').click
browser.goto('https://na7.salesforce.com/ui/setup/export/DataExportPage/d')

## assume multiple 'download' links if a large SF data export 
## group all links in a map, iterate and click each one

i=1
hrefs = browser.links.map { |link| link.href if link.text =~ /download/ }.compact hrefs.each do |href|
 browser.link(:url, href).download
 puts "found a 'download' link on page, clicking link..."
 io = browser.link(:text, "download").download 
 File.open("sf_zip_file_#{i}.zip", "w+") { |file| file.write(io.read) }
 i+=i
end
4

1 に答える 1

3

(「未回答の質問」から削除するためだけに質問のコメントからコピーされました)

ログイン試行後に Celerity が「見る」ページをキャプチャできますか? 何らかのエラーが言及されている可能性があります。戻ってきた HTTP ヘッダーを調べて、ホームページのアドレスに到達したかどうかを確認できます...セキュリティ設定の匂いがします (ブラックリストに登録された IP を持つマシン、または受信する必要がある場合はおそらくこの画面)確認メールを送信し、Celerity に付属のリンクをクリックして Cookie を設定します)。

于 2011-01-22T07:54:45.067 に答える