大家知道Chrome每个版本的适用ChromeDriver版本都不一样,
安装不同的Chrome就要去下载不同的ChromeDriver.exe,而且还要命令行启动,绑定固定端口一搞不好还会跟别的进程冲突了。
现在用aardio 最新版中提供的 chrome.driver 所有麻烦都可以解决了,
chrome.driver 会自动查找Chrome的安装位置、版本号,自动匹配最合适的ChromeDriver版本,并且负责自动下载安装,自动分配空闲端口,所有事情全自动准备好,只要运行下面的代码就可以了。
现在看代码,用法非常简单:
//WebDriver自动化
import chrome.driver;
//创建chromeDriver对象
//协议文档 https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
var driver = chrome.driver();
//创建会话,打开chrome浏览器,Chrome新版会强制显示控制台
var browser = driver.startBrowser();
//打开网页
browser.go("http://www.so.com")
//查找文本输入框
var ele = browser.querySelector("#input");
//在网页输入框输入内容
ele.setValue( "ChromeDriver" )
//模拟点击按钮
browser.querySelector("#search-button").click();
调用 Electron
也可以通过 ChromeDriver 调用 Electron,几句代码就可以了:
import electron.driver;
//创建chromeDriver对象,协议文档
var driver = electron.driver();
//替换electron默认的开始页
driver.addArguments("--app=http://www.so.com");
//创建会话,打开chrome浏览器,Chrome新版会强制显示控制台
var browser = driver.startBrowser();
//打开网页
//browser.go("http://www.so.com")
//查找文本输入框
var ele = browser.querySelector("#input");
//在网页输入框输入内容
ele.setValue( "ChromeDriver" )
//模拟点击按钮
browser.querySelector("#search-button").click();
修改 User Agent
import chrome.driver;
var driver = chrome.driver();
driver.addArguments("--user-agent=mychrome")
//打开网页
driver.startBrowser().go("http://www.ip138.com/useragent/")
chrome启动参数大全:
List of Chromium Command Line Switches « Peter Beverloo
设置代理
import chrome.driver;
var driver = chrome.driver();
driver.setProxy(
proxyType = "manual";
httpProxy = "127.0.0.1:12043"
)
也可以下面这样写:
import chrome.driver;
var driver = chrome.driver();
var browser = driver.startBrowser(
proxy ={
proxyType = "manual";
httpProxy = "127.0.0.1:12043"
}
);
新版功能
chrome.driver新版功能演示,操作chrome就像直接执行Javascript函数那么简单
import chrome.driver;
var driver = chrome.driver();
//启动浏览器
browser = driver.startBrowser();
//打开网页
browser.go("http://www.so.com")
//查询元素,并且使用元素的querySelector函数查询子元素
browser.querySelector("body").querySelector("#input").setValue( "ChromeDriver" )
//模拟点击按钮
browser.querySelector("#search-button").click()
隐藏控制台
网上一些讨论认为这个问题无解,WebDriver也没有找到相关参数,
直觉这个可能在启动参数里打开控制台,于是我写了一个假的 chrome.exe,再用 ChromeDriver.exe 调用他,代码如下:
import console;
import win.clip
win.clip.write(_CMDLINE)
console.log(_CMDLINE);
console.pause();
chrome.exe获得的启动参数如下:
--disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtrials=SiteIsolationExtensions/Control --ignore-certificate-errors --load-extension="C:\Users\***\AppData\Local\Temp\***\internal" --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=0 --test-type=webdriver --use-mock-keychain --user-data-dir="C:\Users\***\AppData\Local\Temp\***" data:,
我们看到可疑参数--enable-logging,
进一步测试发现:排除这个参数就可以关闭新版chrome启动跳出来的控制台窗口了,示例代码:
import chrome.driver;
var driver = chrome.driver( );
driver.setOptions(
excludeSwitches ={"enable-logging"} //注意这里参数前千万不要加 --
)
driver.addArguments("--app=http://www.aardio.com")
var browser = driver.startBrowser();
已更新 chrome.driver 默认禁用控制台窗口,
但仍然可以使用 driver.addArguments("--enable-logging") 启用这个参数。
app、driver 交互
aardio新版经过大力改进,
现在 chrome.app, chrome.driver 已经可以相互结合使用,chrome与aardio交互更加简单方便。
下面是一个简单的例子:
import chrome.app;
var app = chrome.app();
import chrome.driver;
var driver = chrome.driver();
//指定允许chrome中使用JS直接调用的函数
app.external = {
test = function(){
app.msgbox("页面js调用了aardio函数");
}
}
//正式的启动chrome进程
app.start("http://www.aardio.com",function(args){
//启动浏览器,加载aardio.js,并打开ChromeDriver自动化接口
var browser = driver.startAppBrowser(app,args);
//执行JS脚本
browser.doScript(`
document.addEventListener("click", function(event) {
aardio.test();
});
`)
return browser;
});
win.loopMessage();
禁用自动化测试提示
方法一:
import chrome.driver;
var driver = chrome.driver();
driver.removeArguments("--enable-automation")
虽然不显示上面的提示了,但是弹出一个更大的警告。
方法二:
import chrome.driver;
var driver = chrome.driver();
driver.addArguments("--disable-infobars");
不显示上面的提示,也没有警告了,但是可以看到提示框显示然后快速的关掉,会闪烁一下。
方法三:
import chrome.driver;
var driver = chrome.driver();
driver.addArguments("--app=http://www.so.com/index.html");
用–app模式的方法完美,地址栏、提示框、警告都去掉了,
但是有一个奇怪的事情是,启动网址要写成 http://www.so.com/index.html 这样,如果不写 index.html 有时候会白屏,但不是每个网站都这样。
清理临时文件
Chrome每个进程只能绑定单独的用户目录 - 才能创建单独的远程调试端口,
ChromeDriver 的办法是每次都创建一个临时的用户目录,然后每次都创建新的临时用户目录,而且又不负责删除(其实可以设置为重启系统自动删除,不知道Chrome为什么没有这么做),所以我们只好自己清理了,代码如下:
import console;
import fsys;
fsys.enum( fsys.getTempDir(), "scoped_dir*_*",
function(dir,filename,fullpath,findData){
if(!filename){
if( ..io.exist( io.joinpath(fullpath,"DevToolsActivePort") ) ){
fsys.delete(fullpath)
}
if( ..io.exist( io.joinpath(fullpath,"internal.zip") ) ){
fsys.delete(fullpath)
}
}
},false
);
console.pause(true);
主题数 170 | 今日评论 0 | 今日主题 0 |