2011-01-19 2 views
3

背景: 以下のスクリプトは、salesforce.comアカウントにログインし、多数の「ダウンロード」リンクをクリックしようとしています。結果の.zipエクスポートファイルをローカルに保存します。Celerityを使用してLinux上でsalesforce.comにログインすると、JS&VBエラーが表示される

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

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

QUESTION: 私はLinuxボックスからこれを実行しようとすると、私は下のエラーを受け取り、スクリプトがありませんsalesforceにログインしているようです。私は(私は思う)の.js警告がOKであると信じて、しかし、私はVBScript not supported in Window.execScript()警告の意味を理解していない?:

[[email protected] ~]# 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 = '[email protected]' 
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 
(ちょうど「未回答の質問」からそれを削除するには、質問のコメントからコピー)
+0

申し訳ありませんが問題を再現するSFアカウントを持っていませんが、あなたにヒントを与えます: 'Enumerable#each_with_index'は、別のカウンターを取り除くことを可能にします –

+0

Celerityのページをキャプチャできますか? "あなたのログイン試行後に?多分あなたが戻ってきたHTTPヘッダーを調べて、ホームページのアドレスに着いたかどうかを確認することができるかもしれません...私はいくつかのセキュリティ設定(コンピュータはブラックリストに載っていますか、 Cookieを設定するためにCelerityに付属している電子メールと確認リンクをクリックしてください)。 – eyescream

+0

チップのありがとうマーク。 .each_with_indexはruby 1.9でサポートされています。1.8.6では.to_enum(:each_with_index) – solidlight

答えて

3

ログイン試行後にCelerityが見たページをキャプチャできますか?多分あなたが戻ってきたHTTPヘッダーを調べて、ホームページのアドレスに着いたかどうかを確認することができるかもしれません...私はいくつかのセキュリティ設定(コンピュータはブラックリストに載っていますか、 Cookieを設定するためにCelerityに付属している電子メールと確認リンクをクリックしてください)。

関連する問題