百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

更简单地自动化操作浏览器

ninehua 2024-12-06 18:07 30 浏览

aardio 可以嵌入一大堆的浏览器组件,而且代码都非常简洁,不过今天我们要说的不是这些功能。

我们知道,在其他编程语言里比较流行的是使用 WebDriver 协议控制浏览器,这个非常方便,但实际用起来要做的事还不少,例如 WebDriver 控制 Chrome 你要安装 ChromeDriver,用 WebDriver 控制 Edge,你要安装 EdgeDriver ,而且每个不同版本的浏览器,要安装的对应的 Driver.exe 都 是不同的,这就真是个大坑了。

试想一下,别人电脑上有没有装 Chrome 还不一定,你得让用户自己装这个,还要自己去爬楼找到对应的 Driver.exe ,这是有多累,即使你基于这些写了个软件工具,大概率也只能自己玩玩了。

不过 aardio 里所有这些事都可以自动完成,aardio 的标准库里有个 chrome.driver,虽然他叫 chrome.driver,但是兼容非常多的浏览器,也兼容现在越来越普及的 Edge。使用 aardio里的 chrome.driver, 你只需要简单 地写自动化控制网页的代码就可以了,所有环境配置都由 aardio 自动处理,aardio 会自动检测系统的 Chrome, Edge浏览器,如果没有就自动安装合适的浏览器,而且自动下载对应版本的 ChromeDriver.exe, EdgeDriver.exe,这样你编写的软件工具也可以方便地分发给普通用户。

实际上我写的库 chrome.driver 主要的代码都是在处理 ChromeDriver,EdgeDriver 的安装部署与配置,至于 WebDriver 协议其实没有几句代码,aardio 先天就可以将任何基于 Web API 的接口自动导入为 aardio 对象,在这方面 aardio 就省事多了。

来看几句 aardio 调用代码体会一下丝滑与轻松的感觉:

import chrome.driver;
var driver = chrome.driver(); 
var browser = driver.startBrowser();

//打开网页
browser.go("http://www.baidu.com")

//查找文本输入框,返回的DOM对象也可以使用ququerySelector继续查找子节点
var ele = browser.querySelector("body").querySelector("#kw"); 

//在网页输入框输入内容
ele.setValue( "ChromeDriver" )

//调用JS,并且可以返回值(也可以返回DOM节点对象)
var searchButton = browser.doScript(` 
    //可以使用arguments访问aardio传来的参数
    return arguments[0].querySelector("#su");
  `
  ,browser.querySelector("body")//可以传任意个调用参数给JS,还可以直接传DOM节点对象
)

//JS返回的DOM节点对象也可以操作控制
searchButton.click();

有老的 aardio 用户看到这里可能就要说了,我 aardio 都用很久了,这些代码你天天吹了不知道多少遍了。好吧,其实今天这篇文章不是要说上面这些。之所以说这些,是考虑还有不少刚接触 aardio 的新手,对 aardio 的节奏和风格先有一个大致的概念。

前面已经说过了,aardio 的风格一贯都是这样,简单,简单 …… 还要更简单,人生苦短,我们没有那么多时间去下载、配置,看文档。能用程序做的事就用程序自动去做。

今天我要说一个新的东西,叫 SeleniumBasic, 一个 VB 用户向我介绍了这个开源组件,Selenium 大家应该知道了,WebDriver 就是 Selenium 使用的协议。而 SeleniumBasic 是基于 Selenium 的 .Net 版本封装的一个 VB 开源组件,用的人应该也不少。然后 SeleniumBasic v3 的作者 ryueifu 提到SeleniumBasic 需要注册 COM 控件,在很多电脑上存在兼容性问题,出现“无法创建对象”,“自动化错误”,所以进行了改进 ...... 具体的我在范例附上了文章链接大家可以自行了解。

我对这个开源组件的注册坑很感兴趣,aardio 中加载 COM 控件通常可以免注册加载,甚至是自内存加载,这不但是省事,不容易出错,对系统的污染也小,而且不同的程序即使用同一个组件也不会出现版本冲突(尤其是这些开源组件,万一有人修改了接口,却用了同一个 ProgID 注册呢?)

