C# CefSharp 输入内容,点击按钮,并且滑动。
前言
帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。

遇到问题
1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了,涉及react.js(猜测)。
2,滑动往右拖的时候,快点终点时就要提前必须慢慢的拖过去,快得话,会滑动失败。
C#代码:
string ph = textBox1.Text.Trim();
//拼接js要的输入内容
string code = "let input = document.getElementById(\"phone\");input.value = '" + ph + "';let event = new Event('input', { bubbles: true });event.simulated = true;let tracker = input._valueTracker;if (tracker) {tracker.setValue(input); }input.dispatchEvent(event);setTimeout(() => {document.getElementsByClassName('timer-button')[0].click();}, 3000);";
try
{Task task = Task.Run(() =>{chromiumWebBrowser1.GetMainFrame().ExecuteJavaScriptAsync(code);});if (task.Wait(5000)){Task.Run(() =>{Thread.Sleep(5000);//浏览器执行js代码var btss = csbrowser.EvaluateScript(chromiumWebBrowser1.GetMainFrame(), Properties.Resources.CSS_JS2);csbrowser.WaitBusy(chromiumWebBrowser1, 30, 1000);List<string> lisTT = btss.Split(',').ToList();int x = int.TryParse(lisTT[0], out int result_X) ? result_X : 0;int y = int.TryParse(lisTT[1], out int result_Y) ? result_Y : 0;var host = chromiumWebBrowser1.GetMainFrame().Browser.GetHost();//按住鼠标鼠标左键chromiumWebBrowser1.GetBrowserHost().SendMouseClickEvent(x + 15, y + 20, MouseButtonType.Left, false, 1, CefEventFlags.None);//滑动数据List<int> removeInt = new List<int>();// 160removeInt.Add(130);removeInt.Add(20);removeInt.Add(30);removeInt.Add(30);removeInt.Add(10);//遍历滑动距离foreach (int item in removeInt){x = (x + item);Thread.Sleep(30);host.SendMouseMoveEvent(x, y, false, CefEventFlags.LeftMouseButton);}//抬起鼠标左键host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);});};}
catch (Exception)
{throw;
}
js代码,获取坐标。
var obj = document.getElementsByClassName("boxStatic ");
var es = document.getElementsByTagName("div");for (var i = 0; i < es.length; i++) {if (es[i].className.indexOf("boxStatic") >= 0 ) {obj = es[i];break;}}function GetObjPos(ATarget) {var target = ATarget;var pos = new CPos(target.offsetLeft, target.offsetTop);target = target.offsetParent;while (target) {pos.x += target.offsetLeft;pos.y += target.offsetTop;target = target.offsetParent;}return pos;
}
function CPos(x, y) {this.x = x;this.y = y;
}[ GetObjPos(obj)['x'], GetObjPos(obj)['y']].toString();
该文为原创文章,转载请注明原文出处
本文章博客地址:C# CefSharp 输入内容,点击按钮,并且滑动。
Author:靓仔建gaolian1025
(待业中,希望帮助到各位,大家的支持是创作最大动力!)
相关文章:
C# CefSharp 输入内容,点击按钮,并且滑动。
前言 帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。 遇到问题 1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了&a…...
历经15年,比特币以强势姿态进军华尔街!270亿美元投资狂潮引发市场震荡!
本月,比特币庆祝了它的15岁生日,并以强势的姿态进军华尔街。最近美国交易所开始交易的比特币交易所交易基金(ETF),已经获得了投资者的广泛接受。这一进展标志着比特币作为一种年轻资产迈向成熟的重要里程碑。 根据Glas…...
GBASE南大通用的接口程序GBase ADO.NET
GBase ADO.NET 是一个提供.NET 应用程序与 GBase 数据库之间方便、高效、 安全交互的接口程序,使用 100%纯 C#编写,并继承了 Microsoft ADO.NET 类。 开发人员可以使用任何一种.NET 开发语言(C#、VB.NET、F#)通过 GBase ADO.NET 操…...
算法训练营Day57(回文子串--总结DP)
647. 回文子串 647. 回文子串 - 力扣(LeetCode) class Solution {public int countSubstrings(String s) {int len s.length();//i到j这个子串是否是回文的boolean [][] dp new boolean[len][len];int res 0;for(int i len-1;i>0;i--){for(int …...
使用OpenCV从一个矩阵提取子矩阵
介绍opencv的两个函数:Range()和Rect() Range()是用于表示一个范围的类。它的构造函数有两个整数参数,分别表示范围的起始和终止索引。这个范围包括起始索引但不包括终止索引。 cv::Range(int start, int end); /* 在OpenCV中,cv::Range() …...
微信云托管:基本使用指南
微信云托管 🚨推荐:微信云托管:基本使用指南 确实是个好平台,部署个项目很简易,免去了很多运维上的事情。 一、微信云托管 github 流水线配置 和 端口号 首先,这里的主体(宿主机),指的就是你的…...
WEB前端IDE的使用以及CSS的应用
IDE的使用 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…...
python中排序函数sorted的简单运用
# 假设a里面的()分别对应的x,y,w,h 即 (x,y,w,h) a [(2,3,1,2),(4,1,2,2),(1,6,2,1)] # a:传入的列表 # key 排序的数据 keylambda x:x[n] 是固定写法,里面的n代表你按照()中第几个数据的值排序 # eg:我们这里是x:x[0]表示我们按x排序, 如果改成x:x[1]则按y排序 # …...
k8s的helm
1、在没有helm之前,部署deployment、service、ingress等等 2、helm的作用:通过打包的方式,deployment、service、ingress这些打包在一块,一键部署服务、类似于yum功能 3、helm:官方提供的一种类似于仓库的功能&#…...
[MySQL]基础的增删改查
目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …...
简易播放器 以及触发的异常
jl 1.0.jar 架包导入步骤: 1.读取到MP3音频文件 2.创建播放器对象,传入音频文件 3.开始播放 package com.ztt.Demo01;import java.io.FileInputStream; import java.io.FileNotFoundException;import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.…...
【Flutter跨平台插件开发】如何实现kotlin跟C++的相互调用
【Flutter跨平台插件开发】如何实现kotlin跟C的相互调用 kotlin 调 c 在 Kotlin 中,可以使用 JNI (Java Native Interface) 来调用 C 代码 调用步骤: 创建 C 文件并实现函数。 // example.cpp #include <jni.h>extern "C" JNIEXPORT jstring J…...
Apache SeaTunnel社区荣获“2023快速成长开源项目”奖项
在这个开源理念推动技术创新和全球协同发展的时代,SeaTunnel社区在开放原子开源基金会举办的2023年开源项目评选中脱颖而出,荣获“2023快速成长开源项目”殊荣。 这个奖项不仅仅是对Apache SeaTunnel社区过去一年发展速度和质量的认可,更是对…...
Unity 桥接模式(实例详解)
文章目录 示例1:角色与装备系统示例2:UI控件库示例3:渲染引擎模块示例4:AI决策树算法示例5:物理模拟引擎 在Unity游戏开发中,桥接模式(Bridge Pattern)是一种设计模式,它…...
Xftp连接不上Linux虚拟机的原因解决方法
前言: 在当今数字化时代,远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而,有时候,面对Xftp连接不上Linux虚拟机的问题,我们可能感到困惑和无措。这个看似小问题可能导致工作中断,因…...
代码随想录刷题笔记 DAY12 | 二叉树的理论基础 | 二叉树的三种递归遍历 | 二叉树的非递归遍历 | 二叉树的广度优先搜索
Day 12 01. 二叉树的理论基础 1.1 二叉树的种类 满二叉树:除了叶子节点以外,每个节点都有两个子节点,整个树是被完全填满的完全二叉树:除了底层以外,其他部分是满的,底部可以不是满的但是必须是从左到右连…...
Linux问题 apt-get install时 无法解析域名“cn.archive.ubuntu.com”
问题描述: 在安装程序时会出现无法解析域名的错误 解决办法: 1、编辑文件 sudo vim /etc/resolv.conf 2、在最后加上(按键 i 进入编辑模式) nameserver 8.8.8.8 3、保存退出(:wq)...
蓝桥--鸡哥的购物挑战OJ(4169)
题目: 思路: 暴力: 直接枚举所有得偶数区间,找最大值,n2超时 优化: 分类讨论,只要醉倒不重不漏得分类不出意外就能AC了 图中的选择方式很简单了,不做解释了。 AC代码(我的代码可…...
MySQL--删除数据表(6)
MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法: DROP TABLE table_name ; -- 直接删除表,不检查是否存在 或 DROP…...
常用界面设计组件 —— 时间日期与定时器
2.7 时间日期与定时器2.7.1 时间日期相关的类2.7.2 日期时间数据与字符串之间的 转换2.7.3 QCalendarWidget日历组件2.7.4 定时器 2.7 时间日期与定时器 2.7.1 时间日期相关的类 时间日期是经常遇到的数据类型,Qt中时间日期类型的 类如下: QTime &…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...
