배경 : 아래 스크립트는 내 salesforce.com 계정에 로그인하고 많은 "다운로드"링크를 클릭하려고 시도합니다 결과 .zip 내보내기 파일을 로컬에 저장하십시오.Celerity를 사용하여 Linux on salesforce.com에 로그인하십시오. (예/아니요), JS 및 VB 오류
저는 jruby와 celerity (jtml은 자바 스크립트를 지원하는 헤드리스 브라우저 인 jurby 래퍼입니다)을 사용하고 있습니다.
gui/브라우저를 설치하지 않고 LINUX 명령 줄에서 실행해야합니다. 헤드리스 브라우저는 javascript도 지원해야합니다. salesforce.com
은 오류를 반환하며 다운로드 링크를 렌더링하지 않습니다. (나는 CURL을 시도했지만 자바 스크립트를 지원하지 않기 때문에 실패했다.) 내가 리눅스 상자에서이 작업을 실행하려고하면 , 난 아래의 오류가 발생하고 스크립트가되지 않습니다
이 질문 (A WINDOWS 상자의 명령 줄에서 실행하면 현재 스크립트가 잘 작동) Salesforce에 로그인하는 것으로 보입니다. 나는의 .js 경고 (내가 생각하는) 괜찮다는 생각,하지만 난 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
죄송합니다. 문제를 복제 할 수있는 계정이 없지만 팁을 줄 것입니다. 'Enumerable # each_with_index'는 별도의 카운터를 없애줍니다. –
Celerity의 페이지를 캡처 할 수 있습니까? " "로그인 시도 후? 어쩌면 언급 된 오류가있을 수 있습니다. 아마도 돌아온 HTTP 헤더를 검사하고 홈페이지 주소에 착륙했는지 확인하십시오. 보안 설정 (컴퓨터가 검은 색으로 나열된 IP 또는 아마도이 화면이 나타날 때 냄새가납니다. 확인 전자 메일 및 쿠키를 설정하기 위해 Celerity와 함께 제공되는 링크를 클릭하십시오. – eyescream
팁을 주셔서 감사합니다. .each_with_index는 ruby 1.9에서 지원되며 1.8.6에서는 .to_enum (: each_with_index) – solidlight