我把 SeleniumBasic 下过来看了一下,发现这是一个 .Net 写的组件,一堆 DLL,然后有一个注册的批处理,其实 .Net 的 DLL 不是那种原生 DLL,某种意义上更像是 aardio 中的库模块(把后缀名改为 dll ), 所以他这个注册控件相比原生 DLL 可能有更多的兼容问题,实际上我们也很少看到用 .Net 写的 COM 组件。

这个 SeleniumBasic 组件既然是 .Net 写的,我们其实也就没必要注册了,因为 .Net 的程序集本来就可以直接调用。我写了几句代码试了一下,可以使用,但是这个 DLL 又依赖 3 个其他的 DLL,这个就不太好了。你说写几句代码就拖 4 个 DLL,就算不用注册了,总是不太完美 。

于是我决定把这 4 个 DLL 合并为一个 DLL文件,我们可以用微软提供的 ILMerge 来做这件事,但是这个工具要码一堆命令行,这个就略有些麻烦了,于是顺手就写了个 aardio 扩展库 dotNet.merge 简化了合并程序集操作,然后又顺手写了个 GUI 工具:

用这个工具成功把 SeleniumBasic 合并为一个DLL,这个 DLL 不支持内存加载,不过没关系,用 aardio 提供的 dotNet.loadAppData() 一句代码解决 —— 支持生成独立 EXE 文件。

虽然我们做了一系列的简化,但还不够简单, SeleniumBasic 还是需要自己写一堆初始化的配置参数,需要你自己下载 Chrome,自己去找对应版本的 ChromeDriver.exe …… 于是我继承 aardio 的优良传统,封装了一个扩展库:dotNet.seleniumBasic ,把前面所有这些事同样全自动化的做了。

然后我高兴地发布了扩展库,正准备上公众号写文章向大家介绍介绍,在写以前,随手试了一下 …… 发现在我刚换的这台笔记本上,居然运行不了,原因是他的 ChromeDriver 不支持 Edge Chromium, 亲!你难道不知道 Edge 是正宗的 Chromium 核吗?!

要知道 chrome.driver 是兼容 Edge的,于是我对 dotNet.seleniumBasic 一通改,加了个懒人包函数 SeleniumBasic.CreateDefaultWebDriver() 自动做好所有的事,并且自动安装、切换、兼容 ChromeDriver 与 EdgeDriver。

好吧,最后我们看一下 aardio 调用 SeleniumBasic 到底有多简单:

import console;
console.showLoading(" 正在启动 SeleniumBasic ");
 
import dotNet.seleniumBasic;
var SeleniumBasic = dotNet.seleniumBasic;

var wd = SeleniumBasic.CreateDefaultWebDriver();
if(!wd) error("初始化或配置环境失败",2) 

//打开网站
wd.Url = "https://www.baidu.com"

//查找表单
var form = wd.FindElementById("form")

//查找输入框
var keyword = form.FindElementById("kw")

//清空输入框,aardio 不能像 VB 那样省略函数调用后的括号
keyword.Clear();

//发送字符串    
keyword.SendKeys("aardio");

//自动点击按钮
var button = form.FindElementById("su");
button.Click();

//重开控制台以前置控制台窗口,然后等待按键    
console.close();
console.pause(,"按任意键退出浏览器");

//退出浏览器
wd.Quit();

是不是很简单?!

这个库发布一段时间以后,已经改进为使用 dotNet.reference 函数完美内存加载 SeleniumBasic 的这几个 DLL 了( 比 ILMerge 简单 ),相关源码如下:

dotNet.reference({
		["WebDriver.Support"] = #34;~\lib\dotNet\seleniumBasic\.res\WebDriver.Support.dll";
		["WebDriver"] = #34;~\lib\dotNet\seleniumBasic\.res\WebDriver.dll";
		["SeleniumBasic"] = #34;~\lib\dotNet\seleniumBasic\.res\SeleniumBasic.dll";
	});

aardio 代码在文件路径前加上 $ 符号 —— 表示将这个文件的二进制数据直接嵌入到程序里(发布后就不再需要这个文件了)。

dotNet.reference 函数用于在 .Net 中虚拟内存程序集, 原来的 .Net 代码一般不需要修改, 除非程序集内有获取程序集类径的代码。例如 SeleniumBasic.IWebDriver 构造函数内的

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 

需要改为

System.AppDomain.CurrentDomain.BaseDirectory。

相关推荐

