ruby中的win32ole使用

寻技术 Ruby编程 2023年07月11日 64

ruby中的win32ole是一个标准库,使用的时候只要添加require 'win32ole'就行。

下面是一段模拟一个登陆的代码

 require 'win32ole'
 
 ie = WIN32OLE.new('internetExplorer.application')
 
 ie.visible = true
 ie.navigate('www.***.cn')
 
 sleep(0.2) until ie.busy == false
 ie.Document.getElementById('loginId').value = "*****"
 ie.Document.getElementById('password').value = "*****"
 #ie.Document.getElementsByTagName('input').each {|x| x.click if x.value == "登陆"}
 ie.Document.getElementsByTagName('input').each {|x| x.click if x.name == "user_login"}
 ie.quit

第一行:添加win32ole头。

第三行:打开一个ie浏览器

第五行:ie可见,如果不写或者false则表示隐藏窗口。

第六行:使用navigate跳转到一个网址。

第八行:等待页面加载完全。如果页面忙,则等待0.2s。

第九行到第十行:输入账号密码。这里用到的是HTML DOM树的相关知识。

十一行和十二行:模拟点击登录按钮。有三种方法可以访问html元素,getElementById,getElementsByTagName,getElementsByClassName(在IE5,6,7,8中不能用)。如果元素有id的话当然用id比较好,可以准确的定位。但是没有id这个属性的话,那只能用其他的了。我用了getElementsByTagName,这个方法会返回所有的名字是参数(本例是input)的元素的集合。但是这个集合不能用[]来访问,它会说没有这个错误或者方法,需要用each来调用。参看each方法官方文档:Iterates over each item of OLE collection which has IEnumVARIANT interface,说明迭代元素是有调用属性的接口的。另外,有些编辑器用中文会出现错误,又是那些编码的问题,如第十一行,那么用另一个属性就好了。

第十三行:退出。

 

关闭

用微信“扫一扫”