UI自动化必备:Appium TouchAction手势操作详解与实战
做App UI自动化的人迟早会被同一个问题卡住验证码滑块怎么拖手势密码怎么画相册里那张照片怎么放大缩小的这些操作用普通的tap和click根本写不出来因为它们背后不是简单的坐标点击而是一整套“手指从按下、移动到抬起”的连续动作。这就轮到TouchAction登场了。它是Appium里专门处理高级手势的API能模拟长按、双击、滑动、拖拽甚至双指捏合。我这几年在多个App项目里做UI自动化从最初只会点按钮到后来被各种变态交互逼着去啃手势库踩的坑能装一箩筐。这篇就把TouchAction的核心用法、实现细节和那些文档里不会写的坑一次性说清楚适合已经能跑通Appium基础点击、开始接触复杂交互的测试开发。1. 从“点一下”到“画个圈”为什么UI自动化必须搞定手势操作大多数App的交互可以分为两类一类是离散操作比如点击、输入一个动作对应一个结果另一类是连续操作比如滑动列表、拖动地图、绘制解锁图案需要手指在屏幕上按照一条路径移动并在过程中产生持续反馈。如果只靠tap和sendKeys第一类能应付个七七八八但第二类基本是抓瞎。你没法用tap去模拟一个从坐标(100, 200)移动到(300, 500)的过程因为tap只负责“按下并抬起”没有中间轨迹。这时候就需要一个能描述“完整手指路径”的API。TouchAction解决的就是这个问题。它的设计思路很直观你把屏幕坐标系当成一张画布把你想要的手指操作拆解成一系列原子动作——按下、移动、等待、抬起——然后把这些动作按顺序拼成一个队列交给Appium服务端由服务端转换成对应端上的真实手势事件。这种“动作拼队列”的思路和很多游戏引擎里的输入系统很像不是直接说“帮我画个圈”而是说“先落笔、移动五步、再抬笔”。底层设备驱动不关心你画的是什么它只负责按照指令序列逐步执行。这也是为什么TouchAction能做出各种自定义手势——只要你能把轨迹拆成坐标点序列它就能执行。我在实际项目里最常遇到的场景是电商App的首页轮播图需要左滑切换视频App的评论页需要上滑收起金融App的手势密码登录需要按顺序划过9个点。这些交互如果不做自动化回归测试就只能靠人工一遍遍点效率极低。而只要掌握了TouchAction这些操作都可以在脚本里稳定复现。2. TouchAction到底是什么坐标系、动作列表与执行引擎2.1 一次滑动背后的数学模型要在自动化里描述手势第一步是建立坐标系。Appium的坐标原点在屏幕左上角x轴向右y轴向下单位是像素。但这套坐标系不等于安卓的DisplayMetrics也不是iOS的point它遵循的是当前设备返回的测试坐标系大部分情况下等同于分辨率像素但某些设备存在dp和px的坑。举个例子一台分辨率为1080x2400的手机屏幕上某一点的坐标是(540, 1200)这直接对应像素。但如果你用driver.findElement(...).getLocation()拿到的是元素左上角坐标用getSize()拿到的是元素宽高这两个值加在一起才是元素中心点坐标。这是一个特别容易出错的细节。一次滑动在数学上就是一条从起点到终点的线段。要做线性滑动至少需要两个坐标点按下起点移动到终点然后抬起。但如果要做曲线手势比如画图案就需要把曲线离散成很多小段把这串小段上的点逐一传给移动动作。点的密度越高轨迹越平滑但耗时也越长执行越容易超时。TouchAction内部维护的是一个TouchAction对象你可以通过链式调用不断追加动作。执行时Appium将整个动作序列发送给底层驱动底层再转成系统级的触发事件。这个过程是异步的也就是说每一步系统都会尽可能快地执行但不会等你的脚本按人类手速去“慢慢画”所以自动画手势会比真人快很多。2.2 TouchAction的动作队列如何拼装TouchAction提供的原子动作非常有限但组合起来千变万化。核心包括press在某个坐标按下手指不抬起moveTo从当前点移动到目标点手指仍然保持按下状态wait等待指定毫秒用于模拟思考时间或长按保持release抬起手指tap相当于是press加立即release的快捷方式longPress相当于是press加wait再加release的快捷方式这六个动作就是全部素材。你所有复杂手势都是这几个动作的不同排列组合。好比乐高积木基础块就那几样但能拼出飞机大炮。拼装顺序非常关键。一个经典错误是先press没wait就直接moveTo手势虽然能执行但很多手机系统会把快速滑动识别为“轻扫”而不是“拖动”导致的后果是列表惯性滑动了很远而不是准确停在目标位置。解决方法是在press之后加一个短短的wait(100)让系统感知到手指确实按压住了再进行移动。另一个关键点是moveTo的坐标参考系。很多人以为moveTo的坐标是绝对坐标但实际不是moveTo是在当前手指位置的基础上再偏移多少。比如当前按下在(100,100)执行moveTo(50, 50)最终位置是(150,150)而不是(50,50)。我第一次用的时候在这里栽过跟头写了个拖拽结果每次都是斜着飞的。这在老版本的Appium中尤其明显。新版里为了符合W3C标准某些封装库开始支持绝对位置但如果你还在用传统的TouchAction务必记住press里的坐标是绝对坐标moveTo里的坐标是相对偏移。这组混用是新手最容易踩的坑没有之一。3. 实战几种高频手势的Java实现与参数详解3.1 长按、拖拽、滑动最简单的三个动作先看长按。长按的核心是press加足够长的wait再加release。在Java客户端java-client7.x或8.x里标准写法是TouchAction action new TouchAction(driver); action.press(PointOption.point(540, 1200)) .waitAction(WaitOptions.waitOptions(Duration.ofSeconds(2))) .release() .perform();这里的PointOption.point(x, y)是坐标参数WaitOptions.waitOptions(Duration.ofSeconds(2))表示按压2秒。perform()是触发执行。注意不管拼了多少动作只有调用了perform()这一串动作才会真正发送到设备上。很多项目里长按之后还伴随拖拽比如长按一个图标再把它拖到删除区域。这时候不能加太长的wait否则系统会进入长按选中态反而干扰拖拽。经验值是wait控制在300ms到800ms之间既能让系统识别为按压又不会触发额外的上下文菜单。再看拖拽。拖拽和滑动的区别在于起点和终点通常有明确的元素比如把A元素拖到B元素。此时不要自己去算坐标更好的方式是拿到两个元素的中心点再传给press和moveToPoint center1 element1.getCenter(); Point center2 element2.getCenter(); TouchAction action new TouchAction(driver); action.press(PointOption.point(center1.x, center1.y)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(500))) .moveTo(PointOption.point(center2.x - center1.x, center2.y - center1.y)) .release() .perform();注意上面代码里moveTo用的是偏移量终点减起点。如果直接传center2.x, center2.y那实际到达的位置其实是center2 (center2 - center1)跑到屏幕外面去了。这个边界情况我专门拿真机验证过确实是相对位置绝对不是文档里轻描淡写的那种“移动到目标点”。滑动则更简单但滑动有惯性问题。如果只是做列表的滚动不需要特别精准直接快速滑动即可。可一旦涉及“滑动到某个位置并停住”就必须控制速度和等待。我常用的方案是分段移动比如从左滑到右分成两段// 第一段快速滑动 action.press(PointOption.point(startX, startY)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(100))) .moveTo(PointOption.point(offsetX/2, offsetY/2)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(100))) .moveTo(PointOption.point(offsetX/2, offsetY/2)) .release() .perform();两段移动之间加了wait系统就不会把它当成一次超快速的甩动而是更接近真实手指的滑动轨迹。这样列表的滚动距离更可控不容易出现“滑过头”的情况。3.2 手势密码绘制坐标计算与节奏控制手势解锁是TouchAction最能体现价值的场景。一个标准的3x3手势密码总共9个点你需要在两点之间滑动连线。系统的判定不是看你最终抬起的位置而是看你的路径是否经过某个点。首先要拿到9个点的坐标。可以通过driver.getWindowsSize()拿到屏幕宽高再算出3列中心的x坐标和3行中心的y坐标。注意不同手机的安全区会影响顶部坐标最好用元素定位拿到解锁控件的实际位置。假设解锁控件左上角坐标是(startX, startY)控件宽度为width高度为height那么三个列中心就是startX width/6、startX width/2、startX width*5/6对应行中心同理。注意系统判断手势点时往往不是完全精确到像素而是有一个容差范围所以坐标算到像素级足够用。画一个“Z”形手势从左上角点开始经过中间点到右上角再到左下角最后到右下角。用TouchAction实现TouchAction action new TouchAction(driver); action.press(PointOption.point(p1.x, p1.y)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(300))) .moveTo(PointOption.point(p2.x - p1.x, p2.y - p1.y)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) .moveTo(PointOption.point(p3.x - p2.x, p3.y - p2.y)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) .moveTo(PointOption.point(p4.x - p3.x, p4.y - p3.y)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) .moveTo(PointOption.point(p5.x - p4.x, p5.y - p4.y)) .release() .perform();每一步移动后加wait非常关键。不加wait的话动作序列会以极快的速度执行有些定制化ROM会直接判定为无效手势。加了wait之后脚本的速度贴近真人画线速度识别率大幅提高。我实测过每个中间点停留200ms~300ms在小米、华为、三星上都能稳定通过。这里再提醒一句moveTo传的是相对偏移所以代码里看起来是p2 - p1、p3 - p2。如果你用的是Python客户端的TouchAction规则也一样。只是Java客户端的类名在8.x版本后改成了TouchActions这个不要混淆主要用的还是io.appium.java_client.TouchAction9.x版本里直接推荐用W3CActions了。后面会细说兼容性。3.3 双指缩放与旋转MultiTouchAction的救场安卓上的地图、图片查看器、电子书阅读器经常会遇到双指捏合放大。TouchAction只能模拟一根手指这时候就需要MultiTouchAction。MultiTouchAction的字面意思是“多点触控动作”它允许你同时执行多个TouchAction。比如模拟双指捏合你可以创建两个TouchAction一个从左上方向中心移动一个从右下方向中心移动然后把它们叠加到同一个MultiTouchAction里同时执行。TouchAction finger1 new TouchAction(driver) .press(PointOption.point(400, 800)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) .moveTo(PointOption.point(-100, -100)) .release(); TouchAction finger2 new TouchAction(driver) .press(PointOption.point(800, 400)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(200))) .moveTo(PointOption.point(100, 100)) .release(); MultiTouchAction multi new MultiTouchAction(driver); multi.add(finger1).add(finger2).perform();这里finger1从(400,800)向左上移动(-100,-100)finger2从(800,400)向右下移动(100,100)相当于两只手指同时向外张开模拟放大。做双指动作时最大的坑是“同时性”。MultiTouchAction并不是严格意义上的同帧并发而是Appium服务端把两个动作按顺序排得足够紧凑让系统认为是同时发生的。如果两个动作的指令间隔过大某些系统会识别成“先一根手指再一根手指”手势就会失效。所以两个TouchAction内部的步骤要尽量保持一致不要一个里加了大量wait另一个不加。另外一个真实的经验真机上模拟双指成功率和设备性能强相关。低端机执行MultiTouchAction时偶尔会出现一个手指动了另一个没反应的情况。我的常规做法是在两个动作里都加上相同的小wait(50)给系统一点同步时间实测成功率能提升不少。4. 和Appium Inspector配合使用元素定位与坐标获取的实操默契4.1 Inspector在TouchAction调试中的真正用途很多人以为TouchAction就是纯坐标操作不需要元素定位所以打开了Appium Inspector也不知道要干嘛。其实Inspector在调试手势时有两个重要用途一是确认坐标和元素位置关系二是分析手势应该作用在哪个元素上。Appium Inspector就像一台“手机放大镜”它能把当前界面渲染成一张带层级结构的XML树树上的每个节点都包含bounds属性比如[108,720][972,1200]。这个bounds就是元素在屏幕上的坐标位置可以直接换算成press和moveTo所需的数据。比如我想滑动某张卡片直到它消失。正常思路是查找卡片元素拿到它的坐标然后滑动。但如果卡片元素在复用列表里findElement可能定位到第一张卡而我想滑的是第三张。这时候利用Inspector查看第三张卡的坐标再用手势执行比费劲写相对定位更快捷。Inspector还能帮你确认元素是否真的可交互。有些元素虽然能看到但它的点击区域被另一个悬浮层遮挡tap点击会点到悬浮层上。在Inspector里切到“手势预览”或者查看层级就能发现哪个节点在最上层。我在调试一个App的广告浮层时就遇到过类似情况明明点的是关闭按钮但手势总是点到浮层边缘最后在Inspector里才看到是按钮坐标自己算错了。4.2 从坐标到元素尽量别把坐标写死TouchAction虽然用坐标但不代表你一定要把坐标硬编码在脚本里。硬编码的坐标换个分辨率就全废了维护成本极高。更优雅的方案是先拿到元素的Rect或bounds然后按比例计算手势点。比如有一个“下一步”按钮已知它的bounds是[x1, y1][x2, y2]我想模拟手指从按钮左边缘滑到右边缘。那么起点x可以设为x1 (x2 - x1) * 0.2终点设为x1 (x2 - x1) * 0.8y取中心线。这样的手势点会随着元素位置自动变化不同分辨率下都能用。结合Appium Inspector我们可以先用Inspector定位到目标元素拷贝xpath或者id在代码里用driver.findElement(...)获取坐标再传给TouchAction。这样坐标就是动态计算的脚本的复用性会高很多。我一般会在项目里封装一个GestureUtils工具类内部提供getCenter(WebElement)、getPointByRatio(WebElement, ratioX, ratioY)等方法把手势坐标计算全部收口。这样测试用例里写手势时就非常干净只关心业务逻辑不用跟像素打交道。5. 常见问题排查实录5.1 手势不生效、坐标偏移、滑动过快失效问题一perform()报了InvalidCoordinatesException。这个最常见的原因是press的坐标超出了屏幕范围。尤其在做相对移动时如果起点加上偏移量后跑到屏幕外系统会直接报错。排查方法打印屏幕宽高和实际坐标值肉眼看一下是否越界。问题二手势不生效但也没报错。这种情况优先检查moveTo的坐标系。我之前就是死记了“moveTo用相对坐标”结果在某个版本里它变成了绝对坐标少部分封装有差异导致每次手势都偏了一大截。解决办法写一个固定的小滑动调试比如从(200,500)滑到(300,500)观察实际效果如果你的滑动距离是100像素说明是相对如果一下滑到了远处说明是绝对。一次就能试出来。问题三滑动过快导致列表过度滚动。前面提过解决方式是加wait。但注意wait只对后续动作起间隔作用如果你只需要在滑动结束时停住可以在release前不加wait而是在滑动完成后单独用Thread.sleep(500)等待UI稳定。两种方式各有优劣按场景选择。问题四坐标偏移由什么导致通常原因是系统状态栏、导航栏、安全区不同。安卓上不同ROM对全面屏手势的适应程度不一样导致真实的UI坐标和Appium获取到的坐标存在少量偏移。遇到此类问题优先在Inspector里看元素的bounds是否和实际点击位置一致如果不一致需要调整mobile上的坐标偏移参数或者使用更精准的元素定位。5.2 TouchAction过时了新项目还能用吗这是一个绕不开的现状TouchAction已经过时了。在Appium 2.0及更新的客户端库中官方推荐使用的是基于W3C WebDriver规范的Actions接口Java中是W3CActionsPython中是ActionChains或WebDriver的action。TouchAction之所以过时是因为W3C标准化了输入源input source的概念把触摸、鼠标、键盘、滚轮都统一成了一组动作描述。相比TouchActionW3CActions更规范对系统级手势的支持更底层也解决了之前iOS和安卓行为不一致的部分问题。但老项目里还有大量基于TouchAction的用例短期迁移成本高所以如果你还在维护老框架把TouchAction吃透一样有价值。而且在新框架迁移时你能更清楚地理解新旧两种API之间的对应关系迁移起来更顺。如果新起项目建议直接用W3CActions。它的基本用法比如模拟滑动在Java里长这样WebElement element driver.findElement(By.id(...)); new Actions(driver) .clickAndHold(element) .moveByOffset(200, 300) .release() .perform();但这里有个坑Actions做的通用鼠标键盘动作在触摸屏上不一定都支持尤其双指缩放还是要依赖MobileGesture之类的能力。所以并不是说TouchAction完全被消灭而是它的一部分场景被新API接管了另外一些复杂手势需要在Capabilities里配置。如果你在升级客户端库时发现TouchAction类找不到不要慌检查一下引入的包名。在java-client 7.x里是io.appium.java_client.TouchAction到了8.x还可能存在到了9.x就可能移除了。看官方文档总是最靠谱的不要只靠搜老文章因为那些老文章很可能已经过时。6. 我的几点实操体会先聊一个最容易忽略的细节perform()之前的动作拼装每一步都不要重复创建新对象。我见过有人每次调用moveTo都重新new TouchAction结果只有最后一个动作生效。正确的姿势是在一个链式表达式里把所有动作写完然后一次性perform()。再聊环境层面。TouchAction对Appium服务端版本比较敏感。老版本客户端配新版本服务端或者反过来很容易出现io.appium.java_client中方法签名不匹配的问题。我自己维护项目时一般固定一套版本组合比如Appium server用1.22.xjava-client用8.0.0很少同时升级。等项目统一升级到Appium 2.x时再一起换新写法避免中间态的不兼容。最后如果你想上手练手可以从自家项目里最简单的一个列表滑动开始先把单个TouchAction跑通再逐步尝试长按、拖拽、多指。等你能用手势同时操作两个坐标点和两个元素时你对Appium的掌控感会完全不一样。别被“高级手势”四个字吓住它不过是把手指动作拆成顺序执行的一串指令罢了。