单打独斗的产品设计师工作流程总结

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。我从入行开始就在一个做自己产品的小公司工作,到现在已经三年了。刚开始工作的时候什么也不懂,老板说让出效果图,就开始直接...

毕业生必备软件!6套APP构建我的产品设计工作流

工欲善其事,必先利其器。思维和方法论固然超级重要,但是掌握并制定适合自己的工作流也可以成倍提升效率。好的软件加上熟练的使用可以帮助解决遇到的所有问题,不仅可以减轻大脑和身体的负担,更可以让产品设计师在...

如何在APP原型上写需求?(app原型设计规范)

你有没有过这样的经历——辛辛苦苦写了半天的文档,结果开发一眼没看,做需求的时候又把文档里的内容问了一遍?如果你也有这样的经历,那么在APP原型上写需求,或许能帮你解决这个问题。为什么要把需求直接写在...

产品经理工具箱|原型及交互设计工具

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。世界上最实在最方便的原型设计及交互工具:国外的谷歌,facebook等大型互联网公司的交互工具就是上面最原始,最有效最...

交互设计利器汇总:实用工具大揭秘!

近年来,页面交互设计有了很好的发展,越来越受到人们的重视。如果你想成为一名页面交互设计师,除了对平面设计和产品设计有一定的了解外,更重要的是要知道哪个软件适合页面交互设计。本文将带您了解5款流行的页面...

Taro - 京东凹凸实验室出品的小程序多端开发工具,内置 UI 组件库

可以支持转换到微信/京东/百度/支付宝/字节跳动/QQ小程序以及H5端,同时也支持使用Vue语法了。关于Taro凹凸实验室(O2Lab)来自京东零售集团,创建于2015年10月,是...

开发2小时,修bug2周,我用Trae做了个小程序

在当今快速发展的科技时代,AI技术的崛起为开发者带来了前所未有的机遇与挑战。一方面,AI极大地降低了技术门槛,让更多的创意得以快速实现;另一方面,它也提升了竞争维度,促使人们在认知、方法和时间效率上不...

好用的10款免费原型设计工具(免费的原型设计软件)

对产品经理或UI/UX设计师来说,一款好的原型设计工具至关重要。好的原型设计软件能够帮助你快速构建还原度高且信息架构清晰明了的原型图,还能极大减低工作中与同事的沟通成本,更高效地推进工作。那么,一款好...

用局域网内部分享Axure原型,这里有详细的步骤

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。用axure做好原型,想分享给别人,有几个方法:生成本地文件,发送本地文件,但是文件有更新,就要重新发送用axure自...

Axure制作App原型应该怎样设置尺寸?原型尺寸对照表!

最近有几位小伙伴儿都提出同样一个疑问:想用Axure设计一个APP原型放到真实的移动设备中演示,但不知道应该使用什么尺寸?若要解释清楚像素和分辨率需要的篇幅比较长,请大家参考百度百科。这里老枪搜集...

200套数据可视化大屏模版Axure高保真原型

超炫可视化大屏模版来了,Axure高保真原型。关注微信公众号“素材帮帮站”,发送消息100051,获取素材下载地址。查看往期文章,获取更多免费素材。

Axure RP 8 Beta版正式上线(axure rp8是什么软件)

AxureSoftwareSolution公司于美国当地时间8月12日宣布其旗下产品AxureRP的v8版本的测试版正式上线。以下是其官方博客关于对AxureRP8Beta版的介绍:今天,...

PM小技术:使用SAE发布在线Axure文档

俗话说,不会写代码的产品经理不是好的射鸡湿。关于产品经理与技术之间的微妙关系,扯开了讲可是长篇大论,比如知乎上这个问题:IT行业产品经理(尤其是创业的)需要懂技术吗?懂到什么程度?,以及这个:产品经...

『原型资源』Axure自带图标库不够用,第三方经典图标库来袭

今天小编为大家带来第三方经典图标库,己确认内容可用现推荐给大家。直接上手就可不用自己画哈~获取原型文档请与班主任联系!先睹为快,合适再拿走不谢:图标太多,截取部分给大家参考o(* ̄︶ ̄*)o免费领取资...

Axure RP 8 测试版:将于今年夏天到来

我们一直在努力的开发AxureRP8。我认为这是对现有客户以及刚接触Axure的人的一个重要版本。我们希望看到你使用这些新特性,所以我们对现有客户免费升级。所有有AxureRP授权的客户包括标准...