aardio网页自动化和窗口自动化的学习

网页自动化用于采集、填表等任务,现在一般用Chrome,aardio提供了chrome driver和chrome driverex扩展库,支持cdp命令。

窗口自动化,无非是win、winex、mouse、key几个库配合,标准窗口就是句柄操作,非标准窗口可以使用winex.accObject,还不行就找图找色找字,扩展库里还有大漠。

下面是我之前的两个小练习:

一、网页自动化

import win.ui;
/*DSG{{*/
var winform = win.form(text="Chrome Driver 练习";right=584;bottom=539;bgcolor=12639424;border="thin";max=false)
winform.add(
button={cls="button";text="开始采集";left=394;top=27;right=462;bottom=56;z=2};
button2={cls="button";text="保存结果";left=474;top=26;right=547;bottom=57;disabled=1;z=10};
combobox={cls="combobox";left=69;top=199;right=211;bottom=225;edge=1;items={};mode="dropdown";z=6};
edit={cls="edit";text="http://m.titan007.com/info.htm#section1";left=70;top=27;right=388;bottom=54;edge=1;multiline=1;readonly=1;z=1};
edit2={cls="edit";left=69;top=67;right=548;bottom=192;edge=1;hscroll=1;multiline=1;vscroll=1;z=4};
listview={cls="listview";left=66;top=236;right=548;bottom=527;edge=1;fullRow=1;gridLines=1;hscroll=1;vscroll=1;z=9};
static={cls="static";text="网址:";left=18;top=26;right=59;bottom=50;align="center";center=1;transparent=1;z=3};
static2={cls="static";text="日志:";left=17;top=65;right=64;bottom=89;align="center";center=1;transparent=1;z=5};
static3={cls="static";text="大洲:";left=14;top=203;right=61;bottom=227;align="center";center=1;transparent=1;z=7};
static4={cls="static";text="国家:";left=14;top=244;right=61;bottom=268;align="center";center=1;transparent=1;z=8}
)
/*}}*/

winform.listview.setColumns({"","序号","国家","链接"},{1,50,100,-1},{0,2,2,0})
var result={}
var log=function(...){
	winform.edit2.print(tostring(time(,"%H:%M:%S")),...);	
} 

import chrome.driverex
var driver,err=chrome.driverex()
if  !driver return win.msgbox(err); 
driver.disableAutomation()
driver.setHeadless()

winform.button.oncommand = function(id,event){
	winform.button.disabled=true
	log("打开浏览器")
	wb=driver.startBrowser()
	log("打开网页")
	wb.go(winform.edit.text)
	wb.wait()
	log("获取大洲名称")
	var lables=wb.getEles("xpath",`//*[@id="tabHeader"]/ul/li`)
	for (i=2;#lables){
		var lableText=lables[i].getText()
		winform.combobox.add(lableText)
	}
	winform.combobox.add("全部")
	winform.combobox.selText="全部"
	var n=0
	for (i=2;#lables){
		var lableText=lables[i].getText()
		log("获取"++lableText++"国家名称")
		lables[i].click()
		wb.wait()
		var countries=wb.getEles("xpath",`//*[@id="tc_`++(i-1)++`"]/ul/li/a`)
		for (i=1;#countries-1){
			var name=countries[i].getText()
			var link=countries[i].getAttribute("href")
			n++
			winform.listview.addItem({lableText,n,name,link})
		}
	}
	result=table.clone(winform.listview.items)
	log("采集完毕")
	winform.button.disabled=false
	winform.button2.disabled=false
}

winform.combobox.onListChange = function(){ 	
	var sel=winform.combobox.selText
	if sel="全部" {
		winform.listview.items=result
		return ; 
	}
	var tab=table.filter(result,function(v){
		return  v[1]=sel
	})
	winform.listview.items=tab
	for (i=1;winform.listview.count){
		winform.listview.setItemText(i,i,2)
	}
}

winform.button2.oncommand = function(id,event){
	//保存不是此次练习重点,故采取最简单方式
	string.save("\result.txt",table.tostring(result) )
	process.exploreSelect("\result.txt")
}

winform.onClose = function(hwnd,message,wParam,lParam){
	winform.show(false)
	if wb wb.closeAll()
    if driver driver.close()
}

winform.show();
win.loopMessage();

 二、窗口自动化-禁用触控板

这部分之前发过,现在整合到一块。一直觉得笔记本电脑的触控板很烦人,打字时不小心就会碰到。而且我这台电脑似乎有毛病,明明禁用了,下次开机又启用。于是写了个自动禁用触控板的程序。这个程序未必适用于每台电脑,而且没毛病的电脑可能禁用一次就好了,不必像我这样还要写程序。

	//打开控制面板的鼠标属性
	import process.control
	process.control("mouse")
	//找到窗口句柄
	import winex
	var hwnd0= winex.waitVisible("鼠标 属性")
	//找到选项卡句柄
	var hwnd=winex.findEx(hwnd0,,"SysTabControl32")
	//这里改用新学的acc库操作,切换选项卡
	import winex.accObject
	var acc = winex.accObject.fromWindow(hwnd)
	var tab = acc.find(name = "@装置设定值")
	tab.doDefaultAction()
	win.delay(100)
	//找到选项卡对应页面的句柄和禁用按钮句柄
	hwnd=winex.findEx(hwnd0,,,"Advanced Features")
	hwnd=winex.findEx(hwnd,,,"@禁用(&D)")
	//如果已经处于禁用状态就点击取消
	if !win.isEnable(hwnd){
		var cancle=winex.findEx(hwnd0,,,"取消")
		winex.click(cancle)
		return 
		}; 
	//模拟点击禁用按钮
	winex.click(hwnd)
	//如果弹出警告就模拟点击确定
	winex.waitTimeout=500
	var warn=winex.waitVisible("警告")
	if warn {
		var yes=winex.findEx(warn,,,"确定")
		winex.click(yes)
		}		
	win.delay(100)
	//点击主窗口确定按钮,使设置生效并关闭窗口
	var ok=winex.findEx(hwnd0,,,"确定")
	winex.click(ok)

你可能感兴趣的:(aardio,自动化,经验分享)