相关新闻

冬季劳保手套防滑全解析:材质、纹路与工况匹配

冬季劳保手套防滑全解析:材质、纹路与工况匹配

赶在寒潮里连续搬了两天货,手上的线手套换成加绒加厚款后,问题来了:手指头是暖和了,可抓钢管、搬纸箱的时候,东西老往手里“滑”出去。有一次一捆钢筋差点从掌心里脱手,多亏旁边工友眼疾手快用脚挡了一下。…

2026/10/11 5:20:39 阅读更多 →
.NET Core WebApi 文件上传下载:流式处理、大文件分片与断点续传实战

.NET Core WebApi 文件上传下载:流式处理、大文件分片与断点续传实战

简介:面向 .NET Core WebAPI 初、中级开发者的文件上传与下载服务示例工程,完整演示了基于 IFormFile 的文件接收、请求解析、磁盘保存、响应输出以及下载时响应头的设置,并覆盖异步处理、异常捕获、安全校验等常见实现思路。压缩包共五十个文…

2026/10/11 5:20:39 阅读更多 →
数据治理与决策协同:不同数据分析架构的支撑能力对比

数据治理与决策协同:不同数据分析架构的支撑能力对比

导语 对于很多企业来说,数据分析架构的选择直接影响决策质量与业务增长,缺乏规范数据治理的决策更容易出现偏差和风险。不少企业仍在使用分散的Excel或自研架构支撑业务分析,但随着业务规模扩大,这些架构往往很难支撑全企业统一数…

