当前位置: 首页 > news >正文

【iOS免越狱】利用IOS自动化WebDriverAgent实现自动直播间自动输入

1.目标

由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就开始下面的操作。

2.操作环境
  • iPhone一台

  • WebDriverAgent

  • mac 安装 Xcode

 3.流程

首先安装WebDriverAgent ,安装教程请看上一篇

web-driver-agent_appium-实现自动点击+滑动屏幕icon-default.png?t=N7T8https://ccccc.blog.csdn.net/article/details/134053551

 界面输入文本 api

[[FBRoute POST:@"/wda/keys"] respondWithTarget:self action:@selector(handleKeys:)],+ (id<FBResponsePayload>)handleKeys:(FBRouteRequest *)request
{NSString *textToType = [request.arguments[@"value"] componentsJoinedByString:@""];NSUInteger frequency = [request.arguments[@"frequency"] unsignedIntegerValue] ?: [FBConfiguration maxTypingFrequency];NSError *error;if (![FBKeyboard typeText:textToType frequency:frequency error:&error]) {return FBResponseWithStatus([FBCommandStatus invalidElementStateErrorWithMessage:error.descriptiontraceback:nil]);}return FBResponseWithOK();
}

 

实现源码

+ (BOOL)typeText:(NSString *)text error:(NSError **)error
{return [self typeText:text frequency:[FBConfiguration maxTypingFrequency] error:error];
}+ (BOOL)typeText:(NSString *)text frequency:(NSUInteger)frequency error:(NSError **)error
{__block BOOL didSucceed = NO;__block NSError *innerError;[FBRunLoopSpinner spinUntilCompletion:^(void(^completion)(void)){[[FBXCTestDaemonsProxy testRunnerProxy]_XCT_sendString:textmaximumFrequency:frequencycompletion:^(NSError *typingError){didSucceed = (typingError == nil);innerError = typingError;completion();}];}];if (error) {*error = innerError;}return didSucceed;
}

方法已经找到,开始调用他

自己写一个 app,安装到手机

获取手机屏幕信息

+(void)window_size{NSLog(@"开始window_size: %@",@"-------------------");NSString* url = @"";url = [NSString stringWithFormat:@"http://127.0.0.1:8100/session/%@/window/size",iPhoneSessionId];[xddHttp reqWithMethodxdd2:url Method:0 HTTPBody:@"" Block:^(NSURLResponse *  response, NSDictionary *  data) {NSLog(@"window_size结果: %@",data);
//        [0]    (null)    @"width" : (long)414
//        [1]    (null)    @"height" : (long)736iPhoneWidth  = [data[@"value"][@"width"] longLongValue];iPhoneHeight = [data[@"value"][@"height"] longLongValue];}];}

 调用输入

+(void)element_value:(NSString*)text
{NSLog(@"开始输入: %@",@"-------------------");NSString* url = @"";url = [NSString stringWithFormat:@"http://127.0.0.1:8100/session/%@/element/38CB6A3B02B28FAFB0754B03D12AA7646ACEA558/value2",iPhoneSessionId];//1// url = [NSString stringWithFormat:@"http://127.0.0.1:8100/session/%@/wda/keys",iPhoneSessionId];//2NSString*body = @"";body = @"{\"text\":\"123好hao\"}";//1body = @"{\"value\":[\"123好hao\\r\\n\"],\"frequency\":10}";//2body = [NSString stringWithFormat:@"{\"text\":\"%@\"}",text];[xddHttp reqWithMethodxdd2:url Method:1 HTTPBody:body Block:^(NSURLResponse * _Nonnull response, NSDictionary * _Nonnull data) {NSLog(@"输入结果: %@",data);}];
}+(void)element_value{[self element_value:@"123好hao"];
}

 开启定时器,实现自动发送

+(void)myTimers{userarr = [self testArr];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 在这里执行你的任务//[self goo:nil];});myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(goo:) userInfo:nil repeats:YES];}

 点击屏幕的输入框,然后输入文字

+(void)goo:(NSTimer *)timer{NSString*msgText = [xddCode getinfo:@"sendText"];NSString*msgTextKu = userarr[sendCount];NSString*text = [NSString stringWithFormat:@"%@%@\\r",msgText,msgTextKu];myAlertController.message=[NSString stringWithFormat:@" [%d / %lu] %@_%@",(sendCount+1),(unsigned long)userarr.count,msgText,msgTextKu];sendCount = sendCount + 1;NSString*url = [NSString stringWithFormat:@"http://127.0.0.1:8100/session/%@/wda/touch/perform",iPhoneSessionId];NSString*body = @"";body = @"{\"actions\":[{\"action\":\"tap\",\"options\":{\"x\":131,\"y\":248}}]}";//点击body = @"{\"actions\":[{\"action\":\"tap\",\"options\":{\"x\":131,\"y\":248}}]}";//点击body = [NSString stringWithFormat:@"{\"actions\":[{\"action\":\"tap\",\"options\":{\"x\":50,\"y\":%ld}}]}",iPhoneHeight-50];[xddHttp reqWithMethodxdd2:url Method:1 HTTPBody:body Block:^(NSURLResponse *  response, NSDictionary *  data) {NSLog(@"点击结果: %@",data);NSString*msgTextKu = userarr[sendCount];NSString*text = [NSString stringWithFormat:@"%@%@%@\\r",msgText,msgTextKu,[xddCode getTime:@"ss"]];[self element_value:text];//输入文字}];}

实现效果

https://live.csdn.net/v/340697icon-default.png?t=N7T8https://live.csdn.net/v/340697

web-driver-agent_appium自动输入

http://www.lryc.cn/news/217605.html

相关文章:

  • Python基础入门例程28-NP28 密码游戏(列表)
  • 乌班图 Linux 系统 Ubuntu 23.10.1 发布更新镜像
  • Java金字塔、空心金字塔、空心菱形
  • 前端 | (十四)canvas基本用法 | 尚硅谷前端HTML5教程(html5入门经典)
  • 206.反转链表
  • SpringBoot项目从resources目录读取文件
  • SQL实现根据时间戳和增量标记IDU获取最新记录和脱IDU标记
  • 京东数据平台:2023年9月京东智能家居行业数据分析
  • 计算两个时间之间连续的日期(java)
  • Kali Linux:网络与安全专家的终极武器
  • Leetcode—101.对称二叉树【简单】
  • 判断是否工作在docker环境
  • 文件上传学习笔记
  • 【GitLab CI/CD、SpringBoot、Docker】GitLab CI/CD 部署SpringBoot应用,部署方式Docker
  • GitLab(2)——Docker方式安装Gitlab
  • [100天算法】-数组中的第 K 个最大元素(day 54)
  • 每日一题411数组中两个数的最大异或值(哈希表、前缀树:实现前缀树)
  • 机场运行关键指标计算规则
  • 基于元学习神经网络的类人系统泛化
  • 力扣第322题 零钱兑换 c++ java 动态规划
  • uniapp 子组件内使用定时器无法清除
  • 加载动态库的几种方式
  • 视频转序列图片:掌握技巧,轻松转换
  • python 数据挖掘库orange3 介绍
  • Android和JNI交互 : 常见的图像格式转换 : NV21、RGBA、Bitmap等
  • AndroidAuto 解决连接手机启动AA屏闪一下问题
  • jbase实现业务脚本化
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)
  • 基于设深度学习的人脸性别年龄识别系统 计算机竞赛
  • 0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发