我写了一个脚本来使用ruby watir下载多个excel文件

时间:2017-05-12 07:42:05

标签: ruby watir-webdriver

脚本对我来说很好。 现在,我一次下载500个文件。 我想通过一次指定一些范围如(10-30)文件来下载文件,并在另一时间指定(30-60),以便使用ruby watir。 这些是我的代码:

require 'watir'
require 'rubygems'

begin
  chromedriver_path = File.join(File.absolute_path(File.dirname(__FILE__)),"browser","chromedriver.exe")
  Selenium::WebDriver::Chrome.driver_path = chromedriver_path
  browser = Watir::Browser.new:chrome
  browser.goto "" //url to login
  sleep 3
  browser.text_field(:name=>"").set "" #e_id
  sleep 3
  browser.text_field(:name=>"").set "" #pwd
  browser.button(:value=>"Login").click #submit
  browser.div(:id=>"DivMenu").click
  #sleep 3
  browser.span(:class =>"down").click 
  sleep 3
  browser.execute_script("document.getElementById('hlGenerateStatusReports').click();")
  sleep 3
  browser.execute_script("document.getElementById('Report').click();")
  sleep 3
  optncount = browser.select_list(:id => 'head_ddlClient').options.count
  puts optncount
  i = 0
  while i <= optncount  do
    puts "Inside the loop i = "+i.to_s
    i +=1
    browser.select_list(:id => 'ddlClient').option(:index => i).select
    sleep 3
    browser.button(:value=>"Generate Report").click #submit
    sleep 10
  end
  browser.goto " " //url to logout
rescue Exception => e  
  puts e.message  
  puts e.backtrace.inspect  
end 

1 个答案:

答案 0 :(得分:0)

我还有图片下载脚本等。 我在这里用来演示该技术的一小部分是500px.com。

我将所有下载的文件保存在文本文件中,并检查是否已针对此文件下载了所有内容。这样你就可以随时中断并稍后恢复。 当然,如果downloaded达到限制,你可以中断。

我不会发布整个脚本,只是关于你的问题。

def download url
  filename = "#{url[-32..-1]}.jpg"
  if get(url, filename, SAVE_FOLDER)
    File.open(PROGRESS_FILE,'a+'){|f|f.puts filename}
  end
end

PROGRESS_FILE   = './500px.txt'
downloaded = 0
....
response = http.get(path, headers)
json = JSON.parse(response.body)["data"]
processed = File.read(PROGRESS_FILE)
json.each do |item|
  url       = item['images'].last['url']
  signature = url[-32..-1]
  filename  = "#{signature}.jpg"
  # check if the filenames is in the textfile and so was downloaded allready
  unless processed[filename]
    download url
    downloaded += 1
  end
end

到目前为止,该文件已超过5亿行,并且运行速度足够快(下载时间更长)。如果我达到极限,我可以轻松地将这些行放在像Sqlite这样的简单数据库中。