2026/10/11 5:20:39 阅读更多 →

最新新闻

ImageJ Windows版从闪退到批量出图:内存设置、宏批处理与插件安装全攻略

ImageJ Windows版从闪退到批量出图:内存设置、宏批处理与插件安装全攻略

简介:这款ImageJ Windows版本采用64位Java 8捆绑,开箱即用,适合生物医学、材料科学等领域研究人员进行图像分析与测量。资源共430个文件,压缩包约47.72MB,以ijm宏、dll动态库、jar插件和java源码为主,同时内…

2026/10/11 13:07:48 阅读更多 →
YCBlogs算法笔记:选择排序深度解析——直接选择排序与树形锦标赛排序原理及Java实现

YCBlogs算法笔记:选择排序深度解析——直接选择排序与树形锦标赛排序原理及Java实现

教程技术博客文档 【免费下载链接】YCBlogs 技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网络协议知识点;部分fl…

2026/10/11 13:07:48 阅读更多 →
张掖市30米DEM数据处理:坐标系检查与裁剪避坑指南

张掖市30米DEM数据处理:坐标系检查与裁剪避坑指南

简介:这是一套面向地理信息系统学习者与科研人员的区域高程数据包,内含甘肃省张掖市及周边地区三十米分辨率的数字高程模型,并附有行政边界矢量文件,可服务于地形识别、坡向坡度分析、水文模拟和城市规划等任务。数据包共十二个文…

