aardio网页组件:webPageOperation

webPageOperation是webview的初步封装,用来网页填表、操作网页。可操作web.form、web.view、web.view2等浏览器组件。
1

使用方法

首先把webPageOperation.aardio(源码在后面)放到~\lib\godking目录下,然后新建窗口项目:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="打开网页";left=220;top=400;right=340;bottom=450;z=2};
button2={cls="button";text="搜索";left=410;top=400;right=530;bottom=450;z=3};
custom={cls="custom";text="自定义控件";left=9;top=13;right=744;bottom=386;ah=1;aw=1;z=1}
)
/*}}*/import web.view
import console
var wb = web.view(winform.custom)
wb.go("https://www.sogou.com/")winform.button.oncommand = function(id,event){import godking.webPageOperation;var wpo = godking.webPageOperation(wb);// 点击"图片"连接var s = "#weixinch";wpo.bySelector( s ).click();
}winform.button2.oncommand = function(id,event){import godking.webPageOperation;var wpo = godking.webPageOperation(wb);// 填写搜索框内容var s = "#query";wpo.bySelector( s ).setValue("光庆aardio");// 表单提交var tagname = "form"wpo.byTagNameS( tagname,1 ).submit();	
}winform.show();
win.loopMessage();

组件源码

//webPageOperation 网页操作
//光庆封装 http://chengxu.online
//V1.1.1
//2023-06-05
//参考文档: https://developer.mozilla.org/zh-CN/docs/Web/API
/*
更新日志1.1.1 改进S结尾的操作集合,增加 byIndex() 函数,改进 byChildS() 和 byParent() 函数命名。1.1.0 支持 parentNode() 父元素操作集 和 childNodes() 子元素操作集。内置find函数,可寻找指定元素并返回操作集,但速度很慢。1.0.0 初步封装
Selector(CSS选择器)参考手册: https://www.runoob.com/cssref/css-selectors.htmlhttps://m.w3cschool.cn/cssref/css-selectors.html
bySelector(querySelector)使用文档:https://www.runoob.com/jsref/met-document-queryselector.html	https://m.w3cschool.cn/jsref/met-element-queryselector.html
*/
namespace godking// 对象操作类
class_func = class {ctor( webview,funcName,Selector="",index,childNodes="",childIndex){if index this.index = "[" ++(index-1)++ "]" else this.index = "";if childIndex this.childIndex = "[" ++(childIndex-1)++ "]" else this.childIndex = "";var childNodesIndex = childNodes ++ this.childIndex;};getProp = function(Prop){Prop:="value";return webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ "." ++Prop);}setProp = function(Prop,v=""){Prop:="value";if type(v)==type.string v="'" ++v++ "'";return webview.doScript("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ "." ++Prop++ "=" ++v);}		count = function(){var t;if childNodes {t = webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodes);}else{t = webview.eval("document." ++ funcName ++ "('" ++Selector++ "')");}if type(t) == type.table return ..table.count(t);else return 0;}click = function(){return webview.doScript("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".click()");}submit = function(){return webview.doScript("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".submit()");}getValue = function() { return this.getProp("value") }; setValue = function(v) { return this.setProp("value",v) }; getText = function() { var t = this.getProp("value"); if t!==null return tostring(t); }; setText = function(v) { return this.setProp("value",tostring(v)) }; getChecked = function() { return this.getProp("checked") }; setChecked = function(v=1) { return this.setProp("checked",v?1:0) }; getInnerText = function() { return this.getProp("innerText") }; setInnerText = function(v="") { return this.setProp("innerText",v) }; getOuterText = function() { return this.getProp("outerText") }; setOuterText = function(v="") { return this.setProp("outerText",v) }; getOuterHTML = function() { return this.getProp("outerHTML") }; setOuterHTML = function(v="") { return this.setProp("outerHTML",v) }; getInnerHTML = function() { return this.getProp("innerHTML") }; setInnerHTML = function(v="") { return this.setProp("innerHTML",v) }; getSelectedItemIndex = function(){var idx = this.getProp("selectedIndex"); if idx!==null return idx+1; }setSelectedItemByIndex = function(v){v:=1; v-=1; return this.setProp("selectedIndex",v)}getSelectedItemText = function(){var idx = this.getProp("selectedIndex"); if idx===null return ; return webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".options.item(" ++idx++ ").text");}setSelectedItemByText = function(v=""){for(i=1;this.count();1){if webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".options.item(" ++(i-1)++ ").text")==v {return webview.doScript("document." ++ funcName ++ "('"+Selector+"')" ++ this.index ++ childNodesIndex ++ ".selectedIndex=" ++(i-1));}}} getItemText = function(v){v:=1; v-=1;return webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".options.item(" ++v++ ").text");} getItemCount = function(){var t = webview.eval("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".options");if type(t)==type.table return ..table.count(t); } 				getName = function() { return this.getProp("name") }; getID = function() { return this.getProp("id") }; getHref = function() { return this.getProp("href") }; getSrc = function() { return this.getProp("src") }; getTag = function() { return this.getProp("tagName") }; getType = function() { return this.getProp("type") }; getClass = function() { return this.getProp("className") }; getStyle = function() { return this.getProp("style") }; setHref = function(v) { return this.setProp("href",v) }; setSrc = function(v) { return this.setProp("src",v) }; setTag = function(v) { return this.setProp("tagName",v) }; setType = function(v) { return this.setProp("type",v) }; setClass = function(v) { return this.setProp("className",v) }; setStyle = function(v) { return this.setProp("style",v) }; byParent = function(){return ..godking.class_func(webview,funcName,Selector,index,childNodes++ this.childIndex ++ ".parentNode",null); }byChildS = function(v){return ..godking.class_func(webview,funcName,Selector,index,childNodes++ this.childIndex ++ ".childNodes",v:1); }focus = function(){webview.doScript("document." ++ funcName ++ "('" ++Selector++ "')" ++ this.index ++ childNodesIndex ++ ".focus()");}byIndex = function(v){if childIndex return ..godking.class_func( webview,funcName,Selector,index,childNodes,v:1); else return ..godking.class_func( webview,funcName,Selector,v:1,childNodes,childIndex); }}class webPageOperation {ctor(webview){}; // 获取对象函数focus = function(){webview.focus();}getProp = function(prop){return webview.eval("document."+prop);}setProp = function(prop,v){if type(v)==type.string v="'"+v+"'";return webview.doScript("document."+prop+"="+v);}hideScrollbar = function(){webview.doScript(`document.body.style.overflow='hidden';document.body.style.overflowX='hidden';document.body.style.overflowY='hidden';document.parentWindow.execScript("document.body.style.overflow='hidden';")`)}hideBoder = function(){webview.doScript("document.body.style.border='0px none #CCCCCC';")}addLimit = function(){webview.doScript(`document.οncοntextmenu=function(){return false;};document.onselectstart=function(){return false;};document.onsdragstart=function(){return false;};`)}getTitle = function(){return webview.eval("document.title");}getCookie = function(){return webview.eval("document.cookie");}	setDesignMode = function(v=true){webview.doScript("document.designMode='"+(v?"on":"off")+"'")}back = function(){webview.doScript("window.history.back();")}forward = function(){webview.doScript("window.history.forward();")}find = function(kv){var fd = function(clss,fd){for(i=1;clss.childNodes().count();1){// 检查当前子对象var curChd = clss.childNodes(i);var is = true;for(k,v in kv){if curChd.getProp(k)!==v {is=false;break;}}if is return curChd; // 如果有子子对象,则深入分析当前子对象if curChd.childNodes().count() {var r = fd(curChd,fd);if r return r; }}			}var cls = this.bySelector("html");if !cls.childNodes().count() cls = this.bySelector("body");if cls.childNodes().count() return fd(cls,fd); }// 创建对象操作类实例函数byID = function(v){ return ..godking.class_func(webview,"getElementById",v) };bySelector = function(v){ return ..godking.class_func(webview,"querySelector",v) };byTagNameS = function(v,index){ return ..godking.class_func(webview,"getElementsByTagName",v,index:1) };byNameS = function(v,index){ return ..godking.class_func(webview,"getElementsByName",v,index:1) };byClassNameS = function(v,index){ return ..godking.class_func(webview,"getElementsByClassName",v,index:1) };bySelectorS = function(v,index){ return ..godking.class_func(webview,"querySelectorAll",v,index:1) };}/**intellisense()
godking.webPageOperation = 网页操作类
godking.webPageOperation( wb ) = 初始化网页操作类。参数:webform、webview、webview2 对象
godking.webPageOperation() = !godking_webPageOperation.
end intellisense**//**intellisense(!godking_webPageOperation.)
byID( "__" ) = 通过ID获取元素对象,创建对象操作集。
bySelector( "__" ) = 通过Selector路径获取元素对象,创建对象操作集。
byTagNameS( "__", 1 ) = 通过TagName获取元素对象集合,创建对象操作集。\n参数1:tagName;参数2:对象索引(从1开始)
byNameS( "__", 1 ) = 通过name获取元素对象集合,创建对象操作集。\n参数1:name;参数2:对象索引(从1开始)
byClassNameS( "__", 1 ) = 通过ClassName获取元素对象集合,创建对象操作集。\n参数1:ClassName;参数2:对象索引(从1开始)
bySelectorS( "__", 1 ) = 通过Selector路径获取元素对象集合,创建对象操作集。\n参数1:Selector路径;参数2:对象索引(从1开始)byID() = !godking_webPageOperation_class.
bySelector() = !godking_webPageOperation_class.
byTagNameS() = !godking_webPageOperation_class.
byNameS() = !godking_webPageOperation_class.
byClassNameS() = !godking_webPageOperation_class.
bySelectorS() = !godking_webPageOperation_class.getProp( "__" ) = 获取属性值。参数:属性名
setProp( "__", ) = 设置属性值。参数:属性名、属性值
hideScrollbar() = 隐藏滚动条
hideBoder() = 隐藏边框
addLimit() = 添加鼠标右键菜单、选择文本、拖拽的限制。
getTitle() = 获取标题
getCookie() = 获取cookie
setDesignMode( true ) = 设置设计模式(编辑模式)
back() = 后退
forward() = 前进
focus() = 网页组件获取输入焦点
end intellisense**//**intellisense(!godking_webPageOperation_class.)
getProp( "__" ) = 获取属性值。参数:属性名
setProp( "__", ) = 设置属性值。参数:属性名、属性值count() = 元素总数量。by开头S结束的函数,可以通过该函数获取总元素数量。
click() = 点击元素
submit() = 提交表单
focus() = 网页元素获取输入焦点getValue() = 取value值
setValue( "__" ) = 置value值getText() = 取value值,自动tostring转文本。
setText( "__" ) = 置value值,自动tostring转文本。getChecked() = 取选中状态
setChecked( true ) = 置选中状态getInnerText() = 取innerText
setInnerText( "__" ) = 置innerTextgetOuterText() = 取outerText
setOuterText( "__" ) = 置outerTextgetOuterHTML() = 取outerHTML
setOuterHTML( "__" ) = 置outerHTMLgetInnerHTML() = 取innerHTML
setInnerHTML( "__" ) = 置innerHTMLbyChildS( 1 ) = 创建子元素对象操作集。参数:子元素索引。
byChildS() = !godking_webPageOperation_class.
byParent() = 创建父元素对象操作集。\n!godking_webPageOperation_class.
byIndex( 1 ) = 创建当前元素集(S结尾的)的指定索引的元素的操作集。参数:元素索引。
byIndex() = !godking_webPageOperation_class.getSelectedItemIndex() = 取选择框当前选中项目索引
setSelectedItemByIndex( __ ) = 置选择框当前选中项目索引
getSelectedItemText() = 取选择框当前选中项目文本
setSelectedItemByText( "__" ) = 置选择框当前选中项目文本
getItemText( __ ) = 取指定项目文本。参数:项目索引(从1开始)
getItemCount() = 取项目数量
getName() = 取name
getID() = 取id
getHref() = 取href
getSrc() = 取src
getTag() = 取tagName
getType() = 取type
getClass() = 取class
getStyle() = 取stylesetHref( "__" ) = 置href
setSrc( "__" ) = 置src
setTag( "__" ) = 置tagName
setType( "__" ) = 置type
setClass( "__" ) = 置class
setStyle( "__" ) = 置styleend intellisense**/

参考

https://blog.csdn.net/sdlgq/article/details/131011599

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS开发入门HelloWorld及工具安装

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作,首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网,单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

mysql:在字符串类型的列上创建索引,建议指定索引前缀长度

https://dev.mysql.com/doc/refman/8.2/en/create-index.html#create-index-column-prefixes 在字符串类型的列上创建索引,建议指定索引前缀长度,而没有必要用整个列来创建索引。因为用前面的字符创建索引,查询时并不会比在整列上创建索引慢很…

【LeetCode刷题】-- 165.比较版本号

165.比较版本号 方法&#xff1a;使用双指针 class Solution {public int compareVersion(String version1, String version2) {//使用双指针int n version1.length(),m version2.length();int i 0,j 0;while(i<n || j <m){int x 0;for(; i < n && vers…

鸿蒙OS应用开发者高级认证题库

一、判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错&#xff09; 在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xff0c;justifycontent用于设置子组件在交叉轴…

Linux访问MySQL数据库(包含实验案例)

1、访问MySQL数据库。 1.1、登录到MySQL服务器 经过安装后的初始化过程&#xff0c;MySQL数据库的默认管理员用户名为"root"&#xff0c;密码为空。 [rootyang ~]# mysql -u root //"-u"选项用于指定认证用户有密码的情况下&#xff0c;使用"-p&qu…

Tcon基础知识

1、TCON&#xff0c;就是 Timing Controller 的缩写。从主芯片输出的要在 TFT 显示屏上显示的数据&#xff0c;在经过 TCON 模块后可以变换生成 Panel 可以直接利用的 DATA 信号和驱动器&#xff08;包括 source driver 和 gate driver&#xff09;的控制信号。 TV 市场上 TCO…

【FPGA/verilog -入门学习10】verilog 查表法实现正弦波形发生器

0&#xff0c;需求 用查找表设计实现一个正弦波形发生器 寻址的位宽是10位&#xff0c;数据量是1024个&#xff0c;输出的数据是16位 1&#xff0c;需求分析 数据量是1024个&#xff1a; x linspace(0,2*pi,1024) 输出数据是16位: y范围&#xff1a;0~2^16 -1 0~65535…

【内存函数】

目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到…

学习通【劳动通论】2023章节练习题

社会主义核心价值观24个字是&#xff1a;富强、民主、文明、和谐&#xff0c;自由、平等、公正、法治&#xff0c;爱国、敬业、诚信、友善。 1、“富强、民主、文明、和谐”&#xff0c;是我国社会主义现代化国家的建设目标&#xff0c;也是从价值目标层面对社会主义核心价值观…

探索云测试的方法:优化软件质量的新趋势

随着云计算技术的不断发展&#xff0c;云测试成为提高软件质量和效率的关键方法之一。本文将介绍一些云测试的方法&#xff0c;以帮助团队更好地应对不同的测试需求和挑战。 1. 云测试环境搭建 传统测试中&#xff0c;搭建测试环境可能需要大量的时间和资源。云测试通过提供可扩…

环境搭建及源码运行_java环境搭建_mysql安装

1、介绍 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一 1、源码中涉及到的表&#xff1a;mysql 表&#xff1a;订单、意见反馈、用户基础信息、商品、购物车等表 2、订单属于…

linux高级管理——访问MYSQL数据库

一、认识数据库系统&#xff1a; MySQL数据库系统也是一个典型的C/S(客户端/服务器&#xff09;架构的应用&#xff0c;要访问MySQL数据库需要使用专门的客户端软件。在Linux系统中&#xff0c;最简单、易用的MySQL客户端软件是其自带的mysql命令工具。 1&#xff0e;登录到My…

如何想成为嵌入式工程师?(这些东西您必须知道)

嵌入式的发展怎么样&#xff1f; 嵌入式系统领域一直在迅速发展&#xff0c;伴随着物联网、智能设备、汽车电子、医疗设备等应用的不断增加&#xff0c;对嵌入式技术的需求也在不断扩大。因此&#xff0c;嵌入式领域仍然是一个充满机会的领域&#xff0c;为专业人士提供…

〖大前端 - 基础入门三大核心之JS篇(53)〗- 构造函数与类

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

VMware安装ContOS 7 提示“客户机操作系统已禁用 CPU。请关闭或重置虚拟机。”

目录 实验环境报错截图报错原因猜测&#xff08;根据实验现象&#xff09;解决办法如下 实验环境 Vmware Workstation 17.5 CentOS7 镜像版本&#xff1a;2207-02版本 注意&#xff1a;2009版本并无该错误 报错截图 报错原因猜测&#xff08;根据实验现象&#xff09; CentO…

用AI画个女朋友回家过年,1行Python代码,免费实现

#这才是真功夫# 大家好&#xff0c;这里是程序员晚枫&#xff0c;全网同名。 马上过年了&#xff0c;还是单身的举个爪&#xff01; 今年GPT系列的产品非常火爆&#xff0c;今天给大家分享一下&#xff0c;如何免费用AI代码画1个女朋友。&#x1f447; 直接上代码 大家学习 或 …

Centos7防火墙及端口开启

1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后&#xff0c;默认没有开…

【云原生kubernets】Ingress 功能与应用

一、Ingress 介绍 1.1.Ingress产生原因&#xff1a; 当我们使用Service的时候&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff1a;NotePort和LoadBalancer&#xff0c;但是这两种方式&#xff0c;都有一定的缺点&#xff1a; &#xff08;1&#xff09;Node…

【初阶C++】入门(超详解)

C入门 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用2.3嵌套命名空间 3. C输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用6.1 引用概念6.2 引用特性6.3 …

C++初阶(十五)Stack和Queue

文章目录 一、Stack的模拟实现二、Queue的模拟实现三、容器适配器1、什么是容器适配器2、STL标准库中stack和queue的底层结构3、 deque的简单介绍(了解)1、deque的原理介绍2、deque的缺陷 4、为什么选择deque作为stack和queue的底层默认容器 一、Stack的模拟实现 #include<…