目前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

返回值: 如果失败返回以“-”为前缀的字符串,成功则返回验证码答案