2026/10/11 13:07:48 阅读更多 →
Docker 19.03.9离线部署:本地yum源与镜像导入实战

Docker 19.03.9离线部署:本地yum源与镜像导入实战

简介:面向需要在内网或离线环境部署容器服务的运维与开发人员,这份docker19.03.9离线部署工具提供了完整的安装物料,免去逐台机器联网拉取依赖的麻烦,适合网络受限机房、内网生产环境或需要统一Docker版本的团队使用。压缩包约57.…

2026/10/11 13:07:48 阅读更多 →
32MB系统运维工具箱:从硬件检测到SECS/GEM调试的实战拆解

32MB系统运维工具箱:从硬件检测到SECS/GEM调试的实战拆解

1. 项目概述:32MB 的容量,凭什么装下整个运维工作台做系统运维这行,最怕的不是故障本身,而是故障来了手里没趁手的家伙。经历过那种现场环境:客户机房的机器亮了红灯,你掏出U盘却发现里面只有个大而全的“全…

2026/10/11 13:07:48 阅读更多 →
Personal Agent走到岔路口:对话是起点,还是终点

Personal Agent走到岔路口:对话是起点,还是终点

编辑:前沿在线 编辑部过去一个月,Personal Agent 的热度集中爆发。Meta 的 Muse、OpenAI 的 Dots 先后亮相,前者打通云端邮件、日历、支付全链路,后者连接四千多款应用替人办事。行业里几乎一边倒的声音是:App 的时代结…

2026/10/11 13:06:47 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →