目前aardio有ie/webkit/blink/htmlayout等几种内核,主要是做界面用的,很小巧,标准库封装得很全面。还有一个群友分享的CEF3的浏览内核,可以兼容大部分网站,适合于做DOM网页操作等。现在分享的这个chrome.dll调用示例,是群友参考别人的东西所写的,本例程可以让aardio写的程序通过chrome.dll中间件控制外部的chrome浏览器,它的优点在于它控制的是一个完整功能的官方正式版浏览器,所以网页兼容性问题不再有了,至于你想用它来做什么,随便你折腾。
这个是演示工程,chrome.dll已经放在res资源文件夹内,如果你已经安装有chrome浏览器,可以直接运行。如果没有,你需要的是先安装chrome浏览器。
谷歌浏览器 Google Chrome 59.0.3071.86 正式版下载地址 http://dl.pconline.com.cn/download/51614-1.html
AARDIO调用chrome.dll操作外部chrome浏览器示例源码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=759;bottom=469)
mainForm.add()
/*}}*/
import com;
import console;
import com.lite
import fsys.lnk;
import com.activeX
//分享自简码编程 http://www.jianma123.com
//chrome.dll介绍http://bbs.anjian.com/showtopic-588808-1.aspx
//CSS选择器介绍http://www.w3school.com.cn/cssref/css_selectors.asp
console.open();
path = fsys.lnk.search( "chrome.exe")
com.activeX.regsvr32As("\res\chrome.dll") //注册 chrome.dll
chrome = com.CreateObject("lt.chrome.1") // 不知道Progid 可以下载 RegDllView 搜索chrome查看
com.DumpTypeInfo(chrome) //输出所有成员
//chrome.get_ids() 返回的标签顺序经常错乱。所以需要处理下。存放多个标签 chrome.get_ids, 数组内存在的就删除,留下的就是最后一个打开的了,然后增加到数组内,如果同时打开俩个或者以上需自行处理
idtab = {}
get_ids = function(){
s = chrome.get_ids()
for(i=1;#idtab;1){
s = string.replace(s,idtab[i],"")
}
s = string.replace(s,"||","")
table.push(idtab,s)
return idtab;
}
if(path){
chrome.launch(path, "--user-data-dir=c:\user_data")
var ids = get_ids()
if(ids[1] != ""){
console.log(ids[1])
chrome.load(ids[1] , "http://www.aardio.com") //打开 网页
console.dump("打开aardio.com")
do{
win.delay(100)
loading = chrome.is_loading(ids[1] )//等待网页加载完成
}while(loading)
chrome.exec_js(ids[1] , "document.querySelector('.bbs-link a').click();") //点击 >> 下载最新版本( 5.6MB )
console.dump("点击 >> 下载最新版本( 5.6MB )")
do{
win.delay(100)
loading = chrome.is_loading(ids[1] )//等待网页加载完成
}while(loading)
chrome.exec_js(ids[1] , "document.querySelector('#scbar_txt').value='网页';") //搜索关键字
chrome.exec_js(ids[1] , "document.querySelector('#scbar_btn').click();") // 点击搜索按钮
console.dump("搜索点击")
win.delay(100)
var ids = get_ids()
do{
win.delay(100)
loading = chrome.is_loading(ids[2] )//等待网页加载完成
}while(loading)
console.dump(ids)
chrome.activate(ids[1])//激活标签1
console.dump("激活标签1")
win.delay(2000)
chrome.activate(ids[2])//激活标签2
console.dump("激活标签2")
win.delay(1000)
console.dump("打开 主题 连接2")
chrome.exec_js(ids[2] , "document.querySelector('#threadlist ul li:nth-child(2) a').click();")
win.delay(2000)
console.dump("关闭标签2")
chrome.close(ids[2])//关闭标签2
win.delay(5000)
chrome.quit()
}else {
console.log("获取失败")
}
}else {
win.msgbox("找不到 chrome.exe")
}
mainForm.show();
return win.loopMessage();
下载地址: http://www.jianma123.com/download/chromedll-control-chromebrowser.zip
鸣谢:
感谢chrome.dll插件作者兰天的分享。
感谢群友周、王港两位学长的分享。
插件说明:
chrome插件,支持chrome 45以上版本,暂不支持xp系统
方法说明:
bool launch(string path,string args)
启动浏览器
path: chrome浏览器的路径
args: chrome浏览器的启动参数,多个参数可以用"||"分隔
返回值: 启动成功则返回 true, 否则返回 false
quit()
退出浏览器
string get_ids()
获得所有已创建标签的id
返回值: 返回所有id,id用"||"分隔
string create()
创建一个新的标签
返回值: 创建成功返回窗口id,否则返回空字符串
close(string id)
关闭一个标签
id: 标签id
activate(string id)
激活一个标签
id: 标签id
string get_url(string id)
获得窗口网页的地址
id: 标签id
返回值: 返回网页的地址
load(string id, string url)
载入指定的地址
id: 标签id
url: 要载入的地址
reload(string id)
重新载入网页
id: 窗口id
back(string id)
后退
id: 标签id
forward(string id)
前进
id: 标签id
stop(string id)
停止加载网页
id: 标签id
bool is_loading(string id)
网页是否加载中
id: 标签id
返回值: 如果网页正在加载中则返回 true,否则返回 false
string exec_js(string id, string js_code)
在网页执行一段javascript代码
id: 标签id
js_code: javascript代码
返回值: 如果代码成功执行则返回执行结果
set_user_agent(string id, string ua)
修改指定标签的user agent字符串
id: 标签id
ua: user agent 字符串
bool is_dialog_open(string id)
指定标签是否有对话框打开(alert, confirm, prompt)
id: 标签id
返回值: 如果有对话框打开则返回true
string get_dialog_message(string id)
获取对话框的消息文本
id: 标签id
返回值: 如果有对话框打开则返回消息文本
handle_dialog(string id, bool accept, string prompt_text)
处理对话框
id: 标签id
accept: 参数为true则确定,否则取消
prompt_text:向prompt弹出的对话框写入内容
clear_browser_cache(string id)
清除缓存
id: 标签id
clear_browser_cookies(string id)
清除cookies
id: 标签id
set_file_input_files(string id, string selector, string paths)
设置 file input 的 value 值
id: 标签id selector: 获取 file input 的css选择器
paths: 文件路径,多个文件用"||"分隔
string dama2(string id, string selector, string name, string password, string type)
上传图片验证码到打码兔 http://www.dama2.com/
id: 标签id
selector: 获取图片验证码的css选择器
name: 打码兔用户名
password: 打码兔密码
type: 验证码类型 http://wiki.dama2.com/index.php?n=ApiDoc.Pricedesc
返回值: 如果失败返回以“-”为前缀的字符串,成功则返回验证码答案