前段时间练手baidu相册上传照片之后,自然想玩玩自动化下载照片,结果脚本写着遇到Profile的设置老是过不去,参考网上的经验介绍也无法解决掉,无奈,先遗留这个问题。
下面的脚本主要完成登录百度相册,批量下载美女写真集的过程。(题外话,百度相册好多mm啊!)
说明一下:
1、这里遇到了新窗口的场景,定位新窗口也有几种方法,我这里偷懒用了索引的方式。使用.use方法加一个block,block里的操作就是只针对当前窗口的,感觉还是挺清晰的。
browser.window(:index, 1).use do
browser.a(:text, '批量下载').wait_until_present
。。。
end
2、正如前面提到,脚本里也做了注释,目前对下面的问题还是没找到较好做法的:
# 这里有2个遗留问题:
#1、下载到哪里?文件名叫什么? 我的机器无法使用profile, 所以无法指定下载目录.默认就是Chrome默认的download目录
#2、怎么知道下载完成?这里等待25秒,是偷懒了。目前似乎没有很好做法,网上有人通过监控该该文件的大小,觉得不是挺满意
# coding: gb2312
require 'watir-webdriver'
# 给String类增加一个编码转换的实例方法gb2312,即把字符串按gb2312编码,可避免Watir从网页提取中文字符时乱码
class String
def gb2312
self.encode("gb2312")
end
end
#遗留问题:偶的机器跑下面这段指定profile的脚本失败,暂时不知如何解决
#~ profile = Selenium::WebDriver::Chrome::Profile.new
#~ profile['download.prompt_for_download'] = false
#~ profile['download.default_directory'] = "d:/"
#~ browser = Watir::Browser.new :chrome, :profile=> profile
# 打开chrome driver
browser = Watir::Browser.new :chrome
begin
# 登陆baidu相册首页
browser.goto 'http://xiangce.baidu.com/'
# 点击登陆
browser.a(:id, 'userbar-login-btn').wait_until_present
browser.a(:id, 'userbar-login-btn').click
# 输入用户名
browser.input(:name, 'userName').wait_until_present
browser.input(:name, 'userName').send_keys('百度账号')
# 输入密码
browser.input(:name, 'password').wait_until_present
browser.input(:name, 'password').send_keys('密码')
# 确定
browser.input(:id, 'TANGRAM__PSP_8__submit').click
sleep 5
browser.a(:text, '图片广场').wait_until_present
browser.a(:text, '图片广场').click
#
browser.a(:text, '美女').wait_until_present
browser.a(:text, '美女').click
#
browser.a(:text, '写真').wait_until_present
browser.a(:text, '写真').click
#
browser.a(:text, '美女写真2').wait_until_present
browser.a(:text, '美女写真2').click
expected_window = nil
timeout = 0
while(timeout < 5)
browser.windows.each do |win|
puts win.title.gb2312
if win.title.to_s.gb2312.include?("<美女写真2>的照片")
expected_window = win
break
end
end
timeout += 1
sleep 1
end
browser.window(:index, 1).wait_until_present
browser.window(:index, 1).use do
browser.a(:text, '批量下载').wait_until_present
browser.a(:text, '批量下载').click
browser.checkbox(:id, 'select-current').wait_until_present
browser.checkbox(:id, 'select-current').set(true)
browser.div(:class, 'download-button download-button-upState').click
end
# 这里有2个遗留问题:
#1、下载到哪里?文件名叫什么? 我的机器无法使用profile, 所以无法指定下载目录.默认就是Chrome默认的download目录
#2、怎么知道下载完成?这里等待25秒,是偷懒了。目前似乎没有很好做法,网上有人通过监控该该文件的大小,觉得不是挺满意
sleep 25
puts "下载成功"
rescue => error
puts "出现异常:#{error}"
ensure
browser.close if browser
end