if 1>0 then scrp = "touchios_TK" Ver = "touchios_TK 2026 0915 0001 v4.00.410" GATEWAY_TASK_PAYLOAD_FILE = "/var/mobile/Media/1ferver/lua/scripts/yk_task_payload.json" GATEWAY_CONFIG_FILE = "/var/mobile/Media/1ferver/lua/scripts/yk_gateway_config.json" -- Gateway 地址不再写死;启动时按手机当前 WiFi 网段自动发现小主机。 DEFAULT_GATEWAY_URL = "" GATEWAY_AUTO_DISCOVERY = true GATEWAY_SCAN_MAX_HOST = 254 DEFAULT_TASKDOMAIN = "" DEFAULT_GATEWAY_PORT = 18083 DEFAULT_TOUCHIOS_OPENAPI_PORT = 46952 DEFAULT_HEARTBEAT_INTERVAL = 30 DEFAULT_TASK_PULL_INTERVAL = 30 DEFAULT_GATEWAY_RETRY_INTERVAL = 30 DEFAULT_SCRIPT_HEARTBEAT_INTERVAL = 30 if 1>0 then logfile0 = "/var/mobile/Media/1ferver/log/".."touchios_TK_xxxx.log" ipdomain = "43.163.205.71" taskdomain = "" gateway_url = "" taskdomain2 = "https://boxyun.top" VIDEO_MEDIA_BASE_URL = "https://xunhuoyun.com" end end function yk_toast(msg, sec) if type(toast) == "function" then local ok = pcall(toast, msg, sec or 2) if ok then return true end end if sys and sys.toast then pcall(sys.toast, msg, sec or 2) return true end return false end function normalize_taskdomain(raw) if type(raw) ~= "string" then return "" end local value = string.gsub(raw, "%s+", "") if value == "" then return "" end if not string.match(value, "^https?://") then value = "http://"..value end value = string.gsub(value, "/+$", "") return value end function normalize_gateway_url(raw) if type(raw) ~= "string" then return "" end local value = string.gsub(raw, "%s+", "") if value == "" then return "" end if not string.match(value, "^https?://") then value = "http://"..value end value = string.gsub(value, "/+$", "") return value end function load_gateway_url_config() local content = file.reads(GATEWAY_CONFIG_FILE) if type(content) ~= "string" or string.len(content) < 3 then return "" end local raw = string.gsub(content, "^%s+", "") raw = string.gsub(raw, "%s+$", "") if string.match(raw, "^https?://") then return normalize_gateway_url(raw) end local ok, data = pcall(json.decode, raw) if ok and type(data) == "table" then return normalize_gateway_url(data.gatewayUrl or data.GatewayUrl or data.url) end return "" end function save_gateway_url_config(url) local normalized = normalize_gateway_url(url) local body = json.encode({ ["gatewayUrl"] = normalized, ["updatedAt"] = os.date("!%Y-%m-%dT%H:%M:%SZ") }) file.writes(GATEWAY_CONFIG_FILE, body) return normalized end function gateway_url_subnet(url) if type(url) ~= "string" then return nil end local a, b, c = string.match(url, "https?://(%d+)%.(%d+)%.(%d+)%.%d+") if a == nil then return nil end return a.."."..b.."."..c end function gateway_collect_scan_subnets() local seen = {} local subnets = {} local function add(subnet) if type(subnet) == "string" and subnet ~= "" and seen[subnet] ~= true then seen[subnet] = true table.insert(subnets, subnet) end end add(gateway_url_subnet(gateway_url)) if DEFAULT_GATEWAY_URL ~= "" then add(gateway_url_subnet(DEFAULT_GATEWAY_URL)) end if type(device_wifiIP) == "string" then local a, b, c = string.match(device_wifiIP, "^(%d+)%.(%d+)%.(%d+)%.%d+$") if a ~= nil then add(a.."."..b.."."..c) end end return subnets end function gateway_health_ok(base_url) if type(base_url) ~= "string" or base_url == "" then return false end local url = normalize_gateway_url(base_url).."/health" local c, h, r = http.get(url, 0.25) if c ~= 200 then return false end if type(r) == "string" and (string.match(r, '"ok"%s*:%s*true') or string.match(r, '"gatewayId"')) then return true end return false end function gateway_discover(force, skip_current) if not is_openapi_dispatch_mode() then return false end if force ~= true and gateway_discover_at ~= nil and os.time() - gateway_discover_at < 60 then return false end gateway_discover_at = os.time() local current = normalize_gateway_url(gateway_url) if not skip_current and gateway_health_ok(current) then gateway_url = save_gateway_url_config(current) taskdomain = gateway_url klog("【Gateway发现】当前地址可用 "..gateway_url) return true end local port = DEFAULT_GATEWAY_PORT or 18083 local max_host = GATEWAY_SCAN_MAX_HOST or 20 local subnets = gateway_collect_scan_subnets() klog("【Gateway发现】手机设备IP="..tostring(device_wifiIP or "未知")..",待扫描网段数="..tostring(#subnets)) for _, subnet in ipairs(subnets) do klog("【Gateway发现】扫描网段 "..subnet..".1-"..tostring(max_host)..":"..tostring(port)) for i=1,max_host do local candidate = "http://"..subnet.."."..tostring(i)..":"..tostring(port) if candidate ~= current and gateway_health_ok(candidate) then gateway_url = save_gateway_url_config(candidate) taskdomain = gateway_url klog("【Gateway发现】找到小主机 "..gateway_url) return true end if i % 5 == 0 then klog("【Gateway发现】扫描进度 "..subnet.."."..tostring(i).."/"..tostring(max_host)) end if i % 20 == 0 then sys.msleep(10) end end end klog("【Gateway发现】未找到小主机") klog("【Gateway提示】请先启动本地小主机服务,并确认端口18083可访问") klog("【Gateway提示】手机和小主机需要在同一局域网;小主机IP变化时脚本会自动扫描") yk_toast("未找到小主机,请先启动本地Gateway服务", 2) sys.msleep(1500) return false end ver1 = string.match(Ver, "%s(v.+)") function ui() local dlg = dialog() -- dlg:config('XXT_tiktok') -- 配置参数保存ID dlg:timeout(30) dlg:add_label(Ver) dlg:add_radio('功能', {'注册','任务'}, '任务') dlg:add_radio('DispatchMode', {'Gateway'}, 'Gateway') dlg:add_input('心跳间隔秒', tostring(DEFAULT_HEARTBEAT_INTERVAL)) dlg:add_input('取任务间隔秒', tostring(DEFAULT_TASK_PULL_INTERVAL)) --dlg:add_switch('【日志次清】', true) --dlg:add_switch('小火箭?', true) --dlg:add_switch('IP维持静态', false) dlg:add_input('切换IP域名', 'ztik.cc') --dlg:add_input('代理平台Platform', 'xxxx') --dlg:add_switch('socks5list', false) dlg:add_input('配置端口', '10060') --dlg:add_checkbox('请选择国家', {'LY','SA','AE','GE','MY','AU','PH','IL','PK','LB','VN','CA','RU','TH','GB','DE','FR','ES','MX','BR','TZ','PE','SG','ZM','TR','CH','EC','CR','CL','CO','BZ','MK','IE','NG','UY','GE','VE','BM','ID','MR','SN','NE','PY','ZA','EG','NP','JP','KR','MM','KH','LA','CD','IT','NL','BO','CH','AT','KW','PA','KZ','TM','MA','UG','PG','MG'}, {'IQ'}) --dlg:add_checkbox('请选择国家', {'MY','自定'}, {'自定'}) --dlg:add_input('自定ISO', 'MY') --dlg:add_radio('新机软件', {'A','D'}, 'D') dlg:add_switch('是否上传云控?', true) dlg:add_switch('注册成功后是否备份?', true) --dlg:add_switch('换绑', false) --dlg:add_label("----脆球邮箱----") --dlg:add_input('脆球tk', 'tk') --dlg:add_input('mail_id', 'mid') --dlg:add_label("----操作选项----") dlg:add_radio('注册方式', {'GG','Phone'}, 'Phone') --dlg:add_radio('区号', {'CA','UK'}, 'CA') dlg:add_switch('nickname_Skip', false) dlg:add_switch('行为?', false) dlg:add_switch('视频?', false) dlg:add_label("----关注/增粉 follow/increase----") dlg:add_radio('方式', {'By1','By2','Sch','API'}, 'By1') dlg:add_input('Scheme关注间隔', '2') dlg:add_input('滑块系数', '0.78') dlg:add_label("----卡停时间参数(秒)----") --dlg:add_input('超时重来', '90') --dlg:add_input('卡停截屏', '15') --dlg:add_switch('脚本更新?', false) --dlg:add_switch('上传日志?', false) --dlg:add_switch('测试函数test', false) --dlg:add_range('血量', {0, 1000, 1}, 300) --dlg:add_input('密码', 'aaaa') --dlg:add_picker('性别', {'男', '女', '未知'}, '男') --dlg:add_radio('最喜欢的游戏', {'守望先锋', '魔兽世界', '炉石传说'}, '魔兽世界') -- --local _, selects -- _, selects = dlg:show() -- 每次启动都显示配置窗,30秒后自动继续 if type(selects) ~= "table" then selects = {} end if selects["功能"] == nil then selects["功能"] = "任务" end if selects["配置端口"] == nil then selects["配置端口"] = "10060" end if selects["请选择国家"] == nil then selects["请选择国家"] = {"自定"} end if selects["自定ISO"] == nil then selects["自定ISO"] = "MY" end if selects["方式"] == nil then selects["方式"] = "By1" end if selects["心跳间隔秒"] == nil then selects["心跳间隔秒"] = tostring(DEFAULT_HEARTBEAT_INTERVAL) end if selects["取任务间隔秒"] == nil then selects["取任务间隔秒"] = tostring(DEFAULT_TASK_PULL_INTERVAL) end if selects["IP维持静态"] == nil then selects["IP维持静态"] = false end if selects["切换IP域名"] == nil then selects["切换IP域名"] = "ztik.cc" end if selects["代理平台Platform"] == nil then selects["代理平台Platform"] = "xxxx" end if selects["socks5list"] == nil then selects["socks5list"] = false end if selects["换绑"] == nil then selects["换绑"] = false end if selects["脆球tk"] == nil then selects["脆球tk"] = "tk" end if selects["mail_id"] == nil then selects["mail_id"] = "mid" end if selects["区号"] == nil then selects["区号"] = "CA" end if selects["超时重来"] == nil then selects["超时重来"] = "90" end -- WiFi 地址尚未确认前不加载旧缓存,避免配置日志和首次注册继续显示旧网段。 -- 任务模式在 Checkwifi() 后再加载缓存;gateway_register() 会丢弃跨网段缓存。 gateway_url = "" taskdomain = "" gateway_heartbeat_interval = tonumber(selects["心跳间隔秒"]) or DEFAULT_HEARTBEAT_INTERVAL if gateway_heartbeat_interval < 5 then gateway_heartbeat_interval = 5 end gateway_task_pull_interval = tonumber(selects["取任务间隔秒"]) or DEFAULT_TASK_PULL_INTERVAL if gateway_task_pull_interval < 5 then gateway_task_pull_interval = 5 end if (selects['脚本更新?']) then dwload() os.exit() end if (selects['上传日志?']) then upload() os.exit() end if 1>2 then --弃 if (selects['【日志次清】']) then file.writes(logfile, " \n") else --file.appends(logfile, " \n\n\n\n\n\n\n") local logcontent = file.reads(logfile) local a1 = string.match(logcontent, "(v.-)\n") if not a1 then a1 = "v3.00.00" end local a2 = string.match(logcontent, "%s%s(20%S+)%s北京时") --string.match(logcontent, "(2025/.-)\n") if not a2 then a2 = "2025/05/30-16:16:16" end a2 = string.gsub(a2, "/", "") a2 = string.gsub(a2, ":", "") file.writes("/var/mobile/Media/1ferver/log/tk_"..a2.."_"..a1..".log", logcontent) file.writes(logfile, " \n") end end if (selects['测试函数test']) then head() test() os.exit() end --sys.alert(print.out()) end function head() arraylog = {kloglast = '', ttlog = 0, rept = 0} syslogfile = "/var/mobile/Media/1ferver/log/".."sys.log" uuid = device.udid() w, h = screen.size() ttdog = os.time() tttap = {ttdog, 0, ttdog, x=-1, y=-1} --初点时刻 重复次数 最近时刻 点击坐标x y vartk = {} http000 = require("http") --外部插件 --使用新的日志文件 logfile = string.gsub(logfile0, "xxxx", os.date("!%Y%m%d-%H%M%S", os.time()+seczone)) --os.execute('cp -rf '..syslogfile.." "..logfile) --file.writes(syslogfile, " \n") klog(Ver.." "..scrp); kloghead(Ver.." "..scrp) klog(os.date("%Y/%m/%d-%H:%M:%S")); kloghead(os.date("%Y/%m/%d-%H:%M:%S")) klog(os.date("!%Y/%m/%d-%H:%M:%S", os.time()+seczone).." 北京时"); kloghead(os.date("!%Y/%m/%d-%H:%M:%S", os.time()+seczone).." 北京时") klog(uuid.." 设备分辨率 "..w.."x"..h) kloghead(uuid.." 设备分辨率 "..w.."x"..h) klog(" ") kloghead(" ") end function canshu() klog("【 【配置参数】 】") kloghead("【 【配置参数】 】") --scripts = "GG_英" --"Phone_马来" klog("脚本功能:"..selects["功能"]) kloghead("脚本功能:"..selects["功能"]) klog("配置端口 "..selects["配置端口"]) kloghead("配置端口 "..selects["配置端口"]) device_localport = selects["配置端口"] klog("Gateway API: "..taskdomain) kloghead("Gateway API: "..taskdomain) klog("DispatchMode: "..tostring(selects["DispatchMode"])) kloghead("DispatchMode: "..tostring(selects["DispatchMode"])) klog("GatewayUrl: "..tostring(gateway_url)) kloghead("GatewayUrl: "..tostring(gateway_url)) klog("取任务间隔秒: "..tostring(gateway_task_pull_interval)) kloghead("取任务间隔秒: "..tostring(gateway_task_pull_interval)) str国家 = '' ISOlist = {} for _,gamename in ipairs(selects['请选择国家']) do if gamename == "自定" then local tmp = selects["自定ISO"] tmp = string.gsub(tmp, " ","") for b in string.gmatch(tmp, "%w+") do if str国家 == '' then str国家 = b else str国家 = str国家..','..b end table.insert(ISOlist, b) end break end if str国家 == '' then str国家 = gamename else str国家 = str国家..','..gamename end table.insert(ISOlist, gamename) end klog("请选择国家: "..str国家) kloghead("请选择国家: "..str国家) --klog("新机软件:"..selects["新机软件"]) if (selects['是否上传云控?']) then klog("是否上传云控? 是") kloghead("是否上传云控? 是") else klog("是否上传云控? 否") kloghead("是否上传云控? 否") end if (selects['注册成功后是否备份?']) then flag注册成功备份 = true klog("注册成功后备份") kloghead("注册成功后备份") else flag注册成功备份 = false end if (selects['换绑'] or selects["功能"]=="换绑") then flag换绑 = true klog("注册成功后换绑") kloghead("注册成功后换绑") else flag换绑 = false end flag备份做号 = false klog("备份做号? 否") kloghead("备份做号? 否") c号 = 0 c号max = 4 klog("IP维持静态 "..tostring(selects["IP维持静态"])) kloghead("IP维持静态 "..tostring(selects["IP维持静态"])) klog("切换IP域名 "..selects["切换IP域名"]) kloghead("切换IP域名 "..selects["切换IP域名"]) klog("代理平台Platform "..selects["代理平台Platform"]) kloghead("代理平台Platform "..selects["代理平台Platform"]) if selects["socks5list"] then klog("任务 用socks5list") kloghead("任务 用socks5list") end -- klog("tk启动随机延迟范围 "..selects["tk启动随机延迟范围min秒"].."--"..selects["tk启动随机延迟范围max秒"]) -- tk延迟min = tonumber(selects["tk启动随机延迟范围min秒"]) -- tk延迟max = tonumber(selects["tk启动随机延迟范围max秒"]) tk延迟min = 130 tk延迟max = 180 klog("脆球邮箱 "..selects["脆球tk"].." "..selects["mail_id"]) kloghead("脆球邮箱 "..selects["脆球tk"].." "..selects["mail_id"]) klog("注册方式 "..selects["注册方式"]) kloghead("注册方式 "..selects["注册方式"]) flag注册方式 = selects["注册方式"] klog("区号 "..selects["区号"]) kloghead("区号 "..selects["区号"]) if (selects['nickname_Skip']) then flag_nickname_Skip = true klog("nickname_Skip? 是") kloghead("nickname_Skip? 是") else flag_nickname_Skip = false klog("nickname_Skip? 否") kloghead("nickname_Skip? 否") end if (selects['行为?']) then flag行为 = true klog("行为? 是") kloghead("行为? 是") else flag行为 = false klog("行为? 否") kloghead("行为? 否") end if (selects['视频?']) then flag视频 = true klog("视频? 是") kloghead("视频? 是") else flag视频 = false klog("视频? 否") kloghead("视频? 否") end klog("关注/增粉任务方式: "..selects["方式"]) kloghead("关注/增粉任务方式: "..selects["方式"]) klog("Scheme关注间隔(毫秒): "..selects["Scheme关注间隔"]) kloghead("Scheme关注间隔(毫秒): "..selects["Scheme关注间隔"]) Scheme关注间隔 = tonumber(selects["Scheme关注间隔"]) S滑块系数 = tonumber(selects["滑块系数"]) klog('超时重来 '..selects['超时重来']) kloghead('超时重来 '..selects['超时重来']) t重启 = tonumber(selects['超时重来']) --klog('卡停截屏 '..selects['卡停截屏']) --t卡停 = tonumber(selects['卡停截屏']) -- klog("密码 "..selects["密码"]) -- klog("性别 "..selects["性别"]) -- klog("血量 "..selects["血量"]) -- -- -- klog("你最喜欢游戏: "..selects["最喜欢的游戏"]) klog(" ") kloghead(" ") end function colors() Demo = {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99} p141验证码错 = {"Verification code is expired or incorrect", ocr=2} ttocr = os.time()-100 ttocrper = os.time()-100 --允许连续ocr if w==828 and h==1792 then -- XR -- 497,609,0x7b7b7b --local Demo = {{497,609,0x7b7b7b},{657,287,0x7c7c7c},{795,497,0x7c7c7c}, region={200,1550, 500,1800}, sim=90} --Agree and Continue 01 01_2 01_2b 01马 p01_AgreeandContinue = { {{304, 1047, 0x000000}, {304, 1038, 0x000000},{302, 1057, 0x000000},{292, 1057, 0x000000},{297, 1059, 0x000000},{297, 1055, 0xffffff},{293, 1050, 0x000000},{297, 1047, 0xffffff},{275, 1033, 0x000000},{500, 1031, 0x000000},{188,765,0x474747},{508,877,0x000000},{610,904,0x474747},{352,946,0x474747},{415,878,0x000000},{507,883,0x000000},{508,870,0xffffff}}, {{282,1046,0x000000},{278,1043,0xffffff},{275,1033,0x000000},{274,1046,0x000000},{269,1052,0x000000},{297,1059,0x000000},{297,1055,0xffffff},{294,1051,0x000000},{500,1031,0x000000},{500,1035,0xffffff}, {177,757,0x474747},{177,754,0xffffff},{177,765,0x474747},{177,775,0x474747},{177,778,0xffffff},{311,756,0x474747},{309,756,0xffffff},{311,759,0xffffff},{315,756,0xffffff},{648,779,0x474747}, {607,756,0x000000},{607,759,0xffffff},{610,756,0xffffff},{604,756,0xffffff},{607,762,0x000000},{607,768,0x000000},{607,775,0x000000},{607,778,0xffffff},{411,757,0x000000},{417,771,0x000000}}, --怀疑误识别 --{{307,1071,0x000000},{11,11,0x7c7c7c},{310,1086,0x000000},{336,1065,0x000000},{336,1069,0xffffff},{336,1072,0x000000},{336,1088,0x000000},{335,1092,0x000000},{513,1066,0x000000},{274,1066,0x000000},{318,974,0x474747}} } p01_AgreeandContinue_A = { --01d 01e {{285,739,0xfe5d7d},{271,729,0xffffff},{259,718,0x65d9d5},{286,711,0x65d9d5},{264,764,0x65d9d5},{310,753,0xffffff},{317,760,0x000000},{391,755,0x000000},{387,745,0x65d9d5},{562,866,0xfe5d7d}, region={249, 701, 572, 1000}, sim=99} } p01_AgreeandContinue_B = { {{222,1635,0xfe2c55},{58,1597,0xfe2c55},{58,1594,0xffffff},{33,1669,0xfe2c55},{30,1669,0xffffff},{557,1690,0xfe2c55},{557,1693,0xffffff},{794,1627,0xfe2c55},{797,1627,0xffffff},{661,1651,0xfe2c55}, region={20, 1584, 807, 1703}, sim=99} } p02_兴趣悬浮字 = { --02_0 (1)(2) 20250505 {{731,1639,0x332225},{298,1752,0x333333},{397,1750,0x333333},{509,1754,0x333333},{548,1770,0xfdfdfd},{432,1770,0xfdfdfd},{294,1770,0xfdfdfd},{112,477,0xffffff},{20,477,0x333333}, sim=99, region={10, 467, 741, 1780}}, --02_0 {{223,1644,0x332225},{75,1597,0x332225},{75,1594,0x333333},{34,1644,0x332225},{30,1644,0x333333},{785,1638,0x332225},{800,1638,0x333333},{377,102,0x333333},{410,489,0xffffff}, region={20, 92, 810, 1654}, sim=99}, } p02_兴趣 = { --02d 02e 02f {{126,439,0xe0e0e0},{126,438,0xffffff},{126,440,0xe0e0e0},{126,441,0xffffff},{128,481,0x000000},{128,524,0xffffff},{128,525,0xe0e0e0},{128,526,0xe0e0e0},{128,527,0xffffff},{126,439,0xe0e0e0},{128,550,0xffffff},{128,551,0xe0e0e0},{128,552,0xe0e0e0},{128,553,0xffffff},{128,636,0xffffff},{128,637,0xe0e0e0},{128,638,0xe0e0e0},{128,639,0xffffff}, region={100, 415, 720, 1550}, sim=99} } p02_兴趣未 = { --02马1 02英1 {{333,1646,0xf2f2f2},{90,1598,0xf2f2f2},{66,1658,0xf2f2f2},{397,1683,0xf2f2f2},{424,1640,0xfeaabb},{587,1598,0xfeaabb},{630,1690,0xfeaabb},{762,1641,0xfeaabb}, sim=95, region={56, 1588, 772, 1700}}, --02马2 02英2 {{333,1646,0xe9e9e9},{90,1598,0xe9e9e9},{66,1658,0xe9e9e9},{397,1683,0xe9e9e9},{424,1640,0xf8a4b5},{587,1598,0xf8a4b5},{630,1690,0xf8a4b5},{762,1641,0xf8a4b5}, sim=95, region={56, 1588, 772, 1700}}, {{227,1646,0x000000},{5,5,0xffffff},{109,1601,0xf2f2f2},{67,1641,0xf2f2f2},{270,1688,0xf2f2f2},{403,1635,0xf2f2f2},{344,1661,0xf2f2f2},{294,1614,0xf2f2f2},{132,1640,0xf2f2f2},{414,1637,0xffffff},{424,1629,0xfeaabb},{612,1597,0xfeaabb},{761,1641,0xfeaabb},{578,1690,0xfeaabb},{483,1661,0xfeaabb},{681,1616,0xfeaabb},{765,1639,0xffffff}, sim=95} } --Skip 未选 02 02b p02_Skip未选 = { --02马1 02英1 {{333,1646,0xf2f2f2},{90,1598,0xf2f2f2},{66,1658,0xf2f2f2},{397,1683,0xf2f2f2},{424,1640,0xfeaabb},{587,1598,0xfeaabb},{630,1690,0xfeaabb},{762,1641,0xfeaabb}, sim=95, region={56, 1588, 772, 1700}}, --02马2 02英2 {{333,1646,0xe9e9e9},{90,1598,0xe9e9e9},{66,1658,0xe9e9e9},{397,1683,0xe9e9e9},{424,1640,0xf8a4b5},{587,1598,0xf8a4b5},{630,1690,0xf8a4b5},{762,1641,0xf8a4b5}, sim=95, region={56, 1588, 772, 1700}}, {{227,1646,0x000000},{5,5,0xffffff},{109,1601,0xf2f2f2},{67,1641,0xf2f2f2},{270,1688,0xf2f2f2},{403,1635,0xf2f2f2},{344,1661,0xf2f2f2},{294,1614,0xf2f2f2},{132,1640,0xf2f2f2},{414,1637,0xffffff},{424,1629,0xfeaabb},{612,1597,0xfeaabb},{761,1641,0xfeaabb},{578,1690,0xfeaabb},{483,1661,0xfeaabb},{681,1616,0xfeaabb},{765,1639,0xffffff}, sim=95} } --兴趣未 p04兴趣未 = { --02d 02e 02f {{215,1643,0xfeaabb},{99,1597,0xfeaabb},{99,1594,0xffffff},{752,1690,0xfeaabb},{752,1693,0xffffff},{794,1624,0xfeaabb},{797,1624,0xffffff},{33,1631,0xfeaabb},{30,1631,0xffffff},{626,1636,0xfeaabb}} --20250512 屏蔽 --{{271,1643,0xf8a4b5},{5,5,0xf5f5f5},{606,1597,0xf8a4b5},{606,1595,0xf5f5f5},{762,1647,0xf8a4b5},{764,1647,0xf5f5f5},{232,1690,0xf8a4b5},{232,1692,0xf5f5f5},{65,1632,0xf8a4b5},{63,1632,0xf5f5f5},{1,1572,0xc8c9cb}}, --{{234,1640,0xf8a4b4},{6,6,0xf5f5f5} ,{98,1598,0xf8a4b4},{82,1680,0xf8a4b4},{744,1610,0xf8a4b4},{768,1643,0xf5f5f5},{714,1684,0xfaa3b6},{493,1698,0xf5f5f5},{30,1572,0xc9c9c9},{81,200,0x000000}, sim=85} } --兴趣已 p05兴趣已 = { --20250512 {{230,1638,0xfe2c55},{33,1638,0xfe2c55},{794,1629,0xfe2c55},{167,1598,0xfe2c55},{403,1689,0xfe2c55},{591,1642,0xfe2c55},{717,1599,0xfe2c55},{773,1670,0xfe2c55}, region={23, 1588, 804, 1699}, sim=95}, } --兴趣已 06 06b p06兴趣已 = { --20250512 {{230,1638,0xfe2c55},{33,1638,0xfe2c55},{794,1629,0xfe2c55},{167,1598,0xfe2c55},{403,1689,0xfe2c55},{591,1642,0xfe2c55},{717,1599,0xfe2c55},{773,1670,0xfe2c55}, region={23, 1588, 804, 1699}, sim=95}, --{{227,1646,0x000000},{5,5,0xffffff},{109,1601,0xf2f2f2},{67,1641,0xf2f2f2},{270,1688,0xf2f2f2},{403,1635,0xf2f2f2},{344,1661,0xf2f2f2},{294,1614,0xf2f2f2},{132,1640,0xf2f2f2},{414,1637,0xffffff},{424,1629,0xfe2c55},{612,1597,0xfe2c55},{761,1641,0xfe2c55},{578,1690,0xfe2c55},{483,1661,0xfe2c55},{681,1616,0xfe2c55},{765,1639,0xffffff}, sim=95}, --{{227,1646,0x000000},{5,5,0xf5f5f5},{109,1601,0xe9e9e9},{67,1641,0xe9e9e9},{270,1688,0xe9e9e9},{403,1635,0xe9e9e9},{344,1661,0xe9e9e9},{294,1614,0xe9e9e9},{132,1640,0xe9e9e9},{414,1637,0xf5f5f5},{424,1629,0xfe2c55},{612,1597,0xfe2c55},{761,1641,0xfe2c55},{578,1690,0xfe2c55},{483,1661,0xfe2c55},{681,1616,0xfe2c55},{765,1639,0xf5f5f5}, sim=95} } -- startwatching p03_startwatching = { {{601,1646,0xfe2c55},{6,6,0xffffff}, {761,1620,0xfe2c55},{765,1620,0xffffff},{194,1596,0xfe335a},{247,1594,0xffffff},{65,1646,0xfe2c55},{62,1646,0xffffff},{473,1690,0xfe2c55},{473,1693,0xffffff}, {392,546,0x000000},{392,543,0xffffff},{653,801,0x000000},{657,801,0xffffff},{173,1026,0x000000},{170,1026,0xffffff},{372,1405,0x000000},{372,1408,0xffffff}}, --03b {{256,1636,0xfe2c55},{6,6,0xffffff},{820,1783,0xffffff}, {70,1602,0xfe2c55},{66,1600,0xffffff},{757,1685,0xfe2c55},{761,1687,0xffffff},{646,1605,0xfe2c55},{176,1677,0xfe2c55},{173,1162,0x000000},{170,1162,0xffffff},{654,717,0x000000},{657,717,0xffffff}}, {{374,1622,0xfe2c55},{12,12,0xffffff},{90,1597,0xfe2c55},{89,1594,0xffffff},{66,1667,0xfe2c55},{62,1667,0xffffff},{755,1682,0xfe2c55},{590,1618,0xfe2c55},{230,202,0x000000},{71,249,0x000000},{78,200,0x000000}} } p03_Swipe_startwatching = { --03d 03e {{263,398,0x000000},{263,402,0xffffff},{263,406,0x000000},{263,435,0x000000},{263,439,0xffffff},{263,392,0x000000},{263,387,0xffffff},{216,420,0x000000},{219,420,0xffffff},{223,420,0x000000},{237,420,0x000000},{241,420,0xffffff},{244,420,0x000000},{227,419,0x000000},{230,419,0xffffff},{233,419,0x000000},{230,408,0x000000},{529,524,0xffffff},{529,518,0x000000},{529,511,0xffffff},{199,400,0x000000},{185,393,0x000000},{172,403,0x000000},{188,414,0x000000},{200,425,0x000000},{186,435,0x000000},{170,425,0x000000},{170,420,0xffffff},{199,406,0xffffff},{182,403,0xffffff}, region={163, 318, 550, 550}, sim=99} } -- 主页暗 p10main暗 = { -- 10d {{375,1654,0x106a75},{375,1670,0x106a75},{376,1690,0x106a75},{382,1670,0x7f7f7f},{403,1671,0x0b0c11},{413,1662,0x0b0c11},{445,1663,0x7f7f7f},{451,1650,0x7c1636},{453,1664,0x7c1636},{451,1690,0x7c1636}, region={365, 1640, 463, 1700}, sim=99}, -- 弹窗 {{374,1671,0x236b74},{409,1667,0x7c7c7c},{413,1671,0x1f2024},{424,1671,0x1f2024},{431,1671,0x7c7c7c},{453,1671,0x7a2841},{453,1656,0x7a2841},{453,1684,0x7a2841},{445,1684,0x7c7c7c},{374,1686,0x236b74}, region={364,1646,463,1696}, sim=88, klog("视频主页 弹窗?")} } p10弹窗背景 = Demo -- swipeup p10swipeup = { {"Swipe up for more"}, {"swipe up for more"}, {"Swipe üp for more"}, {"Swipe.Mp. far more"}, {"SwipesMp. for more"}, {"For You", "Swipe", "for more", "Profile"}, {"Swipe up", "Videos are personalized for you"}, --{{181,1075,0xffffff},{2,1789,0x000000},{782,150,0x7f7f7f},{769,121,0x7f7f7f},{753,137,0x7f7f7f},{790,158,0x7f7f7f}, {821,1785,0x000000}, {255,1073,0xffffff},{269,1126,0xffffff},{290,1090,0xffffff},{659,1098,0xffffff},{579,1100,0xffffff},{447,1075,0xffffff},{385,1125,0xffffff},{325,1090,0xffffff}}, --{{246,1076,0xffffff},{2,1789,0x000000},{782,150,0x7f7f7f},{769,121,0x7f7f7f},{753,137,0x7f7f7f},{790,158,0x7f7f7f}, {821,1785,0x000000}, {248,1110,0xffffff},{266,1111,0xffffff},{595,1192,0xffffff},{608,1155,0xffffff},{588,1160,0xffffff},{187,1161,0xffffff},{311,1143,0xffffff},{581,1089,0xffffff}}, --10d --{{235,1095,0xffffff},{226,1091,0xffffff},{218,1098,0xffffff},{227,1105,0xffffff},{236,1114,0xffffff},{217,1116,0xffffff},{227,1122,0xffffff},{601,1100,0xffffff},{601,1110,0xffffff},{606,1121,0xffffff},{390,1100,0xffffff},{391,1108,0xffffff},{391,1120,0xffffff},{391,1131,0xffffff},{441,1091,0xffffff},{434,1095,0xffffff},{434,1103,0xffffff},{434,1111,0xffffff},{434,1122,0xffffff}, region={365, 1640, 463, 1700}, sim=99}, --10e --{{86,1092,0xffffff},{86,1106,0xffffff},{86,1121,0xffffff},{96,1121,0xffffff},{101,1121,0xffffff},{716,1100,0xffffff},{713,1111,0xffffff},{708,1122,0xffffff},{705,1131,0xffffff},{742,1121,0xffffff}, {477,1091,0xffffff},{477,1122,0xffffff},{483,1109,0xffffff},{492,1100,0xffffff},{493,1122,0xffffff},{209,1091,0xffffff},{209,1122,0xffffff},{214,1109,0xffffff},{225,1100,0xffffff},{225,1122,0xffffff}, region={76, 1082, 752, 1141}, sim=99}, --10f --{{218,1098,0xffffff},{226,1122,0xffffff},{295,1131,0xffffff},{297,1104,0xffffff},{314,1118,0xffffff},{257,1100,0xffffff},{441,1091,0xffffff},{487,1101,0xffffff},{610,1109,0xffffff},{550,1119,0xffffff}, region={208, 1081, 620, 1141}, sim=99}, --10g --{{172,1077,0xffffff},{166,1104,0xffffff},{193,1110,0xffffff},{254,1073,0xffffff},{270,1126,0xffffff},{384,1125,0xffffff},{447,1075,0xffffff},{659,1099,0xffffff},{580,1109,0xffffff},{327,1097,0xffffff}, region={156, 1063, 669, 1136}, sim=99}, } -- 十 20241107兼容 p10main十 = { {{381,1646,0x20d5ec},{374,1657,0x20d5ec},{374,1681,0x20d5ec},{382,1696,0x20d5ec},{445,1696,0xfa2d6c},{452,1665,0xfa2d6c},{445,1645,0xfa2d6c},{406,1663,0xffffff},{413,1671,0x161823},{424,1671,0x161823}, sim=99, region={364, 1635, 462, 1706}}, {{413,1671,0x161823},{3,1631,0x000000},{821,1785,0x000000},{717,1702,0xc0c0c0}, {403,1671,0x161823},{396,1671,0xffffff},{375,1671,0x20d5ec},{375,1659,0x20d5ec},{413,1680,0x161823},{421,1679,0xffffff},{453,1683,0xfa2d6c},{453,1667,0xfa2d6c}}, --10Mb {{375,1671,0x20d5eb},{380,1671,0xffffff},{375,1656,0x20d5eb},{375,1685,0x20d5eb},{453,1685,0xfa2d6c},{453,1669,0xfa2d6c},{447,1669,0xffffff},{452,1653,0xfa2d6c},{745,1661,0xbfbfbf},{82,1657,0xffffff}, {413,1670,0x161823},{413,1660,0x161823},{413,1656,0xffffff},{413,1682,0x161823},{413,1686,0xffffff},{403,1671,0x161823},{398,1671,0xffffff},{424,1671,0x161823},{428,1671,0xffffff},{409,1667,0xffffff}} } zProfile = {746,1668} zHome = {82,1666} -- 弹窗 个人 Accept/Terima p弹窗Accept_Terima = { {{379,1164,0x000000},{374,1160,0xffffff},{373,1152,0x000000},{367,1170,0x000000},{209,1210,0xe4e4e5},{209,1209,0xffffff},{209,1114,0xe4e4e5},{622,567,0x000000},{782,149,0x7f7f7f},{200,559,0x000000}, {409,1667,0x7f7f7f},{413,1671,0x0b0c11},{419,1676,0x7f7f7f},{419,1671,0x0b0c11}}, {{403,1245,0x000000},{369,1234,0x000000},{381,1234,0x000000},{379,1237,0xffffff},{375,1252,0x000000},{375,1255,0xffffff},{414,1229,0xffffff},{414,1233,0x000000},{414,1236,0xffffff},{414,1239,0x000000}, {374,1662,0x106a75},{407,1666,0x7f7f7f},{413,1671,0x0b0c11},{430,1682,0x7f7f7f},{453,1682,0x7c1636},{745,1668,0x5f5f5f},{826,1790,0x000000},{1,1790,0x000000},{781,149,0x7f7f7f}} } --弹窗Got it --{374,1675,0x236b74}, p弹窗Gotit = {{449,1297,0x000000},{449,1293,0x000000},{448,1290,0xffffff},{449,1307,0x000000},{452,1312,0x000000},{452,1308,0xffffff},{452,1315,0xffffff},{456,1312,0xffffff},{439,1291,0x000000},{439,1311,0x000000}, {420,1297,0x000000},{421,1293,0x000000},{420,1290,0xffffff},{420,1304,0x000000},{420,1310,0x000000},{424,1312,0x000000},{424,1309,0xffffff},{424,1315,0xffffff},{427,1312,0xffffff}, {135,1254,0xe0e0e0},{135,1253,0xffffff},{406,1254,0xe0e0e0},{692,1254,0xe0e0e0},{692,1255,0xffffff}, region={125,1243,702,1685}, sim=98} p弹窗Gotit蓝 = Demo p弹窗Update_Accept = {{238,1101,0x595959},{232,1101,0x595959},{227,1101,0x595959},{224,1107,0x595959},{232,1097,0xffffff},{228,1095,0x595959},{232,1087,0x595959},{237,1096,0x595959},{298,1113,0x595959},{305,1092,0x595959}, {414,1094,0xe0e0e0},{322,1050,0xe0e0e0},{639,1050,0xe0e0e0},{474,1088,0x000000},{474,1107,0x000000},{484,1107,0x000000},{474,1099,0x000000},{489,1099,0x000000},{634,1099,0x000000},{634,1103,0xffffff},{633,1106,0x000000}, {376,1651,0x236b74},{385,1655,0x7c7c7c},{403,1671,0x1f2024},{423,1671,0x1f2024},{442,1691,0x7c7c7c},{448,1694,0x7a2841},{822,1786,0x161616},{8,1783,0x161616}} p弹窗弃号 = {{374,1671,0x236b74},{397,1671,0x7c7c7c},{403,1671,0x1f2024},{423,1671,0x1f2024},{446,1671,0x7c7c7c},{453,1671,0x7a2841},{627,1094,0xfe2c55},{205,1128,0xfe2c55},{264,1241,0x000000},{579,1216,0x000000}, {222,1217,0x000000},{226,1221,0xffffff},{550,1222,0x000000},{551,1241,0x000000},{562,1233,0x000000},{558,1230,0xffffff},{389,1088,0x474747}, sim=99, region={195, 1060, 637, 1681}} p弹窗选language = {{177,776,0xe3e4e5},{229,776,0xe3e4e5},{229,777,0xffffff},{229,869,0xe3e4e5},{274,869,0xe3e4e5},{274,870,0xffffff},{274,961,0xe3e4e5},{320,961,0xe3e4e5},{320,962,0xffffff},{320,1053,0xe3e4e5}, sim=99, region={167, 766, 330, 1063}} p弹窗reconfirm = { --ocr {"Confirm", "Reconfirm email", "Update"}, {"Confirm", "Confirm use of email", "Not now"}, } -- Don't have Signup 20 20b 20(1)b p20Signup = { {{568,1649,0xfe2c55},{20,20,0x7f7f7f}, {557,1662,0xfe2c55},{619,1663,0xfe2c55},{630,1647,0xfe2c55},{624,1649,0xf8f8f8},{197,1639,0x000000},{495,1643,0x000000},{6,1594,0xf8f8f8},{6,1592,0xdddddf},{6,1590,0xffffff},{769,167,0x161823},{769,164,0xc1c2c5}}, {{572,1685,0xfe2c55},{5,5,0x7f7f7f}, {572,1676,0xfe2c55},{572,1673,0xebebec},{566,1696,0xfe2c55},{563,1688,0xfe2c55},{541,1670,0xfe2c55},{535,1675,0xfe2c55},{546,1687,0xfe2c55},{622,1695,0xfe2c55},{622,1698,0xebebec}, {769,167,0x161823},{769,164,0xc1c2c5},{770,168,0x161823},{770,171,0xc1c1c4},{766,167,0xa0a1a6},{773,168,0xa1a2a7}}, --20(1)b {{618,1644,0xfe2c55},{112,546,0x161823},{6,6,0x7f7f7f},{819,1782,0xf8f8f8}, {112,546,0x161823},{98,563,0x000000},{618,1663,0xfe2c55},{618,1666,0xf8f8f8},{618,1655,0xfe2c55},{618,1641,0xf8f8f8}, {109,539,0xffffff},{106,532,0x161823},{97,502,0xcbccce},{64,525,0xcbccce},{471,502,0xcbccce},{210,588,0xcbccce},{762,538,0xcbccce},{769,167,0x161823},{55,176,0x707070}}, --20m {{551,1646,0xfe2c55},{12,12,0x7f7f7f}, {551,1657,0xfe2c55},{565,1647,0xfe2c55},{590,1644,0xfe2c55},{530,1657,0x000000},{556,1651,0xf8f8f8},{535,1643,0x000000},{525,1640,0x000000},{253,1651,0x000000},{401,1658,0x000000}}, --20mb {{551,1646,0xfe2c55},{12,12,0x7f7f7f}, {551,1657,0xfe2c55},{565,1647,0xfe2c55},{590,1644,0xfe2c55},{530,1657,0x818181},{556,1651,0xf8f8f8},{535,1643,0x818181},{525,1641,0x818181},{253,1651,0x818181},{401,1658,0x818181}}, --ocr {"Don't have an account?", "Sign up", "Log in to TikTok"}, } p20Signup_r = { --ocr {"Log in to TikTok", "Don't have an account?", "Sign up"}, } p20Signup_clk = { {{568,1650,0xfe2c55},{568,1649,0xfe2c55},{568,1648,0xfe2c55}, region={525,1620,640,1680}, sim=98} } --in Login Signup p20inLogin = { {{550,1644,0xfe2c55},{550,1641,0xf8f8f8,80},{550,1638,0xfe2c55},{546,1640,0xf8f8f8,80},{542,1640,0xfe2c55},{537,1638,0xfe2c55},{531,1643,0xfe2c55},{535,1647,0xfe2c55},{541,1649,0xfe2c55},{543,1653,0xfe2c55}, {550,1657,0xfe2c55},{546,1657,0xf8f8f8,80},{540,1657,0xfe2c55},{531,1655,0xfe2c55},{538,1652,0xf8f8f8,80},{532,1650,0xf8f8f8,80},{536,1642,0xf8f8f8,80},{540,1644,0xf8f8f8,80}, region={521,1628,560,1700}, sim=98} } -- Log in Use phone p20Usephone = { --(1) 2025-04-29 {{111,546,0x161823},{111,550,0xffffff},{111,553,0x000000},{111,558,0xffffff},{98,563,0x000000},{125,563,0x000000},{119,537,0x161823},{111,529,0x161823},{104,536,0x161823},{60,162,0x707070}, {769,167,0x161823},{769,162,0xffffff},{758,157,0x161823},{758,178,0x161823}, sim=99, region={50, 147, 779, 573}}, --(2) 2025-05-26 {{111,451,0x161823},{111,455,0xffffff},{111,459,0x000000},{111,463,0xffffff},{101,463,0x000000},{98,468,0x000000},{125,468,0x000000},{121,462,0x000000},{65,460,0xcbccce},{109,408,0xcbccce}, {104,538,0x161823},{108,538,0xffffff},{116,538,0xffffff},{119,538,0x161823},{111,534,0xffffff},{111,530,0x161823}, sim=99, region={55, 386, 135, 610}}, } --in Signup 21 21_2 21马 p21inSignup = { --21(2) {{601,1651,0xfe2c55},{601,1644,0xfe2c55},{601,1641,0xf8f8f8},{600,1661,0xfe2c55},{594,1663,0xfe2c55},{565,1657,0xfe2c55},{561,1657,0xfe2c55},{556,1657,0xfe2c55},{556,1653,0xfe2c55},{556,1647,0xfe2c55}, {556,1639,0xfe2c55},{556,1635,0xf8f8f8},{561,1653,0xf8f8f8},{633,1656,0xfe2c55},{633,1650,0xfe2c55},{535,1657,0x818181},{194,1651,0x818181},{274,1648,0x818181},{387,1655,0x818181},{383,1654,0xf8f8f8}, sim=99, region={184, 1620, 643, 1673}}, --ocr {"Sign up for TikTok", "Already have an account?", "Log in"}, {{590,1662,0xfe2c55},{5,5,0x7f7f7f}, {556,1635,0xf8f8f8},{556,1640,0xfe2c55},{556,1648,0xfe2c55},{556,1657,0xfe2c55},{565,1657,0xfe2c55},{560,1657,0xfe2c55},{213,1638,0x000000},{213,1645,0x000000},{213,1657,0x000000},{305,1657,0x000000},{305,1647,0x000000},{305,1638,0x000000},{305,1635,0xf8f8f8},{2,1592,0xdddddf}}, -- 21c {{556,1657,0xfe2c55},{6,6,0x7f7f7f},{820,1783,0xf8f8f8}, {769,167,0x161823},{769,162,0xffffff},{763,167,0xffffff},{55,176,0x707070}, {560,1657,0xfe2c55},{565,1657,0xfe2c55},{569,1657,0xf8f8f8},{556,1652,0xfe2c55},{556,1646,0xfe2c55},{556,1639,0xfe2c55},{556,1636,0xf8f8f8},{595,1664,0xfe2c55}}, {{605,1685,0xfe2c55},{5,5,0x7f7f7f}, {605,1676,0xfe2c55},{605,1673,0xf2f2f2},{599,1696,0xfe2c55},{570,1689,0xfe2c55},{566,1689,0xfe2c55},{561,1689,0xfe2c55},{561,1681,0xfe2c55},{561,1671,0xfe2c55},{561,1668,0xf2f2f2}, {769,167,0x161823},{769,164,0xc1c2c5},{770,168,0x161823},{770,171,0xc1c1c4},{766,167,0xa0a1a6},{773,168,0xa1a2a7}}, --21马 {{526,1657,0xfe2c55},{2,2,0x7f7f7f},{824,1788,0xf8f8f8}, {532,1657,0xfe2c55},{536,1657,0xfe2c55},{539,1657,0xf8f8f8},{526,1651,0xfe2c55},{526,1639,0xfe2c55},{526,1636,0xf8f8f8},{661,1638,0xfe2c55},{661,1648,0xfe2c55},{661,1635,0xf8f8f8},{505,1657,0x000000},{505,1653,0xf8f8f8},{505,1650,0x000000},{507,1638,0x000000},{375,1663,0x000000},{161,1638,0x000000},{161,1642,0xf8f8f8},{157,1642,0x000000}}, --21马c {{526,1657,0xfe2c55},{2,2,0x7f7f7f},{824,1788,0xf8f8f8}, {532,1657,0xfe2c55},{536,1657,0xfe2c55},{539,1657,0xf8f8f8},{526,1651,0xfe2c55},{526,1639,0xfe2c55},{526,1636,0xf8f8f8},{661,1638,0xfe2c55},{661,1648,0xfe2c55},{661,1635,0xf8f8f8}, {505,1657,0x818181},{505,1653,0xf8f8f8},{505,1650,0x818181},{507,1638,0x818181},{375,1663,0x818181},{161,1638,0x818181},{161,1642,0xf8f8f8},{157,1642,0x818181}} } -- Google p21Google = {{127,771,0x5070a8},{126,761,0xffffff},{121,756,0xd53e36},{109,754,0xd53e36},{99,762,0xd53e36},{96,766,0xefb529},{96,773,0xefb529},{100,779,0x2f9e4f},{118,785,0x2f9e4f},{124,780,0x5070a8}} -- google.com Continue 21 21b 21c p21GGcontinue = {{547,1024,0x007aff},{3,3,0x656565},{825,1789,0xc4c4c4}, {614,1031,0x007aff},{495,1018,0x007aff},{483,1029,0x007aff},{496,1039,0x007aff},{414,1023,0xa3a1a3},{328,1017,0x007aff},{328,1028,0x007aff},{328,1039,0x007aff},{230,1027,0x007aff},{239,1017,0x007aff},{242,1039,0x007aff}} --Use phone or email p21Usephone = { {{112,546,0x161823},{2,546,0xffffff},{826,546,0xffffff}, {112,550,0xffffff},{112,553,0x000000},{120,556,0x000000},{119,538,0x161823},{111,530,0x161823},{104,538,0x161823},{102,557,0x000000},{65,563,0xcbccce},{434,502,0xcbccce}}, --ocr {"Use phone or email", "Sign up for TikTok"} } --Use phone 在Sign up p21_2Usephone = {{239,490,0x83848a},{238,490,0xf2f2f2},{240,490,0xf2f2f2},{239,482,0x83848a},{239,479,0xf2f2f2},{239,499,0x83848a},{239,502,0xf2f2f2},{769,167,0x161823},{769,164,0xc1c2c5},{42,153,0x707070}} --已在Phone p22Phone栏目 = { --22 {{215,260,0x161823},{215,259,0xffffff},{215,263,0x161823},{215,264,0xffffff},{111,263,0x161823},{300,263,0x161823},{10,263,0xd0d1d3},{10,262,0xffffff},{531,263,0xd0d1d3},{804,263,0xd0d1d3}, sim=95, region={0, 250, 814, 272}}, --22(5) {{408,261,0x000000},{411,261,0xffffff},{411,263,0xd3d3d3},{408,263,0x000000},{408,258,0xffffff},{408,265,0xffffff},{211,262,0x000000},{10,263,0xd3d3d3},{10,261,0xffffff},{818,263,0xd3d3d3}, sim=95, region={0, 248, 827, 275}}, --ocr {"Phone","Email","Sign up","Your phone number"}, } p22Phone栏目r = { --ocr {"Phone","Email","Sign up","Your phone number"}, } zPhone = {223,225} --已在Email p22Email栏目 = { -- {{602,260,0x161823}, {602,259,0xffffff},{602,263,0x161823},{602,264,0xffffff},{484,263,0x161823},{723,263,0x161823},{820,263,0xd0d1d3},{820,262,0xffffff},{35,263,0xd0d1d3},{279,263,0xd0d1d3}, sim=95, region={270, 248, 827, 275}}, --(5) {{602,260,0x000000}, {602,259,0xffffff},{602,263,0x000000},{602,264,0xffffff},{484,263,0x000000},{723,263,0x000000},{820,263,0xd0d1d3},{820,262,0xffffff},{35,263,0xd0d1d3},{279,263,0xd0d1d3}, sim=95, region={270, 248, 827, 275}}, } zEmail = {610,225} -- 小三角箭头 22 22_2 p22箭头 = { --(5) {{207,368,0x363636},{207,371,0x363636},{203,366,0x363636},{211,366,0x363636},{209,369,0x363636},{205,369,0x363636},{203,371,0xf2f2f2},{211,371,0xf2f2f2},{207,374,0xf2f2f2},{207,363,0xf2f2f2}, sim=96, region={193, 353, 300, 420}}, --(6) 20250505 {{241,404,0x363636},{241,407,0x363636},{241,410,0xffffff},{241,402,0x363636},{241,399,0xffffff},{237,402,0x363636},{245,402,0x363636},{243,404,0x363636},{246,406,0xffffff},{236,406,0xffffff}, sim=96, region={193, 353, 300, 420}}, --{{210,404,0x363636},{33,20,0xffffff}, {206,402,0x363636},{214,402,0x363636},{210,405,0x363636},{210,398,0xffffff},{210,411,0xffffff}}, --{{215,491,0x363636},{211,489,0x363636},{219,489,0x363636},{215,494,0x363636},{215,497,0xf2f2f2},{215,486,0xf2f2f2},{223,489,0xf2f2f2},{207,489,0xf2f2f2},{239,489,0x83848a},{239,498,0x83848a},{732,473,0xf2f2f2},{769,166,0x161823},{769,164,0xc1c2c5},{42,153,0x707070}}, --20241114 (3) --{{234,368,0x363636},{234,371,0x363636},{230,366,0x363636},{238,366,0x363636},{236,369,0x363636},{232,369,0x363636},{230,371,0xffffff},{238,371,0xffffff},{234,363,0xffffff},{258,368,0x8a8b90}}, --20241115 (4) --{{244,368,0x363636},{240,366,0x363636},{248,366,0x363636},{244,371,0x363636},{244,375,0xf2f2f2},{244,362,0xf2f2f2},{239,370,0xf2f2f2},{249,370,0xf2f2f2},{268,367,0x83848a},{267,367,0xf2f2f2}} } --国家页 p23国家_英 = { {{55,159,0x161823}, {247,149,0x000000},{241,155,0x000000},{254,164,0x000000},{247,170,0x000000},{240,167,0x000000}, {56,160,0x161823},{56,156,0xb0b1b4},{55,163,0xb0b1b4},{52,159,0xb0b1b4},{59,160,0xb0b1b4},{813,612,0x707070},{809,1298,0x707070}, sim=95, region={42, 139, 827, 1308}}, --ocr {"Select country/region", "+35818"} } p23字母C = {{812,682,0x858585},{813,682,0x858585}, region={802,500,823,1000}, sim=98} z字母C = {812,673} z字母K = {812,1250} p23国家_马 = { {{55,159,0x161823},{1,1,0xffffff},{261,149,0x000000},{261,158,0x000000},{261,167,0x000000},{263,170,0x000000},{263,173,0xffffff}, {56,160,0x161823},{56,156,0xb0b1b4},{55,163,0xb0b1b4},{52,159,0xb0b1b4},{59,160,0xb0b1b4},{813,612,0x707070},{809,1298,0x707070}}, --23马b {{55,159,0x161823},{6,6,0xffffff},{823,1772,0xffffff}, {261,149,0x000000},{261,156,0x000000},{261,162,0x000000},{261,170,0x000000},{261,173,0xffffff},{261,146,0xffffff},{275,154,0x000000},{279,151,0xffffff},{283,147,0x000000},{283,152,0xffffff},{283,155,0x000000},{283,162,0x000000},{283,170,0x000000},{283,173,0xffffff}, {55,156,0xb0b1b4},{59,159,0xb0b1b4},{56,163,0xb0b1b4},{52,160,0xb0b1b4},{44,148,0x161823},{55,154,0xffffff},{67,148,0x161823}} } -- 字母K p23马点K = {{811,968,0x707070},{5,180,0xffffff},{5,1780,0xffffff}, {811,963,0xffffff},{808,962,0x707070},{816,962,0x707070},{808,960,0xffffff},{809,946,0x707070},{812,948,0x707070},{816,944,0x707070},{816,935,0x707070},{813,922,0xffffff}, {813,919,0x707070},{813,913,0x707070},{813,906,0x707070},{813,903,0xffffff},{816,808,0x707070},{809,800,0x707070},{816,794,0x707070},{812,683,0x707070}} --23(3) p23国家_3 = {{808,745,0x707070},{2,339,0xffffff},{2,1379,0xffffff}, {807,744,0x707070},{812,738,0x707070},{817,740,0x707070},{818,744,0xffffff},{817,750,0x707070},{812,752,0x707070},{812,745,0xffffff},{812,683,0x707070},{817,1369,0x707070}, {808,1312,0x707070},{813,1312,0xffffff},{817,1312,0x707070},{815,1145,0x707070},{808,970,0x707070},{808,716,0x707070},{811,714,0xffffff},{812,1302,0x707070}} z字母C3 = {812,744} z字母K3 = {812,968} -- 选UK p24选UK = { --ocr {"United Kingdom", "Select country"}, } -- 选Canada p24选Canada = { {{759,509,0x707070},{9,110,0xffffff},{760,503,0x707070},{760,499,0xffffff},{760,516,0x707070},{760,519,0xffffff},{767,509,0x707070},{769,509,0xffffff},{753,510,0x707070},{750,510,0xffffff},{778,498,0x707070},{40,498,0x000000},{33,508,0x000000},{43,517,0x000000},{114,498,0x000000},{114,495,0xffffff},{114,517,0x000000},{114,520,0xffffff}}, --ocr {"Canada", "Select country"}, --24马k {{759,405,0x707070},{11,111,0xffffff},{11,1708,0xffffff}, {760,399,0x707070},{760,396,0xffffff},{757,402,0xffffff},{753,405,0x707070},{750,405,0xffffff},{760,412,0x707070},{760,415,0xffffff},{778,394,0x707070},{778,413,0x707070}, {128,406,0x000000},{112,394,0x000000},{112,391,0xffffff},{112,403,0x000000},{112,413,0x000000},{112,416,0xffffff},{105,400,0x000000},{61,406,0x000000},{65,406,0xffffff},{68,406,0x000000}, {660,451,0xe3e4e5},{128,451,0xe3e4e5},{383,356,0xe3e4e5}} } -- UK +44 p25UK_44 = { --ocr {"GB %+44 v", "Sign up", "Your phone number"}, {"GB", "Sign up", "Your phone number"}, } -- CA +1 p25CA_1 = { -- 25(5) 250503 {{207,368,0x363636},{202,366,0x363636},{199,366,0xf2f2f2},{207,371,0x363636},{207,374,0xf2f2f2},{175,358,0x000000},{175,367,0x000000},{175,376,0x000000},{106,357,0x000000},{98,367,0x000000}, sim=99, region={88, 347, 217, 386}}, -- 25(6) 250505 --{176,451,0x8a8b90}, {{196,404,0x363636},{192,402,0x363636},{200,402,0x363636},{196,407,0x363636},{166,394,0x000000},{166,400,0x000000},{166,405,0x000000},{166,412,0x000000},{126,412,0x000000},{123,406,0x000000}, {118,393,0x000000},{115,401,0x000000},{113,407,0x000000},{111,412,0x000000},{100,413,0x000000},{93,410,0x000000},{91,404,0x000000},{92,397,0x000000},{104,395,0x000000}, sim=99, region={81, 383, 210, 461}}, --ocr {"CA %+1 v", "Sign up","Your phone number"}, {"CA", "Sign up","Your phone number", ocr=2}, } -- CA +1 25_2 p25_2CA_1 = {{215,493,0x363636},{211,489,0x363636},{219,489,0x363636},{215,489,0x363636},{215,497,0xf2f2f2},{153,492,0x000000},{151,490,0xf2f2f2},{166,484,0x000000},{169,481,0x000000},{171,481,0x000000},{171,490,0x000000},{171,499,0x000000},{171,502,0xf2f2f2},{171,477,0xf2f2f2},{83,490,0x000000},{93,480,0x000000},{106,493,0x000000},{239,490,0x83848a},{239,498,0x83848a},{238,490,0xf2f2f2}} -- 未输phone number p25未phone = { --25(5) {{417,367,0x7e7e7e},{417,357,0x7e7e7e},{417,353,0xf2f2f2},{417,377,0x7e7e7e},{417,380,0xf2f2f2},{436,370,0x7e7e7e},{433,370,0xf2f2f2},{430,370,0x7e7e7e}, sim=99, region={407, 343, 446, 390}}, --25(6) 20250505 {{472,402,0xadadad},{472,393,0xadadad},{472,390,0xffffff},{472,412,0xadadad},{472,415,0xffffff},{472,451,0x8a8b90},{483,405,0xadadad},{486,405,0xffffff},{489,405,0xadadad},{489,408,0xadadad}, sim=99, region={450, 360, 505, 461}}, --ocr {"Enter phone number", "Phone","Email"}, --ocr {"Phone number", "Phone","Email"} } -- 未输phone number 25_2 p25_2未phone = {{430,490,0xbcbcbe},{429,481,0xbcbcbe},{429,477,0xf2f2f2},{429,501,0xbcbcbe},{429,504,0xf2f2f2},{239,490,0x83848a},{238,490,0xf2f2f2},{460,493,0xbcbcbe},{724,490,0xf2f2f2}, sim=95} -- 已输入 叉叉 p26_2clear = { {{714,485,0x9f9f9f},{714,490,0xf2f2f2},{714,474,0x9f9f9f},{714,507,0x9f9f9f},{729,491,0x9f9f9f},{698,491,0x9f9f9f},{239,490,0x83848a},{238,490,0xf2f2f2}}, --(3) 20241114 {{719,362,0xafb0b4},{719,355,0xafb0b4},{719,367,0xffffff},{720,380,0xafb0b4},{723,371,0xffffff},{731,367,0xafb0b4},{715,363,0xffffff},{707,367,0xafb0b4},{707,414,0xffffff},{707,415,0x8a8b90}}, --(4) 20241115 {{711,363,0xc1c1c1},{710,353,0xc1c1c1},{711,382,0xc1c1c1},{725,367,0xc1c1c1},{696,368,0xc1c1c1},{706,363,0xf2f2f2},{715,363,0xf2f2f2},{715,372,0xf2f2f2},{706,372,0xf2f2f2},{730,367,0xf2f2f2}} } -- continue p26_2continue = { {{242,1113,0xfe2c55},{98,1071,0xfe2c55},{65,1114,0xfe2c55},{380,1145,0xfe2c55},{570,1074,0xfe2c55},{598,1118,0xfe2c55},{762,1113,0xfe2c55}, region={52, 600, 772, 1766}, sim=99}, --{{272,728,0xfe2c55},{156,687,0xfe2c55},{57,728,0xfe2c55},{195,780,0xfe2c55},{769,703,0xfe2c55},{723,766,0xfe2c55},{603,702,0xfe2c55},{480,778,0xfe2c55},{1,723,0xffffff},{826,722,0xffffff}} } -- Sendcode p26Sendcode = {{242,1113,0xfe2c55},{98,1071,0xfe2c55},{65,1114,0xfe2c55},{380,1145,0xfe2c55},{570,1074,0xfe2c55},{598,1118,0xfe2c55},{762,1113,0xfe2c55}, region={52, 600, 772, 1766}, sim=99} zinputPhone = {0.5*w,404} zclear = {744,404} --弃用 20241114 -- Sendcode 红线异常 p26_2Sendcode异常 = { --(2)(3)(4) {{72,451,0xff4c3a},{118,451,0xff4c3a},{163,451,0xff4c3a},{212,451,0xff4c3a},{263,451,0xff4c3a},{305,451,0xff4c3a},{357,451,0xff4c3a},{422,451,0xff4c3a},{464,451,0xff4c3a},{506,451,0xff4c3a}, sim=99, region={62, 400, 777, 461}} --{{67,451,0xff4c3a},{2,2,0xffffff}, {66,451,0xff8477},{65,451,0xffcac5},{64,451,0xffffff},{67,450,0xffffff},{67,452,0xffffff},{375,451,0xff4c3a},{759,451,0xff4c3a},{763,451,0xffffff},{771,120,0x707070}}, -- (3) 20241117 --{{75,415,0xff4c3a},{3,3,0xffffff}, {75,414,0xffffff},{75,416,0xffffff},{648,415,0xff4c3a},{648,414,0xffffff},{648,416,0xffffff},{357,415,0xff4c3a},{756,415,0xff4c3a},{825,415,0xffffff}}, -- (4) 20241117 --{{125,451,0xda3123},{3,3,0xffffff}, {125,459,0xda3123},{625,467,0xda3123},{132,492,0xda3123},{584,414,0xff4c3a},{584,417,0xffffff},{824,483,0xffffff}} } -- 验证码 p27inputcode = { {{64,436,0x8a8b90},{19,19,0xffffff}, {63,436,0xffffff},{64,435,0xffffff},{64,437,0xffffff},{148,436,0x8a8b90},{761,436,0x8a8b90},{679,436,0x8a8b90},{772,120,0x707070},{766,133,0x707070},{772,159,0x707070}}, --(4) 20241115 {{169,429,0xf2f2f2},{169,445,0xf2f2f2},{169,468,0xf2f2f2},{171,468,0xffffff},{171,449,0xffffff},{171,433,0xffffff},{182,433,0xffffff},{182,448,0xffffff},{182,467,0xffffff}, {184,474,0xf2f2f2},{184,450,0xf2f2f2},{184,431,0xf2f2f2},{287,449,0xf2f2f2},{290,449,0xffffff},{299,449,0xffffff},{303,449,0xf2f2f2}, sim=99} } -- 弹窗Create account p27弹窗Create = {{374,965,0x007aff},{10,10,0xcccccc}, {526,980,0x007aff},{310,959,0x007aff},{301,970,0x007aff},{306,970,0xf1f1f1},{370,969,0xf1f1f1},{528,976,0xf1f1f1},{151,925,0xb3b3b3},{674,1014,0xb3b3b3},{70,436,0x6e6f73}} -- 已输入验证码 p28已输入code = { {{714,436,0x8a8b90},{60,20,0xffffff}, {714,435,0xffffff},{714,437,0xffffff},{122,436,0x8a8b90},{122,435,0xffffff},{122,437,0xffffff},{711,388,0x000000}, region={693,364, 749,419}}, --(4) 20241115 {{353,446,0x000000},{303,446,0xf2f2f2},{299,446,0xffffff},{290,446,0xffffff},{287,446,0xf2f2f2},{184,446,0xf2f2f2},{181,446,0xffffff},{172,446,0xffffff},{168,446,0xf2f2f2}, {642,458,0xf2f2f2},{646,458,0xffffff},{655,458,0xffffff},{659,458,0xf2f2f2},{824,451,0xffffff},{4,459,0xffffff}, sim=99} } zback = {45,139} -- 验证码 红线 弃号 p28验证码弃号 = { --28马2 {{65,436,0xff4c3a},{65,435,0xffffff},{65,437,0xffffff},{62,436,0xffffff},{741,436,0xff4c3a},{741,435,0xffffff},{741,437,0xffffff}, sim=99, region={52, 425, 751, 447}}, --28马4 {{78,547,0xda3123},{78,544,0xffffff},{79,541,0xda3123},{71,537,0xda3123},{406,538,0xda3123},{598,551,0xda3123},{324,611,0xfe2c55},{125,596,0xfe2c55},{68,603,0xfe2c55},{78,607,0xffffff}, sim=99, region={60, 500, 666, 650}}, --28马4 5 {{78,547,0xda3123},{78,544,0xffffff},{79,541,0xda3123},{71,537,0xda3123},{406,538,0xda3123},{598,551,0xda3123},{78,607,0xffffff}, sim=99, region={60, 500, 666, 650}}, --28英6 {{82,550,0xda3123},{78,538,0xda3123},{74,552,0xda3123},{78,553,0xffffff},{78,546,0xffffff},{78,558,0xda3123}, sim=99, region={64, 528, 92, 568}}, } p29再发sms = { --29英 {{119,564,0xfe2c55},{125,564,0xfe2c55},{125,561,0xffffff},{125,557,0xfe2c55},{125,568,0xffffff},{125,571,0xfe2c55},{233,564,0xfe2c55},{229,564,0xffffff},{226,561,0xfe2c55},{68,553,0xfe2c55}, sim=95, region={58, 543, 243, 681}}, --29马 {{144,564,0xfe2c55},{139,561,0xffffff},{135,559,0xfe2c55},{134,563,0xffffff},{68,553,0xfe2c55},{75,561,0xfe2c55},{78,565,0xffffff},{81,571,0xfe2c55},{324,552,0xfe2c55},{324,571,0xfe2c55}, sim=95, region={58, 542, 334, 681}}, } p28异常Log = {{278,924,0xfe2c55},{166,907,0xfe2c55},{624,889,0xfe2c55},{661,948,0xfe2c55},{403,971,0xfe2c55},{665,917,0xffffff},{523,884,0xffffff},{284,976,0xffffff},{161,928,0xffffff},{380,656,0xa6a8aa}, sim=99, region={151, 646, 675, 986}} p28_2Verify= {{128,558,0xa8a8a8},{130,545,0xffffff},{127,540,0xffffff},{125,544,0xffffff},{121,544,0xa8a8a8},{124,536,0xa8a8a8},{128,535,0xa8a8a8},{133,539,0xa8a8a8},{134,545,0xa8a8a8},{116,566,0xa8a8a8}, sim=99, region={106, 525, 144, 576}} -- accounts.google.com 30 30b / 30c 偏移 p30栏头accounts = { {{275,174,0x000000},{3,3,0x787977}, {231,181,0x000000},{243,172,0x000000}, {270,167,0x000000},{270,170,0xf7f7f7},{270,174,0x000000},{270,178,0xf7f7f7},{267,182,0x000000},{412,181,0x000000},{412,177,0xf7f7f7},{417,181,0xf7f7f7},{407,181,0xf7f7f7},{530,181,0x000000},{530,177,0xf7f7f7},{534,180,0xf7f7f7},{526,180,0xf7f7f7},{32,170,0x007aff},{32,173,0x007aff},{129,160,0x007aff},{129,182,0x007aff},{682,178,0x007aff},{706,162,0x007aff},{712,176,0x007aff},{779,162,0x007aff}}, {{427,181,0x000000},{3,3,0x787977}, {252,105,0xd1d3d0}, {427,177,0xf7f7f7},{431,180,0xf7f6f7},{423,181,0xf7f7f7},{545,181,0x000000},{545,177,0xf7f7f7},{549,180,0xf7f7f7},{541,181,0xf7f7f7},{252,160,0x000000},{247,167,0x000000}, {246,182,0x000000},{252,177,0x000000},{258,171,0x000000},{252,167,0xf7f6f7},{396,163,0x000000},{418,178,0x000000},{441,188,0x000000},{502,188,0x000000},{516,160,0x000000},{614,182,0x000000}} } -- 594,1051,0x203ea9 p39人机检测 = {{594,1051,0x203ea9},{593,1064,0xf9f9f9},{585,1074,0xb4b4b4},{571,1082,0xb4b4b4},{549,1063,0xb6b6b6},{551,1050,0x4e8df5},{565,1035,0x4f8df5},{578,1036,0x2843a3},{571,1059,0xf9f9f9}} --账号输入框 蓝 p30框ZH = {{{571,813,0xffffff},{570,759,0x0b57d0},{778,778,0x0b57d0},{778,843,0x0b57d0},{623,868,0x0b57d0},{137,868,0x0b57d0},{49,782,0x0b57d0},{61,759,0x0b57d0},{55,915,0x0b57d0},{64,901,0x0b57d0}}, {{589,807,0xffffff},{589,757,0x0b57d0},{249,757,0x0b57d0},{245,757,0xffffff},{65,757,0xffffff},{62,757,0x0b57d0},{49,771,0x0b57d0},{469,865,0x0b57d0},{777,798,0x0b57d0},{52,903,0x0b57d0}} } -- 账号输入框 初始未输入 灰 p30b框ZH灰 = {{70,756,0x747775},{242,756,0x747775},{48,777,0x747775},{48,832,0x747775},{314,866,0x747775},{778,804,0x747775},{47,796,0xffffff},{320,758,0xffffff},{355,868,0xffffff},{777,804,0xffffff}, {52,895,0x0b57d0},{60,895,0x0b57d0},{52,904,0x0b57d0},{52,912,0x0b57d0}} --账号已输入 蓝 p32账号已输入 = {{378,666,0x1f1f1f},{378,615,0xffffff},{378,611,0x0b57d0},{367,611,0x0b57d0},{390,611,0x0b57d0},{378,715,0xffffff},{378,720,0x0b57d0},{367,720,0x0b57d0},{390,720,0x0b57d0}} --键盘Done p32键盘Done = {{756,1145,0x007aff},{784,1149,0x007aff},{717,1138,0x007aff},{722,1156,0x007aff},{722,1151,0xeff0f1},{826,1102,0x919398},{826,1105,0xeff0f1},{2,1102,0x919398},{2,1105,0xeff0f1},{2,1099,0xffffff}} -- 账号输入框 灰 p33框ZH灰 = {{680,813,0xffffff},{249,758,0x747775},{246,758,0xffffff},{65,758,0xffffff},{62,758,0x747775},{48,779,0x747775},{223,868,0x747775},{778,814,0x747775}} -- 账号已输入 灰 p33账号已输入灰 = {{433,815,0x1f1f1f},{433,761,0xffffff},{433,758,0x747775},{443,758,0x747775},{423,758,0x747775},{433,866,0xffffff},{433,868,0x747775},{443,868,0x747775},{423,868,0x747775}} --帐密Next p30帐密Next = {{700,1203,0x0b57d0},{656,1187,0x0b57d0},{740,1187,0x0b57d0},{767,1221,0x0b57d0},{740,1254,0x0b57d0},{708,1259,0x0b57d0},{660,1254,0x0b57d0},{630,1238,0x0b57d0},{621,1221,0x0b57d0},{631,1200,0x0b57d0},{655,1201,0x0b57d0},{642,1221,0x0b57d0},{663,1239,0x0b57d0},{694,1239,0x0b57d0},{741,1222,0x0b57d0},{732,1203,0x0b57d0}} -- 密码输入框 蓝 p34框MA = {{628,890,0xffffff},{322,837,0x0b57d0},{653,837,0x0b57d0},{777,848,0x0b57d0},{778,920,0x0b57d0},{561,945,0x0b57d0},{193,946,0x0b57d0},{49,913,0x0b57d0},{50,854,0x0b57d0},{62,979,0x444746}} -- 密码已输入 蓝 p35密码已输入 = {{89,666,0x1f1f1f},{49,666,0x0b57d0},{777,666,0x0b57d0},{1,666,0xffffff},{826,666,0xffffff},{61,753,0x444746},{55,769,0x444746},{87,779,0x444746}} -- 89,892,0x1f1f1f p36密码已输入灰 = {{89,892,0x1f1f1f},{99,892,0xffffff},{108,892,0x1f1f1f},{309,836,0x747775},{306,836,0xffffff},{65,836,0xffffff},{62,836,0x747775},{778,852,0x747775},{558,946,0x747775},{48,883,0x747775}, {64,979,0x444746},{55,992,0x444746}} -- 账号完成 Continue p38ZM完成_Continue = {{610,1128,0x0b57d0},{610,1123,0x0b57d0},{610,1120,0xffffff},{610,1117,0x0b57d0},{610,1113,0xffffff},{610,1134,0x0b57d0},{610,1137,0xffffff},{610,1088,0x747775},{610,1166,0x747775},{427,1128,0x747775},{49,1127,0x747775},{2,1124,0xffffff},{120,1088,0x747775},{346,1166,0x747775},{400,1128,0x747775},{778,1128,0x747775}} -- 生日 p40生日 = {{704,293,0x78ebfa},{20,20,0xffffff}, {673,293,0x78ebfa},{673,285,0x161823},{665,293,0x161823},{674,306,0x161823},{729,294,0x78ebfa},{729,285,0x161823},{738,292,0x161823},{729,305,0x161823},{729,318,0xffffff}, {728,326,0x161823},{738,317,0x161823},{749,326,0x161823},{702,245,0xf07637}} -- 生日未 574 / 1540 p40生日未 = {{590,582,0xfeaabb},{744,542,0xfeaabb},{737,612,0xfeaabb},{266,544,0xfeaabb},{106,544,0xfeaabb},{70,576,0xfeaabb},{155,614,0xfeaabb}} -- 生日暗 p40生日暗背 = { {{675,293,0x3c757d},{700,294,0x3c757d},{730,294,0x3c757d},{737,302,0x0b0c11},{671,285,0x0b0c11},{684,313,0x7f7f7f}, sim=99, region={661, 275, 747, 323}} } -- 生日弹窗OK p40生日弹窗OK = { {{420,1022,0x000000},{420,1018,0x000000},{420,1013,0x000000},{420,1008,0xffffff},{420,1031,0x000000},{420,1035,0xffffff},{168,974,0xe0e0e0},{314,974,0xe0e0e0},{495,974,0xe0e0e0},{674,974,0xe0e0e0}, sim=99, region={158, 938, 684, 1045}} } -- 生日已 p41生日已 = { {{590,582,0xfe2c55},{744,542,0xfe2c55},{737,612,0xfe2c55},{266,544,0xfe2c55},{106,544,0xfe2c55},{70,576,0xfe2c55},{155,614,0xfe2c55}}, {{574,1547,0xfe2c55},{88,1522,0xfe2c55},{57,1545,0xffffff},{249,1491,0xffffff},{769,1559,0xffffff},{706,293,0x78ebfa},{672,294,0x78ebfa},{665,294,0x161823},{10,10,0xffffff}} } -- 密码 p42密码 = { {{715,397,0xadadad},{715,440,0x8a8b90},{20,20,0xffffff},{715,439,0xffffff},{73,440,0x8a8b90},{73,441,0xffffff},{732,386,0xadadad},{699,386,0xadadad},{703,400,0xadadad},{772,120,0x707070},{754,149,0x707070},{789,149,0x707070},{771,148,0x707070},{777,134,0x707070},{766,132,0x707070},{771,135,0xffffff}}, --(4) 20241115 {{701,423,0x7e7e7e},{701,428,0x7e7e7e},{698,427,0xf2f2f2},{705,427,0xf2f2f2},{711,424,0x7e7e7e},{715,422,0xf2f2f2},{715,415,0x7e7e7e},{692,425,0x7e7e7e},{688,422,0xf2f2f2},{688,415,0x7e7e7e}, {703,373,0xf2f2f2},{703,370,0xffffff},{700,466,0xf2f2f2},{700,469,0xffffff},{762,414,0xf2f2f2},{765,414,0xffffff},{65,414,0xf2f2f2},{62,414,0xffffff}, sim=99}, --42马 {{702,423,0x7e7e7e},{702,419,0xf2f2f2},{702,429,0x7e7e7e},{702,431,0xf2f2f2},{695,426,0xf2f2f2},{691,426,0x7e7e7e},{709,426,0xf2f2f2},{712,426,0x7e7e7e},{710,421,0x7e7e7e},{693,421,0x7e7e7e}, {5,5,0xffffff},{822,1786,0xffffff},{771,148,0x707070},{766,137,0xffffff},{766,133,0x707070}} } -- 密码未 p42密码未 = { {{593,738,0xf1f1f2},{747,704,0xf1f1f2},{744,775,0xf1f1f2},{340,778,0xf1f1f2},{281,703,0xf1f1f2},{218,745,0xf1f1f2},{89,701,0xf1f1f2},{72,759,0xf1f1f2},{62,741,0xffffff},{228,692,0xffffff}, sim=95}, {{612,736,0xf1f1f2},{737,699,0xf1f1f2},{84,772,0xf1f1f2},{59,729,0xffffff},{353,688,0xffffff},{408,791,0xffffff},{91,703,0xf1f1f2},{706,769,0xf1f1f2}}, --(4) 20241115 {{701,423,0x7e7e7e},{701,428,0x7e7e7e},{698,427,0xf2f2f2},{705,427,0xf2f2f2},{711,424,0x7e7e7e},{715,422,0xf2f2f2},{715,415,0x7e7e7e},{692,425,0x7e7e7e},{688,422,0xf2f2f2},{688,415,0x7e7e7e}, {703,373,0xf2f2f2},{703,370,0xffffff},{700,466,0xf2f2f2},{700,469,0xffffff},{762,414,0xf2f2f2},{765,414,0xffffff},{310,409,0x6a6a6a},{175,435,0x6a6a6a},{65,414,0xf2f2f2},{62,414,0xffffff}, sim=99}, --42马 {{702,423,0x7e7e7e},{702,419,0xf2f2f2},{702,429,0x7e7e7e},{702,431,0xf2f2f2},{695,426,0xf2f2f2},{691,426,0x7e7e7e},{709,426,0xf2f2f2},{712,426,0x7e7e7e},{710,421,0x7e7e7e},{693,421,0x7e7e7e}, {5,5,0xffffff},{822,1786,0xffffff},{771,148,0x707070},{766,137,0xffffff},{766,133,0x707070}, {379,422,0x6a6a6a}, sim=99} } zpsw = {400,393} -- 密码已 p43密码已 = { {{593,738,0xfe2c55},{747,704,0xfe2c55},{744,775,0xfe2c55},{340,778,0xfe2c55},{281,703,0xfe2c55},{218,745,0xfe2c55},{89,701,0xfe2c55},{72,759,0xfe2c55},{62,741,0xffffff},{228,692,0xffffff}, sim=95}, {{612,736,0xfe2c55},{737,699,0xfe2c55},{84,772,0xfe2c55},{59,729,0xffffff},{353,688,0xffffff},{408,791,0xffffff},{91,703,0xfe2c55},{706,769,0xfe2c55}} } p43密码后异常 = { --ocr {"Dismiss", "Your account","banned"}, -- {"Request another review", "banned"}, } --粘贴 p44粘贴 = {{97,300,0x090909},{85,292,0x060606},{100,314,0x0d0d0d},{93,311,0xf3f3f3},{89,303,0xf6f6f6},{89,308,0x0b0b0b},{81,300,0xf9f9f9},{80,292,0xf5f5f5},{80,296,0x0b0b0b},{102,291,0x101010},{126,296,0x0b0b0b},{136,296,0x0c0c0c},{131,299,0x0b0b0b},{131,313,0x0a0a0a},{131,317,0xf4f4f4},{127,299,0xf8f8f8},{182,302,0x080808},{182,309,0x070707},{182,319,0x090909},{182,323,0xf3f3f3}, sim=85} -- 昵称 通 p44昵称 = { {{762,562,0x8a8b90},{5,5,0xffffff}, {765,562,0xffffff},{493,562,0x8a8b90},{229,562,0x8a8b90},{65,562,0x8a8b90},{63,562,0xffffff},{69,561,0xffffff},{707,563,0xffffff} ,{771,123,0x707070},{771,127,0xffffff},{771,131,0x707070},{771,136,0xffffff},{771,141,0x707070},{771,147,0x707070},{771,152,0xffffff},{771,156,0x707070},{788,139,0x707070},{776,135,0x707070},{755,141,0x707070}}, --ocr {"Create nickname", "Skip"}, -- (3) 20241114 {{450,557,0xf2f2f2},{771,147,0x707070},{5,5,0xffffff}, {771,136,0xffffff},{767,133,0x707070},{772,131,0x707070},{776,136,0x707070},{771,127,0xffffff},{771,123,0x707070},{755,139,0x707070},{788,139,0x707070}, {61,141,0x707070},{82,156,0x707070},{36,134,0x707070},{43,128,0x707070},{42,151,0x707070},{320,246,0x161823},{83,246,0x161823},{514,506,0xf2f2f2}}, -- (4) 20241115 {{609,509,0xf2f2f2},{761,505,0xf2f2f2},{761,505,0xf2f2f2},{825,505,0xffffff}, {2,2,0xffffff}, {320,251,0x161823},{320,254,0xffffff},{317,258,0x161823},{323,288,0x161823},{320,271,0x161823},{317,247,0x161823},{322,244,0x161823},{313,247,0xffffff},{88,245,0x161823},{67,267,0x161823},{100,258,0x161823},{100,262,0xffffff},{555,273,0x161823},{555,277,0xffffff},{555,281,0x161823}, {771,140,0x707070}, {71,327,0x707070},{122,375,0x707070},{433,406,0x707070}, sim=99}, --44(4) {{643,589,0xf2f2f2},{3,3,0xffffff},{771,147,0x707070}, {88,246,0x161823},{67,267,0x161823},{105,277,0x161823},{106,273,0xffffff},{118,251,0x161823},{118,254,0xffffff},{118,258,0x161823},{136,300,0x161823},{607,251,0x161823},{422,300,0x161823}, {240,500,0xf2f2f2}, sim=99}, --44(6) {{106,256,0x161823},{61,141,0x707070},{36,133,0x707070},{82,156,0x707070},{771,147,0x707070},{784,128,0x707070},{111,258,0xffffff},{114,258,0x161823},{116,254,0xffffff},{88,245,0x161823}, {320,251,0x161823},{319,254,0xffffff},{319,258,0x161823},{319,288,0x161823},{319,291,0xffffff}, region={26,118,794,301}, sim=98} } -- 昵称未 p44昵称未 = { --{{596,756,0xf1f1f2},{747,721,0xf1f1f2},{753,784,0xf1f1f2},{409,795,0xf1f1f2},{321,722,0xf1f1f2},{229,779,0xf1f1f2},{147,718,0xf1f1f2},{95,791,0xf1f1f2},{75,754,0xf1f1f2},{62,741,0xffffff},{320,710,0xffffff}}, --{{653,784,0xf1f1f2},{20,20,0xffffff}, {468,744,0xf1f1f2},{468,741,0xffffff},{750,825,0xf1f1f2},{734,562,0x8a8b90},{375,562,0x8a8b90},{83,562,0x8a8b90},{736,509,0xffffff},{772,123,0x707070},{771,156,0x707070}}, --ocr {"Add your nickname", "Create nickname", "Skip"}, {"0/30", "Create nickname", "Skip"}, --44(4) --{{643,589,0xf2f2f2},{3,3,0xffffff},{771,147,0x707070},{555,981,0xfeaabb}, {358,557,0x9f9f9f},{459,530,0x9f9f9f},{459,527,0xf2f2f2},{574,543,0x9f9f9f},{207,530,0x9f9f9f},{189,530,0x9f9f9f},{189,552,0x9f9f9f},{207,552,0x9f9f9f}, sim=99}, --44(6) --{{320,512,0xa8a8a8},{338,512,0xa8a8a8},{333,512,0xffffff},{328,512,0xa8a8a8},{771,147,0x707070},{563,1109,0xffabbb},{214,1111,0xffabbb}, region={204,128,781,1200}, sim=98} } znick = {500,491} zskip = {64, 139} -- 昵称已 p45昵称已 = { {{596,756,0xfe2c55},{747,721,0xfe2c55},{753,784,0xfe2c55},{409,795,0xfe2c55},{321,722,0xfe2c55},{229,779,0xfe2c55},{147,718,0xfe2c55},{95,791,0xfe2c55},{75,754,0xfe2c55},{62,741,0xffffff},{320,710,0xffffff}}, {{653,784,0xfe2c55},{20,20,0xffffff}, {468,744,0xfe2c55},{468,741,0xffffff},{750,825,0xfe2c55},{734,562,0x8a8b90},{375,562,0x8a8b90},{83,562,0x8a8b90},{736,509,0xcccccc},{772,123,0x707070},{771,156,0x707070}}, --20241030 {{250,1107,0xfe2c55},{739,1072,0xfe2c55},{86,1154,0xfe2c55},{59,1108,0xffffff},{213,1063,0xffffff},{769,1102,0xffffff},{716,1151,0xfe2c55}} } -- 昵称已 叉 710,510,0xf2f2f2 p45昵称已X = {{710,510,0xf2f2f2},{706,506,0xf2f2f2},{706,515,0xf2f2f2},{715,515,0xf2f2f2},{715,506,0xf2f2f2},{710,507,0xc1c1c1},{707,511,0xc1c1c1},{711,514,0xc1c1c1},{714,510,0xc1c1c1},{703,504,0xc1c1c1}, {719,503,0xc1c1c1},{718,518,0xc1c1c1},{703,518,0xc1c1c1},{711,521,0xc1c1c1},{701,510,0xc1c1c1},{721,510,0xc1c1c1},{711,500,0xc1c1c1}, region={691,450,731,690}, sim=98} -- 昵称 出提示 p46出提示 = { {{400,112,0x5d5d5d},{2,2,0xffffff},{825,132,0xffffff}, {359,112,0x5f5f5f},{328,112,0x616161},{302,112,0x626262},{427,112,0x5d5d5e},{461,112,0x5f5f5f},{461,111,0xffffff},{435,111,0xffffff},{385,111,0xffffff},{335,111,0xffffff}, {772,123,0x707070},{772,127,0xffffff},{772,132,0x707070},{776,135,0x707070},{771,136,0xffffff},{771,141,0x707070},{771,147,0x707070},{771,152,0xffffff},{771,156,0x707070}}, --46(2) {{258,113,0x636363},{277,113,0x636363},{294,113,0x636363},{318,113,0x636363},{342,113,0x636363},{365,113,0x636363},{393,113,0x636363},{415,113,0x636363},{436,113,0x636363},{465,113,0x636363}, sim=98, region={121, 103, 717, 201}} } --面部 skip p49SkipFace = { --49(3)(2)(1) {{74,135,0x707070},{74,132,0xffffff},{74,128,0x707070},{74,150,0x707070},{74,153,0xffffff},{82,156,0x707070},{82,160,0xffffff},{83,146,0x707070},{82,135,0x707070},{82,131,0xffffff}, {228,1663,0xfe2c55},{115,1625,0xfe2c55},{115,1622,0xffffff},{65,1694,0xfe2c55},{62,1694,0xffffff},{599,1718,0xfe2c55},{599,1721,0xffffff},{762,1652,0xfe2c55},{765,1652,0xffffff},{608,1664,0xfe2c55}, region={52,118,775,1731}, sim=98}, --49 {{61,141,0x707070},{42,128,0x707070},{82,136,0x707070},{83,145,0x707070},{83,156,0x707070},{93,143,0xffffff},{96,143,0x707070},{74,1639,0xfe2c55},{324,1700,0xfe2c55},{751,1630,0xfe2c55}, {263,402,0xfe5d7d},{266,390,0x010202},{290,404,0xfe5d7d},{296,405,0xffffff},{300,434,0xfe5d7d},{309,434,0xffffff},{317,434,0xfe5d7d},{519,461,0x65d9d5},{516,452,0x010202},{550,344,0x65d9d5}, sim=99, region={32, 118, 761, 1710}}, --49(2) {{61,141,0x707070},{42,128,0x707070},{82,136,0x707070},{83,145,0x707070},{83,156,0x707070},{93,143,0xffffff},{96,143,0x707070},{74,1639,0xfe2c55},{324,1700,0xfe2c55},{751,1630,0xfe2c55}, {325,424,0x14eae4},{332,424,0x6d2fff},{327,433,0x6d30ff},{336,436,0x14eae4},{612,395,0xff6577},{622,396,0xffffff},{631,396,0xffdb00},{561,457,0xff6677},{457,522,0x14eae4},{466,531,0x6e2ffe}, sim=99, region={32, 118, 761, 1710}} } -- 可关注 红十 p50可关注 = {{763,928,0xfe2c55},{765,925,0xffe9ed},{767,925,0xffffff},{768,925,0xffe9ed},{770,928,0xfe2c55},{770,930,0xffe9ed},{770,931,0xffffff},{770,933,0xffe9ed},{770,935,0xfe2c55},{766,931,0xffffff}, sim=99, region={753, 666, 780, 1083}} -- Not now Get notified p51Notnow = { {{246,1633,0xf2f2f2},{95,1614,0xf2f2f2},{365,1698,0xf2f2f2},{417,1652,0xffffff},{424,1652,0xfe2c55},{590,1613,0xfe2c55},{715,1698,0xfe2c55},{825,1789,0xffffff},{781,149,0x7f7f7f},{773,121,0x7f7f7f},{754,143,0x7f7f7f},{790,158,0x7f7f7f},{2,1789,0xffffff}}, {{282,1639,0xf2f2f2},{781,149,0x7f7f7f}, {361,1612,0xf3f3f3},{361,1608,0xffffff},{401,1687,0xf2f2f2},{419,1654,0xffffff},{429,1654,0xfe2c55},{687,1613,0xfe2c55},{622,1697,0xfe2c55},{612,1065,0xdcdcde},{765,1654,0xffffff}}, --(4) {{209,1639,0xf2f2f2},{80,1617,0xf2f2f2},{382,1698,0xf2f2f2},{376,1701,0xffffff},{419,1652,0xffffff},{424,1627,0xfe2c55},{639,1698,0xfe2c55},{762,1643,0xfe2c55},{604,1613,0xfe2c55},{765,1650,0xffffff}, {583,1053,0x00abf4},{564,1142,0xff3b76}, sim=99} } -- Not now Get notified xxx p51Notnow_a = { {{572,1083,0x00abf4},{585,1069,0x00abf4},{563,1059,0x00abf4},{572,1065,0xffffff},{572,1144,0xff3b76},{586,1157,0xff3b76},{573,1170,0xff3b76},{558,1160,0xff3b76},{570,1157,0xffffff},{597,1112,0xdcdcdd},{613,1067,0xdcdcde},{607,1024,0xdcdcde},{584,955,0xdcdcdd},{538,979,0xdcdcde},{548,1020,0xdcdcdd},{539,1042,0xffffff},{502,1113,0xdcdcde},{514,1133,0xffffff},{564,1180,0xffffff}}, --51(5) {{771,968,0x707070},{771,962,0xffffff},{784,956,0x707070},{759,956,0x707070},{58,962,0xadadad},{58,967,0xffffff},{58,970,0xadadad},{572,1116,0xff4468},{570,1205,0xff4468}, sim=99, region={48, 888, 794, 1300}} } p51Notnow_b = { --51(5) {{176,1632,0xf2f2f2},{80,1616,0xf2f2f2},{393,1689,0xf2f2f2},{414,1651,0xffffff},{435,1615,0xfe2c55},{587,1631,0xfe2c55},{753,1691,0xfe2c55},{501,1697,0xfe2c55},{501,1703,0xffffff},{394,1620,0xf2f2f2}, sim=95, region={70, 1605, 763, 1713}} } -- ok 下弹菜单 xxx p52OK = {{600,1652,0xfe2b54},{746,1614,0xff2a58},{743,1687,0xfe2b54},{121,1619,0xfe2b54},{88,1646,0xfe2b54},{86,1260,0x020202},{76,1269,0xffffff},{87,1282,0x020202},{771,1092,0x000000},{771,1089,0xadadad}} --Faham xxx p53_Faham = { --53马1 2 {{402,1124,0x000000},{402,1113,0x000000},{402,1109,0xffffff},{402,1133,0x000000},{402,1137,0xffffff},{411,1120,0x000000},{414,1118,0xffffff},{409,1123,0xffffff},{368,1114,0x000000},{378,1114,0x000000}, {135,1076,0xe0e0e0},{135,1075,0xffffff},{427,1076,0xe0e0e0},{692,1076,0xe0e0e0},{692,1077,0xffffff},{198,805,0x474747},{198,822,0x474747},{203,812,0x474747},{203,816,0xffffff},{210,822,0x474747}, {211,993,0x474747},{267,981,0x474747},{309,991,0x474747},{317,974,0x474747},{413,990,0x474747},{410,989,0xffffff},{366,923,0x474747},{534,889,0x474747}, sim=99, region={126, 770, 711, 1186}}, } -- 广告 叉掉 xxx p54_AD叉 = {{413,1188,0xffffff},{413,1184,0x999999},{413,1193,0x9f9d9e},{415,1189,0xffffff},{560,1012,0xff490f},{168,526,0xfefedc},{365,504,0x916b00},{315,524,0xffe071},{535,501,0xfee893},{374,1667,0x062b34}} -- Choose p55_Choose_select = {{409,1302,0xfe2c55},{373,1297,0xfe2c55},{568,352,0x65d9d5},{511,202,0xfe5d7d},{408,205,0x65d9d5},{2,2,0xffffff}} p56弹窗弃号 = { --56马 {{253,707,0x000000},{250,703,0xffffff},{246,713,0x000000},{252,713,0xffffff},{552,773,0x000000},{546,772,0xffffff},{589,773,0x000000},{583,771,0xffffff},{579,770,0x000000},{476,1122,0x000000}, {560,890,0x474747},{267,855,0x4f4f4f},{267,858,0xffffff},{267,861,0x474747},{293,967,0x010101},{353,1004,0x474747},{500,968,0x474747},{499,965,0xffffff},{463,968,0x010101}, sim=99, region={236, 693, 599, 1132}} } -- 我页 黑十 p60我页 = {{376,1652,0x20d5ec},{374,1667,0x20d5ec},{377,1691,0x20d5ec},{386,1651,0x161823},{409,1665,0x161823},{414,1665,0xffffff},{414,1680,0xffffff},{422,1670,0xffffff},{419,1675,0x161823},{442,1687,0x161823},{448,1647,0xfa2d6c},{453,1658,0xfa2d6c},{453,1676,0xfa2d6c},{449,1693,0xfa2d6c}, sim=99, region={364, 1641, 460, 1701}} -- 我页 黑十 弹窗 124 p60我页弹窗 = {{374,1670,0x106a75},{374,1657,0x106a75},{374,1686,0x106a75},{387,1686,0x0b0c11},{404,1670,0x7f7f7f},{414,1670,0x7f7f7f},{424,1671,0x7f7f7f},{430,1671,0x0b0c11},{453,1671,0x7c1636},{453,1657,0x7c1636}, region={364,1647,463,1696}, sim=98} -- upload 小按钮 带白边 p60upload = { {{416,1133,0xfe2c55},{416,1125,0xfe2c55},{416,1122,0xffffff},{416,1178,0xfe2c55},{416,1181,0xffffff},{326,1144,0xfe2c55},{323,1144,0xffffff},{501,1143,0xfe2c55},{504,1143,0xffffff},{336,1131,0xfe2c55}}, {{421,1100,0xfe2c55},{350,1087,0xfe2c55},{350,1085,0xffffff},{519,1105,0xfe2c55},{521,1105,0xffffff},{397,1140,0xfe2c55},{397,1142,0xffffff},{308,1109,0xfe2c55},{306,1109,0xffffff}}, --(5) {{420,1143,0xfe2c55},{318,1126,0xfe2c55},{318,1123,0xffffff},{308,1173,0xfe2c55},{305,1173,0xffffff},{471,1187,0xfe2c55},{471,1190,0xffffff},{519,1144,0xfe2c55},{522,1144,0xffffff}}, --(7) {{391,1102,0xfe2c55},{327,1094,0xfe2c55},{349,1088,0xfe2c55},{373,1088,0xfe2c55},{427,1088,0xfe2c55},{465,1088,0xfe2c55},{488,1088,0xfe2c55},{499,1099,0xfe2c55},{350,1085,0xffffff},{469,1085,0xffffff}, sim=99, region={317, 1075, 509, 1150}}, --60d {{419,1183,0xfe2c55},{311,1189,0xfe2c55},{326,1171,0xfe2c55},{344,1167,0xfe2c55},{394,1166,0xfe2c55},{449,1166,0xfe2c55},{495,1168,0xfe2c55},{512,1181,0xfe2c55},{308,1185,0xffffff},{317,1171,0xffffff},{333,1163,0xffffff},{367,1163,0xffffff},{423,1163,0xffffff},{490,1163,0xffffff},{509,1170,0xffffff},{518,1183,0xffffff}, sim=99, region={301, 1000, 522, 1300}}, --60e {{419,1180,0xfe2c55},{327,1196,0xfe2c55},{334,1177,0xfe2c55},{351,1168,0xfe2c55},{390,1166,0xfe2c55},{440,1166,0xfe2c55},{474,1167,0xfe2c55},{491,1175,0xfe2c55},{500,1196,0xfe2c55},{323,1196,0xffffff},{327,1181,0xffffff},{340,1167,0xffffff},{361,1163,0xffffff},{401,1163,0xffffff},{434,1163,0xffffff},{468,1163,0xffffff},{486,1167,0xffffff},{497,1176,0xffffff},{504,1195,0xffffff}, sim=99, region={317, 1000, 510, 1300}}, } p63Login我 = Demo -- Recent 670,283,0x161823 --p70Recent = {{670,283,0x161823},{670,5,0x000000}, {670,281,0x161823},{670,279,0xffffff},{613,283,0x161823},{739,283,0x161823},{535,283,0xd0d1d3},{535,282,0xffffff},{812,283,0xd0d1d3},{812,282,0xffffff}} -- Recent p70Recent = { --70(1) {{145,283,0x161823},{29,283,0x161823},{28,283,0xd0d1d3},{28,282,0xffffff},{29,282,0x161823},{33,279,0xffffff}, sim=99, region={25, 278, 800, 284}}, --70(3) {{145,282,0x000000},{29,282,0x000000},{28,282,0xffffff},{28,283,0xd0d1d3},{141,278,0xffffff},{65,277,0xffffff}, sim=99, region={25, 276, 814, 284}}, } -- 642,243,0x8a8b90 p70Photo未 = { --Foto未 70d 70e {{642,243,0x8a8b90},{642,233,0x8a8b90},{642,252,0x8a8b90},{648,233,0x8a8b90},{648,243,0x8a8b90},{648,281,0xffffff},{648,283,0xd0d1d3},{642,255,0xffffff},{676,239,0x8a8b90}, sim=99, region={474, 230, 690, 286}}, --Photos未 70h {{419,244,0x8a8b90},{419,233,0x8a8b90},{413,234,0x8a8b90},{413,242,0x8a8b90},{413,251,0x8a8b90},{413,255,0xffffff},{468,239,0x8a8b90},{468,247,0x8a8b90},{471,253,0x8a8b90},{468,232,0xffffff},{504,249,0x8a8b91},{413,283,0xd0d1d3},{413,280,0xffffff}, sim=99, region={400, 230, 719, 286}}, --Photos --{{624,241,0x8a8b90},{624,234,0x8a8b90},{630,233,0x8a8b90},{630,238,0xffffff},{630,244,0x8a8b90},{648,283,0xd0d1d3},{624,249,0x8a8b90},{624,252,0x8a8b90},{624,283,0xd0d1d3},{624,281,0xffffff},{624,5,0x000000},{825,5,0x000000},{5,5,0x000000}}, --Photos - Live Photos --{{413,241,0x8a8b90},{413,234,0x8a8b90},{420,234,0x8a8b90},{420,239,0xffffff},{420,244,0x8a8b90},{413,244,0x8a8b90},{413,252,0x8a8b90},{413,281,0xffffff},{413,283,0xd0d1d3},{413,5,0x000000},{825,5,0x000000},{5,5,0x000000}} } zPhoto = {670,238} --abd -- Grid p70Grid = { --70(1) (3) {{698,500,0xffffff},{3,500,0xffffff}, {421,500,0xffffff},{123,500,0xffffff},{702,777,0xffffff},{128,777,0xffffff},{404,1054,0xffffff},{112,1054,0xffffff},{410,1332,0xffffff},{700,1332,0xffffff}, sim=99, region={0, 300, 800, 1640}}, --70_2(2) {{44,377,0xffffff},{361,377,0xffffff},{601,377,0xffffff},{796,377,0xffffff},{697,585,0xffffff},{527,585,0xffffff},{222,585,0xffffff},{132,585,0xffffff}, sim=99, region={0, 300, 810, 1640}}, } -- Next1 p71Next1 = {{607,1651,0xfe2c55},{449,1629,0xfe2c55},{426,1696,0xfe2c55},{415,1666,0xffffff},{398,1671,0xf1f1f2},{333,1635,0xf1f1f2},{296,1710,0xf1f1f2}} -- Next2 p72Next2 = { {{587,1646,0xfe2c55},{20,20,0x000000}, {452,1629,0xfe2c55},{435,1711,0xfe2c55},{414,1661,0x000000},{402,1665,0xffffff},{332,1629,0xffffff},{240,1712,0xffffff}}, -- 72e {{741,1648,0xfe2c55},{661,1629,0xfe2c55},{774,1629,0xfe2c55},{802,1650,0xfe2c55},{802,1693,0xfe2c55},{738,1714,0xfe2c55},{738,1717,0x000000},{805,1665,0x000000},{771,1626,0x000000},{680,1626,0x000000}, sim=99, region={409, 1616, 816, 1728}}, -- 72d --{{695,1671,0xfe2c55},{533,1630,0xfe2c55},{426,1700,0xfe2c55},{806,1665,0x000000},{689,1626,0x000000},{481,1718,0x000000},{419,1674,0x000000}, sim=99, region={409, 1616, 816, 1728}} } -- Next3 p73Next3 = {{736,1654,0xfe2b54},{785,1635,0xfe2b54},{776,1696,0xfe2b54},{488,1701,0xfe2b54},{467,1636,0xfe2b54},{429,1661,0xfe2b54},{415,1646,0xfffeff},{411,1685,0xffffff},{400,1666,0xf1f1f1},{257,1636,0xf1f1f1},{202,1705,0xf1f1f1},{36,1680,0xf1f1f1},{16,1678,0xffffff},{670,1617,0xffffff},{537,1722,0xffffff},{37,140,0x000000},{33,139,0xbababa},{31,139,0xffffff},{42,139,0xffffff}} -- 弹窗 Post Now p73弹窗PostNow = { {{543,1078,0x000000}, {414,1031,0xc5c5c5}, {543,1070,0x000000},{541,1067,0xffffff},{543,1087,0x000000},{546,1089,0x000000},{550,1089,0xffffff},{547,1085,0xffffff},{486,1069,0x000000},{499,1075,0x000000},{503,1075,0xffffff}, {320,1069,0x595959},{320,1079,0x595959},{320,1088,0x595959},{320,1092,0xffffff}, sim=95, region={310, 1010, 560, 1110}}, } -- Next4 ok xxx p73_2Next4ok = {{592,1648,0xfe2b54},{18,18,0x7f7f7f}, {725,1616,0xfe2b54},{768,1632,0xffffff},{298,1694,0xfe2b54},{152,1611,0xff2b53},{68,1652,0xfe2b54},{61,1652,0xffffff},{123,1600,0xffffff},{771,1091,0x000000},{771,1088,0xa8a8a8}} -- 上传中 p74上传中 = {{413,1671,0x161823},{3,1631,0x000000},{821,1785,0x000000}, {403,1671,0x161823},{396,1671,0xffffff},{375,1671,0x20d5ec},{375,1659,0x20d5ec},{413,1680,0x161823},{421,1679,0xffffff},{453,1683,0xfa2d6c},{453,1667,0xfa2d6c}, {17,17,0x000000},{77,221,0xffffff},{781,149,0xffffff},{744,950,0x333333},{84,1076,0x333333},{72,819,0xffffff},{65,756,0x000000}} -- 已上传 p75已上传 = {{413,1671,0x161823},{3,1631,0x000000},{821,1785,0x000000}, {403,1671,0x161823},{396,1671,0xffffff},{375,1671,0x20d5ec},{375,1659,0x20d5ec},{413,1680,0x161823},{421,1679,0xffffff},{453,1683,0xfa2d6c},{453,1667,0xfa2d6c}, {17,17,0x000000},{781,149,0xffffff},{767,1304,0xe5e5e5},{767,1170,0xfefaf5},{768,1054,0xfefaf5}, sim=80} -- 776,329,0x858585 p79换绑 = {{776,329,0x858585},{771,329,0xffffff},{771,324,0x858585},{771,335,0x858585},{767,339,0x858585},{767,320,0x858585},{766,323,0xffffff},{776,433,0x858585},{776,537,0x858585},{767,547,0x858585}, region={756,310,786,557}, sim=98} p79有字未成功 = {{776,329,0x858585}, region={500,310,733,360}, sim=98} -- 有感叹号 点一下手机号码 p79_2感叹号 = { -- 754,328,0xffffff {{754,328,0xffffff},{731,423,0xff4c3a},{731,430,0xffffff},{724,441,0xff4c3a},{742,436,0xff4c3a},{776,329,0x858585},{767,320,0x858585},{767,339,0x858585},{772,329,0xffffff},{776,433,0x858585}, region={714,310,786,451}, sim=98}, {{749,330,0xffffff},{731,423,0xff4c3a},{724,435,0xff4c3a},{732,433,0xffffff},{740,432,0xff4c3a},{735,444,0xff4c3a}, {776,329,0x858585},{771,329,0xffffff},{771,324,0x858585},{771,335,0x858585},{767,339,0x858585},{767,320,0x858585},{766,323,0xffffff},{776,433,0x858585},{776,537,0x858585},{767,547,0x858585}, region={714,310,786,557}, sim=98}, } --【增粉 Scheme】 pfollow关注 = { {{210,585,0xfe2c55},{161,567,0xfe2c55},{216,567,0xfe2c55},{275,567,0xfe2c55},{275,652,0xfe2c55},{206,652,0xfe2c55},{157,651,0xfe2c55},{149,649,0xfe2c55},{143,607,0xfe2c55},{147,572,0xfe2c55}, {214,655,0xffffff},{169,655,0xffffff},{146,651,0xffffff},{140,632,0xffffff},{140,588,0xffffff},{145,569,0xffffff},{161,564,0xffffff},{190,564,0xffffff},{234,564,0xffffff},{140,589,0xffffff},{359,583,0xfe2c55},{359,603,0xfe2c55},{359,634,0xfe2c55},{363,633,0xffffff},{363,609,0xffffff},{363,583,0xffffff}, sim=99, region={133, 527, 380, 680}}, } p个页加载中 = {{409,499,0x000000},{410,501,0x000000},{412,499,0x000000},{414,501,0x000000},{416,499,0x000000},{417,501,0x000000},{406,498,0xffffff},{406,501,0xffffff},{420,501,0xffffff},{420,498,0xffffff}, {413,496,0xffffff},{410,496,0xffffff},{416,496,0xffffff},{416,504,0xffffff},{413,504,0xffffff},{410,504,0xffffff},{322,506,0xe3e4e5},{323,506,0xffffff},{506,506,0xe3e4e5},{505,506,0xffffff}, region={312,480,516,520}, sim=98} p个页Bell = {{663,149,0x000000},{658,149,0xffffff},{661,145,0xffffff},{664,153,0xffffff},{668,149,0x000000},{678,149,0x000000},{678,153,0xffffff},{678,157,0x000000},{697,149,0x000000},{701,149,0xffffff}, sim=99, region={648, 135, 711, 167}} p弹窗Open = {{535,973,0x007aff},{535,966,0x007aff},{535,987,0x007aff},{528,970,0x007aff},{518,960,0x007aff},{511,977,0x007aff},{556,973,0x007aff},{567,979,0x007aff},{575,981,0x007aff},{328,959,0x007aff}, sim=99, region={318, 949, 585, 997}} -- 验证加载中 p验证加载中 = {{189,808,0x7f162a},{2,485,0x7f7f7f}, {258,768,0x7f162a},{258,765,0x7f7f7f},{762,802,0x7f162a},{765,802,0x7f7f7f},{533,853,0x7f162a},{533,856,0x7f7f7f},{65,810,0x7f162a},{62,810,0x7f7f7f}} -- 旋码 箭头 英语/马来 p旋码 = { {{175,1142,0xb3b5b7},{2,1142,0x7f7f7f},{826,1142,0x7f7f7f}, {193,1142,0xb3b5b7},{196,1142,0xffffff},{169,1123,0xb3b5b7},{169,1141,0xb3b5b7},{169,1161,0xb3b5b7},{152,1135,0xb3b5b7},{152,1132,0xffffff}, {703,551,0x999999},{704,550,0xadadad},{704,552,0x999999},{703,553,0xadadad},{702,551,0xadadad},{705,552,0xadadad},{705,553,0x999999},{702,550,0x999999}}, {{175,1167,0xb3b5b7},{2,2,0x7f7f7f}, {193,1167,0xb3b5b7},{196,1167,0xffffff},{169,1148,0xb3b5b7},{166,1148,0xffffff},{171,1147,0xffffff},{169,1186,0xb3b5b7},{166,1186,0xffffff},{171,1187,0xffffff},{148,1167,0xb3b5b7},{146,1167,0xffffff},{716,1167,0xf4f5f6},{718,1167,0xffffff},{703,525,0x999999},{414,774,0xffffff},{504,966,0xffffff},{323,966,0xffffff}} } z旋_A箭1 = {175,1167} z旋截屏1 = {222, 700, 608, 1083} z旋_路程full1 = 717-229 z旋_刷新1 = {173,1256} z旋_关闭1 = {703,525} -- 旋码 验证中 p旋码验证中 = {{112,1166,0xc2edd8},{2,2,0x7f7f7f}, {112,1134,0xc2edd8},{112,1200,0xc2edd8},{122,1210,0xc2edd8},{122,1163,0xc2edd8},{122,1125,0xc2edd8},{122,1122,0xffffff},{108,1166,0xffffff},{703,525,0x999999},{704,526,0x999999}} -- 旋码 叉叉 20241106 p旋码2 = { --20250513 {{685,639,0x000000},{685,637,0x797979},{683,639,0x797979},{678,632,0x000000},{676,630,0xffffff},{693,647,0x000000},{695,649,0xffffff},{194,1089,0x000000},{249,1076,0xebebeb},{689,1075,0xf8f8f8}, sim=95, region={184, 494, 705, 1100}}, --兼容旋码3 {{685,639,0x000000},{686,640,0x000000},{678,632,0x000000},{693,632,0x000000},{693,647,0x000000},{678,647,0x000000},{685,637,0x797979},{688,639,0x7a7a7a},{686,642,0x787878},{683,640,0x797979}, {205,1078,0x000000},{221,1054,0xebebeb},{272,1059,0xf8f8f8},{673,1059,0xf8f8f8},{575,998,0xffffff}, sim=95, region={195, 494, 695, 1088}}, } z旋_A箭2 = {190,1076} z旋截屏2 = {243, 683, 584, 1024} z旋截屏2_small = {310, 750, 517, 957} z旋_路程full2 = 701-254 z旋_刷新2 = {630,1151} z旋_关闭2 = {685,639} -- 旋码 叉叉 20250505 p旋码3 = { --旋码3 {{685,511,0x000000},{685,509,0x797979},{683,511,0x797979},{678,504,0x000000},{693,504,0x000000},{688,511,0x7a7a7a},{693,519,0x000000},{678,519,0x000000},{685,515,0xffffff},{205,950,0x000000},{223,930,0xebebeb},{290,934,0xf8f8f8},{659,937,0xf8f8f8},{599,885,0xffffff}, sim=95, region={195, 494, 703, 960}}, } z旋_A箭3 = {190,948} z旋截屏3 = {243, 555, 584, 896} z旋截屏3_small = {310, 622, 517, 829} z旋_路程full3 = 701-254 z旋_刷新3 = {630,1023} z旋_关闭3 = {685,511} --滑块 p滑块 = Demo z滑_A箭 = {150,749} z滑截屏 = {88,360, 620,680} z滑_刷新 = {590,824} z滑_关闭 = {646,294} p滑块main = Demo z滑m_A箭 = {150,850} --850-398 z滑m截屏 = {99,459, 650,802} --459-398 802-398 z滑m_刷新 = {118,926} --926-398 z滑m_关闭 = {638,398} -- -- 打码 点相同 正常 / 有数字键盘弹出 p相同码 = {{703,574,0x999999},{2,574,0x7f7f7f}, {704,573,0xadadad},{703,576,0xadadad},{700,574,0xffffff},{703,571,0xffffff}, {279,1204,0xfbacac},{85,1161,0xfbacac}, {85,1159,0xffffff},{85,1217,0xfbacac},{82,1217,0x7f7f7f},{417,1253,0xfbacac},{417,1256,0x7f7f7f},{742,1193,0xfbacac},{745,1193,0x7f7f7f}, {111,695,0xf4f3f1},{716,695,0xf5f4f2}} z同截屏1 = {113, 700, 713, 1070} z同_刷新1 = {191,1113} z同_关闭1 = {703,574} p点相同不完全1 = {{703,574,0x999999},{2,574,0x7f7f7f}, {704,573,0xadadad},{704,572,0xf8f8f8},{704,575,0x999999},{704,576,0xadadad},{703,577,0xf8f8f8},{268,1209,0xf85959},{84,1160,0xf85959},{84,1159,0xffffff},{83,1159,0x7f7f7f}} -- 打码 点相同2 20241107 叉+已加载+按钮灰 p相同码2 = { {{685,624,0x000000},{10,210,0x7f7f7f},{10,1100,0x7f7f7f},{818,578,0x7f7f7f}, {685,622,0x797979},{688,624,0x7a7a7a},{686,627,0x787878},{683,625,0x797979},{686,625,0x000000},{693,617,0x000000},{690,624,0xffffff},{693,632,0x000000},{678,617,0x000000}, {140,675,0xf4f3f1},{689,675,0xf6f5f3}, {135,1054,0xfeaabb},{264,1090,0xfeaabb},{556,1107,0xfeaabb},{693,1051,0xfeaabb},{124,1074,0xffffff}}, {{685,624,0x000000},{10,210,0x7f7f7f},{10,1100,0x7f7f7f},{818,578,0x7f7f7f}, {681,620,0x000000},{678,617,0x000000},{689,628,0x000000},{693,632,0x000000},{675,614,0xffffff}, {140,675,0xf4f3f1},{689,675,0xf6f5f3}, {135,1054,0xfeaabb},{264,1090,0xfeaabb},{556,1107,0xfeaabb},{693,1051,0xfeaabb},{124,1074,0xffffff}}, --3 20250210 {{679,569,0x000000},{678,571,0x000000},{693,571,0x000000},{693,555,0x000000},{678,556,0x000000},{682,563,0xffffff},{685,568,0xffffff},{142,993,0xfeaabb},{699,1025,0xfeaabb},{348,1067,0xfeaabb}, sim=95, region={132, 545, 709, 1077}}, } z同截屏2 = {130, 0+46, 700, 0+401} z同_刷新2 = {630,0+544} z同_关闭2 = {685,0} z同_确认2 = {408,0+456} p点相同不完全2 = { {{685,624,0x000000},{10,210,0x7f7f7f},{10,1100,0x7f7f7f},{818,578,0x7f7f7f}, {685,622,0x797979},{688,624,0x7a7a7a},{686,627,0x787878},{683,625,0x797979},{686,625,0x000000},{693,617,0x000000},{690,624,0xffffff},{693,632,0x000000},{678,617,0x000000}, {140,675,0xf4f3f1}, {135,1054,0xfe2c55},{264,1090,0xfe2c55},{556,1107,0xfe2c55},{693,1051,0xfe2c55},{124,1074,0xffffff}}, {{685,624,0x000000},{10,210,0x7f7f7f},{10,1100,0x7f7f7f},{818,578,0x7f7f7f}, {681,620,0x000000},{678,617,0x000000},{689,628,0x000000},{693,632,0x000000},{675,614,0xffffff}, {140,675,0xf4f3f1}, {135,1054,0xfe2c55},{264,1090,0xfe2c55},{556,1107,0xfe2c55},{693,1051,0xfe2c55},{124,1074,0xffffff}} } --2025-01-31 任务重登录 p91Skip同步 = {{209,1654,0x000000},{209,1641,0x000000},{209,1637,0xf2f2f2},{212,1648,0xf2f2f2},{214,1653,0x000000},{219,1661,0x000000},{209,1661,0x000000},{214,1661,0xf2f2f2},{436,1614,0xfe2c55},{781,1687,0xfe2c55}, sim=99, region={199, 1604, 791, 1697}} p92弹窗skip同步 = { -- {"Skip","Skip finding", "Find friends"}, -- {266,1058,0x595959},{270,1056,0x595959},{268,1053,0xffffff},{468,1045,0x000000},{524,1061,0x000000},{414,1007,0xc5c5c5},{412,1007,0xe0e0e0},{412,1009,0xffffff},{414,1009,0xe0e0e0}, {214,1653,0x000000},{220,1653,0x797979},{413,1650,0x7f7f7f},{452,1643,0x7f162a},{536,1673,0x7f162a}, sim=99, region={204, 997, 546, 1683} } p93Done = {{378,1650,0x000000},{378,1642,0x000000},{378,1638,0xf2f2f2},{378,1661,0x000000},{378,1664,0xf2f2f2},{383,1661,0x000000},{383,1657,0xf2f2f2},{400,1653,0x000000},{413,1654,0x000000},{438,1654,0x000000}, sim=99, region={368, 1628, 448, 1674}} p98_1_SkipFaceB = Demo p98_2_SkipFaceB = {242,826} p98_3_Xyfriends = Demo p99tk欢迎页 = { {{234,1640,0xfe2c55},{58,1597,0xfe2c55},{58,1594,0xffffff},{33,1646,0xfe2c55},{30,1646,0xffffff},{694,1690,0xfe2c55},{694,1693,0xffffff},{392,831,0x010101},{389,820,0x65d9d5},{290,813,0xfe5d7d}, sim=99, region={20, 803, 704, 1703}}, --99(2) {{181,1645,0xfe2c55},{33,1623,0xfe2c55},{30,1623,0xffffff},{207,1597,0xfe2c55},{631,1659,0xfe2c55},{794,1624,0xfe2c55},{797,1624,0xffffff},{447,939,0xfe5d7d},{351,787,0x65d9d5},{303,813,0xfe5d7d}, region={20,777,807,1669}, sim=98} } --p10main暗 (2)弹窗 p99语言Cancel = Demo p101弹窗Account_status_OK = { {"OK", "Account status"}, --{"OK", "logged out", "Account status"} --20250616 --{{425,1053,0x000000},{422,1055,0x000000},{429,1048,0x000000},{432,1045,0x000000},{423,1049,0xffffff},{426,1047,0xffffff},{429,1044,0xffffff},{428,1056,0x000000},{430,1060,0x000000},{433,1065,0x000000}, {430,1053,0xffffff},{432,1056,0xffffff},{434,1060,0xffffff},{437,1065,0xffffff},{419,1046,0x000000},{419,1051,0x000000},{419,1065,0x000000},{416,1065,0xffffff},{416,1056,0xffffff},{416,1046,0xffffff}, {164,1006,0xffffff},{164,1008,0xe0e0e0},{317,1008,0xe0e0e0},{510,1008,0xe0e0e0},{686,1008,0xe0e0e0},{686,1010,0xffffff}, region={154,940,696,1078}, sim=98}, --101英1~4 马 --{{425,1010,0x000000},{423,1007,0xffffff},{420,1002,0x000000},{432,1002,0x000000},{429,1010,0xffffff},{426,1010,0x000000},{433,1021,0x000000},{429,1022,0xffffff},{420,1022,0x000000}, {152,964,0xe0e0e0},{353,964,0xe0e0e0},{692,964,0xe0e0e0},{692,963,0xffffff}, sim=99, region={140, 940, 700, 1078}}, } p101账号status = { {"Account status", "logged out", "OK"} --101英4 --{{276,793,0x000000},{281,793,0x000000},{279,799,0xffffff},{273,803,0x000000},{268,817,0x000000},{279,809,0x000000},{279,814,0xffffff},{290,817,0x000000},{421,794,0x000000},{546,815,0x000000}, sim=99, region={258, 733, 556, 850}}, --101英 --{{275,793,0x000000},{282,793,0x000000},{278,800,0xffffff},{274,800,0x000000},{284,800,0x000000},{287,809,0x000000},{278,809,0x000000},{270,809,0x000000},{268,817,0x000000},{275,817,0xffffff}, {557,801,0x000000},{557,805,0xffffff},{558,813,0x000000},{551,818,0x000000},{545,815,0x000000},{544,811,0xffffff},{551,813,0xffffff},{545,803,0x000000},{551,803,0xffffff}, {421,794,0x000000},{425,796,0xffffff},{425,800,0x000000},{425,804,0xffffff},{420,804,0x000000},{351,817,0x000000},{351,800,0x000000}, sim=99, region={260,780,600,850}}, --101马 --{{313,800,0x000000},{310,798,0xffffff},{306,795,0x000000},{298,792,0x000000},{289,798,0x000000},{296,798,0xffffff},{307,811,0x000000},{288,813,0x000000},{288,809,0xffffff},{323,817,0x000000},{327,817,0xffffff},{344,813,0x000000},{359,794,0x000000},{378,817,0x000000},{401,808,0x000000},{435,812,0xffffff},{440,808,0x000000},{445,808,0xffffff},{463,800,0x000000}, {215,867,0x5a5a5a},{210,882,0x595959},{222,875,0x595959},{313,880,0x595959},{350,873,0x5a5a5a},{366,880,0x595959},{362,880,0xffffff},{425,880,0x595959},{518,886,0x595959},{599,880,0x595959}, sim=95, region={188,756,631,931}}, } p102足迹save= { -- 102英(3) {{771,675,0x000000},{771,672,0x9e9e9e},{768,675,0x9f9f9f},{782,686,0x000000},{761,665,0x000000},{759,663,0xf1f1f2},{632,674,0xf1f1f2},{629,676,0x161823},{624,684,0xffffff},{645,750,0x161823}, {649,752,0xf1f1f2},{640,747,0xffffff},{558,785,0x161823},{561,782,0xffffff},{554,788,0xffffff},{577,724,0x000000},{569,734,0x000000},{572,729,0xffffff},{590,713,0x000000},{598,733,0x000000}, sim=95, region={544, 656, 788, 798}}, --102英 {{771,675,0x000000},{771,672,0x9e9e9e},{768,676,0x9e9e9e},{761,665,0x000000},{650,724,0x161823},{650,734,0xf1f1f2},{649,712,0xf1f1f2},{645,699,0x161823},{622,686,0xffffff},{630,677,0x161823}, {232,1666,0xfe2c55},{643,1625,0xfe2c55},{100,1625,0xfe2c55},{66,1682,0xfe2c55},{61,1680,0xffffff},{205,1622,0xffffff},{633,1622,0xffffff},{765,1673,0xffffff}, sim=95, region={51, 655, 781, 1692}}, --102英(2) {{771,675,0x000000},{771,672,0x9e9e9e},{768,676,0x9e9e9e},{761,665,0x000000},{650,724,0x161823},{650,734,0xf1f1f2},{649,712,0xf1f1f2},{645,699,0x161823},{622,686,0xffffff},{630,677,0x161823}, {246,1666,0xfe2c55},{91,1625,0xfe2c55},{89,1622,0xffffff},{65,1679,0xfe2c55},{62,1678,0xffffff},{657,1718,0xfe2c55},{657,1721,0xffffff},{762,1658,0xfe2c55},{765,1658,0xffffff},{365,1770,0x000000}, sim=95, region={52, 655, 781, 1780}}, } p102足迹save点 = { -- 红 Save --{{284,1666,0xfe2c55},{100,1625,0xfe2c55},{100,1621,0xffffff},{663,1718,0xfe2c55},{663,1722,0xffffff},{762,1658,0xfe2c55},{765,1658,0xffffff},{65,1672,0xfe2c55},{62,1672,0xffffff},{472,1671,0xfe2c55}, region={52,1611,775,1732}, sim=98}, --ocr {"Save", "Viewer history turned on"}, {"Confirm", "Viewer history"}, } p103叉掉菜单 = { -- 103英 {{783,1021,0x000000},{783,1018,0xa7a7a7},{780,1021,0xa8a8a8},{773,1011,0x000000},{771,1009,0xffffff},{393,1108,0x65d9d5},{393,1160,0x65d9d5},{492,1176,0xfe5d7d},{335,1192,0xfe5d7d},{418,1130,0x000000}, sim=95, region={325, 900, 793, 1250}}, -- 103马 {{783,916,0x000000},{783,913,0xa7a7a7},{787,920,0x000000},{787,916,0xa8a8a8},{784,920,0xa8a8a8},{780,917,0xa7a7a7},{780,913,0x000000},{492,1076,0xfe5d7d},{374,1021,0x65d9d5},{248,1646,0xfe2c55}, region={238, 903, 797, 1656}}, } p103弹窗cancel={ {"Cancel", "Continue", "Log in to TikTok"} } p103弹窗Close={ {"Close", "Settings", "Sign in with your Apple ID"} } p104弹窗弃号= { --104马 {{375,1661,0x236b74},{408,1667,0x7c7c7c},{413,1670,0x1f2024},{454,1678,0x7a2841}, {430,1149,0x595959},{430,1152,0xffffff},{430,1155,0x595959},{411,1175,0x595959},{411,1166,0x595959},{411,1155,0x595959},{411,1152,0xffffff},{349,1157,0x595959},{347,1153,0xffffff},{344,1150,0x595959}, {168,919,0xffffff},{168,920,0xe0e0e0},{506,1015,0xffffff},{506,1016,0xe0e0e0},{681,1111,0xffffff},{681,1112,0xe0e0e0},{255,1054,0x000000},{404,983,0x010101},{510,869,0x010101}, sim=99, region={160, 800, 700, 1700}}, } p105弹窗Dont={ --105英2 {{270,1156,0x0a61ff},{264,1155,0xebebeb},{261,1151,0x0a61ff},{202,1172,0x0a61ff},{198,1172,0x0a61ff},{198,1165,0x0a61ff},{198,1157,0x0a61ff},{198,1151,0x0a61ff},{414,1120,0xb1b0b3},{414,1200,0xb1b0b3}, sim=99, region={188, 1100, 424, 1210}}, --105英 {{270,1163,0x0a61ff},{198,1178,0x0a61ff},{198,1158,0x0a61ff},{202,1161,0xebebeb},{344,1178,0x0a61ff},{350,1164,0x0a61ff},{446,1168,0x0a61ff},{455,1157,0x0a61ff},{475,1181,0xebebeb},{472,1184,0x0a61ff}, sim=99, region={188, 1147, 485, 1194}}, --(2) {{270,1156,0x0a61ff},{198,1151,0x0a61ff},{198,1160,0x0a61ff},{198,1171,0x0a61ff},{301,1152,0xebebeb},{307,1150,0x0a61ff},{307,1158,0x0a61ff},{307,1171,0x0a61ff},{307,1175,0xebebeb},{472,1177,0x0a61ff}, {635,1159,0x0a61ff},{635,1166,0x0a61ff},{635,1174,0x0a61ff},{629,1178,0x0a61ff},{629,1174,0xebebeb},{622,1163,0x0a61ff},{653,1168,0x0a61ff},{574,1156,0x0a61ff},{503,1163,0x0a61ff},{507,1163,0xebebeb}, region={188, 1100, 663, 1210}, sim=99}, } p106叉掉菜单= { --106英 {{771,1150,0x000000},{772,1151,0x000000},{771,1147,0xa7a7a7},{775,1150,0xa8a8a8},{772,1154,0xa8a8a8},{768,1151,0xa7a7a7},{66,1558,0xfe2c55},{153,1518,0xfe2c55},{757,1605,0xfe2c55},{760,1608,0xffffff}, sim=99, region={56, 1137, 785, 1618}}, } p107叉掉菜单 = { --107 {{729,360,0x000000},{729,356,0xffffff},{721,352,0x000000},{721,356,0xffffff},{721,369,0x000000},{725,369,0xffffff},{738,369,0x000000},{734,361,0xffffff},{735,366,0x000000},{732,367,0xffffff}, {91,356,0x858585},{91,359,0xffffff},{92,362,0x858585},{92,369,0xffffff},{92,372,0x858585},{84,360,0xffffff},{80,360,0x858585},{103,360,0x858585},{92,349,0x858585},{569,393,0x000000}, region={70, 330, 748, 600}, sim=99} } p110登录另一个 = { --110英2 {{386,818,0x000000},{386,825,0x000000},{382,821,0xf2f2f2},{390,821,0xf2f2f2},{383,815,0xf2f2f2},{72,775,0xf2f2f2},{65,771,0xffffff},{754,867,0xf2f2f2},{762,874,0xffffff}, {727,494,0x474747},{723,494,0xffffff},{719,494,0x474747},{715,494,0xffffff},{712,494,0x474747},{708,494,0xffffff},{704,494,0x474747},{475,228,0x000000},{475,232,0xffffff},{475,235,0x000000}, region = {63,210,768,888}}, --110英 {{397,821,0x000000},{5,5,0x7f7f7f},{622,1695,0xfe2c55},{769,167,0x161823}, {397,812,0x000000},{397,809,0xf2f2f2},{397,832,0x000000},{397,835,0xf2f2f2},{337,665,0xe3e4e5},{381,665,0xffffff},{420,665,0x707070}, {337,229,0x000000},{337,232,0xffffff},{338,234,0x000000},{305,267,0x000000},{126,340,0x858585},{132,340,0xffffff},{135,340,0x858585},{248,346,0x858585},{622,373,0x858585}, {769,164,0xc1c2c5},{770,171,0xc1c1c4},{55,176,0x707070},{47,156,0xffffff},{42,152,0x707070}, sim=99}, --110马 110马2 {{225,818,0xf2f2f2},{91,771,0xf2f2f2},{287,872,0xf2f2f2},{657,818,0xf2f2f2},{61,816,0xffffff},{61,665,0xffffff},{68,665,0xe3e3e4},{183,665,0xe3e3e4},{324,665,0xe3e3e4},{331,665,0xffffff}, {498,665,0xffffff},{504,665,0xe3e3e4},{760,665,0xe3e3e4},{766,665,0xffffff},{727,494,0x474747},{723,494,0xffffff},{719,494,0x474747},{715,494,0xffffff},{712,494,0x474747},{708,494,0xffffff}, sim=99, region={50, 474, 800, 900}}, } p111用账号登录 = { -- 111 绿 {{595,465,0x10a2c5},{601,465,0x10a2c5},{599,458,0xffffff},{613,465,0x10a2c5},{618,465,0x10a2c5},{703,454,0xffffff},{628,465,0x10a2c5},{633,465,0x10a2c5},{653,465,0x10a2c5},{679,465,0x10a2c5}, sim=99, region={575, 400, 777, 600}}, } p112切换去账号栏 = { --112英 {{624,225,0x707070},{5,5,0xffffff}, {624,262,0xffffff},{624,263,0xd0d1d3},{211,225,0x000000},{211,259,0xffffff},{211,260,0x161823},{211,262,0x161823},{211,263,0x161823},{211,264,0xffffff},{1,263,0xd0d1d3}, {771,143,0x707070},{771,144,0xf8f8f8},{771,147,0x707070},{39,139,0x161823},{41,139,0xa7a8ac},{53,123,0x161823},{437,129,0x000000},{437,132,0xffffff},{437,135,0x000000}, sim=99}, --112英2 {{624,226,0x707070},{624,262,0xffffff},{624,263,0xd0d1d3},{217,226,0x000000},{217,259,0xffffff},{217,260,0x161823},{217,262,0x161823},{217,263,0x161823},{217,264,0xffffff},{2,263,0xd0d1d3}, sim=99, region={0, 216, 634, 274}}, --112英3 {{624,225,0x707070},{624,262,0xffffff},{624,263,0xd0d1d3},{213,259,0xffffff},{213,260,0x161823},{213,262,0x161823},{213,263,0x161823},{2,263,0xd0d1d3},{771,148,0x707070},{37,139,0x161823}, sim=99, region={0, 129, 781, 274}}, --112(4)英 {{572,238,0xffffff},{572,262,0xffffff},{572,263,0xd3d3d3},{572,264,0xffffff},{411,263,0xd3d3d3},{408,263,0x000000},{408,261,0x000000},{411,261,0xffffff},{408,258,0xffffff},{408,265,0xffffff}, region={398,228,582,275}, sim=98}, --112马 {{595,225,0x707070},{5,5,0xffffff},{595,262,0xffffff},{595,263,0xd0d1d3},{155,225,0x000000},{155,258,0xffffff},{155,261,0x161823},{155,263,0x161823},{155,264,0xffffff},{1,263,0xd0d1d3}, {771,147,0x707070},{771,144,0xf8f8f8},{771,143,0x707070},{330,129,0x000000},{330,150,0x000000},{342,150,0x000000},{37,139,0x161823},{41,139,0xa7a8ac},{53,123,0x161823}}, } p113已在账号栏 = { --113英 {{492,261,0x161823},{415,263,0x161823},{412,263,0xd0d1d3},{412,261,0xffffff},{171,263,0xd0d1d3},{171,261,0xffffff},{369,139,0x000000},{412,157,0x000000},{414,152,0xffffff},{771,141,0x707070}, sim=99, region={161, 129, 781, 273}}, --113(4) {{506,261,0x000000},{506,258,0xffffff},{506,263,0x000000},{506,264,0xffffff},{278,263,0xd3d3d3},{278,262,0xffffff},{278,264,0xffffff},{825,263,0xd3d3d3},{369,140,0x000000}, region={268,130,827,274}, sim=95}, --113马 {{595,225,0x000000},{595,259,0xffffff},{595,260,0x161823},{595,262,0x161823},{595,263,0x161823},{595,264,0xffffff},{826,263,0xd0d1d3},{144,263,0xd0d1d3},{1,263,0xd0d1d3}, {771,147,0x707070},{771,144,0xf8f8f8},{771,143,0x707070},{330,129,0x000000},{330,150,0x000000},{342,150,0x000000},{37,139,0x161823},{41,139,0xa7a8ac},{53,123,0x161823}}, } p113b账号栏加载异常 = Demo p113未输入账号 = { --113(4) {{278,370,0x7e7e7e},{278,367,0x7e7e7e},{278,373,0x7e7e7e},{278,387,0xf2f2f2},{278,351,0xf2f2f2}, region={133,318,333,444}, sim=98}, --113英 {{341,369,0x7e7e7e},{344,370,0x7e7e7e},{344,367,0xf2f2f2},{343,363,0x7e7e7e},{344,372,0xf2f2f2},{341,374,0x7e7e7e},{338,370,0xf2f2f2}, sim=99}, --113英2 {{301,405,0xadadad},{301,404,0xadadad},{301,450,0xffffff},{301,451,0x000000},{263,623,0xf1f1f2}, sim=99, region={253, 394, 311, 633}}, --113马 {{418,373,0x7e7e7e},{421,373,0xf2f2f2},{418,370,0x7e7e7e},{415,375,0x7e7e7e},{415,372,0xf2f2f2}, sim=99}, } p113粘贴 = Demo p114账号已输入x = Demo p114账号已输入 = { {{250,1115,0xfe2c55},{88,1071,0xfe2c55},{735,1071,0xfe2c55}, sim=99, region={78, 560, 745, 1125}}, {{395,1091,0xfe2c55},{710,358,0xc1c1c1}, {751,1153,0xfe2c55},{699,1071,0xfe2c55},{65,1108,0xfe2c55},{63,1108,0xffffff}}, } p114_2账号不存在 = { -- 三角 --{{73,452,0xda3123},{78,442,0xda3123},{88,459,0xda3123},{564,321,0xff4c3a},{564,327,0xf2f2f2},{564,407,0xf2f2f2},{564,414,0xff4c3a}, sim=99, region={63, 311, 574, 469}}, -- 字母A {{114,512,0xda3123},{114,510,0xffffff},{114,517,0xffffff},{112,516,0xda3123},{111,520,0xda3123},{109,524,0xda3123},{108,528,0xda3123},{108,531,0xffffff},{105,528,0xffffff},{107,524,0xffffff}, {109,516,0xffffff},{108,520,0xffffff},{117,516,0xda3123},{120,516,0xffffff},{118,520,0xda3123},{121,520,0xffffff},{119,524,0xda3123},{122,524,0xffffff},{121,528,0xda3123},{124,528,0xffffff}, region={100,436,128,541}, sim=98} } p114_2红字异常 = { --字 {{83,450,0xda3123},{83,451,0xda3123},{83,452,0xda3123}, region={66,400,500,600}, sim=98}, --线 {{150,451,0xff4c3a},{151,451,0xff4c3a},{152,451,0xff4c3a},{452,451,0xff4c3a}, region={66,400,500,600}, sim=98}, --密码红线 {{86,369,0x7c342d},{124,369,0x7c342d},{192,369,0x7c342d},{244,369,0x7c342d}, region={76,350,254,513}, sim=98} } p114_3弹窗Safety = {{423,931,0xe8e8e8},{421,935,0xe8e8e8},{420,932,0xe8e8e8},{417,937,0x222222},{417,931,0x222222},{417,922,0x222222},{464,922,0x222222},{464,932,0x222222},{464,939,0x222222},{467,937,0xe8e8e8}, sim=99, region={407, 912, 477, 949}} p114_4红字Maxattempts = {{79,492,0xff4c3a},{79,493,0xff4c3a},{79,494,0xff4c3a},{79,495,0xff4c3a},{79,451,0x000000}, sim=99, region={69, 441, 626, 505}} p114_5Timeout = Demo p115密码未输入 = { {{588,411,0xf2f2f2},{688,410,0x7e7e7e},{690,418,0xf2f2f2},{691,422,0x7e7e7e},{693,417,0x7e7e7e},{701,419,0x7e7e7e},{702,424,0x7e7e7e},{705,422,0xf2f2f2},{712,421,0x7e7e7e},{716,410,0x7e7e7e}, {625,1007,0xfeaabb},{142,1092,0xfeaabb},{65,1043,0xfeaabb},{762,1057,0xfeaabb}}, --115英2 {{514,428,0xf2f2f2},{688,422,0x7e7e7e},{690,430,0xf2f2f2},{691,434,0x7e7e7e},{695,433,0xf2f2f2},{701,431,0x7e7e7e},{702,436,0x7e7e7e},{715,422,0x7e7e7e},{672,1029,0xfeaabb},{124,1059,0xfeaabb}, sim=99, region={114, 412, 725, 1069}}, --115英3 {{514,428,0xf2f2f2},{688,422,0x7e7e7e},{690,430,0xf2f2f2},{691,434,0x7e7e7e},{695,433,0xf2f2f2},{701,431,0x7e7e7e},{702,436,0x7e7e7e},{715,422,0x7e7e7e},{257,958,0xfeaabb},{681,997,0xfeaabb},{84,920,0xfeaabb}, sim=99, region={74, 412, 725, 1069}}, --115英3c {{224,414,0x6a6a6a},{688,410,0x7e7e7e},{690,418,0xf2f2f2},{691,422,0x7e7e7e},{699,421,0xf2f2f2},{699,419,0x7e7e7e},{701,424,0x7e7e7e},{715,410,0x7e7e7e},{253,955,0xfeaabb},{713,418,0xf2f2f2}, sim=99, region={214, 400, 725, 965}}, --115英4 {{192,445,0x707070},{699,438,0xadadad},{702,449,0xffffff},{703,453,0xadadad},{705,447,0xadadad},{712,453,0xffffff},{716,456,0xadadad},{714,449,0xadadad},{733,438,0xadadad},{526,656,0xf1f1f2}, sim=99, region={182, 428, 743, 666}}, } p116密码已输入 = { {{233,1049,0xfe2c55},{688,410,0x7e7e7e},{690,418,0xf2f2f2},{691,422,0x7e7e7e},{693,417,0x7e7e7e},{701,419,0x7e7e7e},{702,424,0x7e7e7e},{705,422,0xf2f2f2},{712,421,0x7e7e7e},{716,410,0x7e7e7e}, {625,1007,0xfe2c55},{142,1092,0xfe2c55},{65,1043,0xfe2c55},{762,1057,0xfe2c55}}, --116英2 {{245,1045,0xfe2c55},{514,428,0xf2f2f2},{688,422,0x7e7e7e},{690,430,0xf2f2f2},{691,434,0x7e7e7e},{695,433,0xf2f2f2},{701,431,0x7e7e7e},{702,436,0x7e7e7e},{715,422,0x7e7e7e},{672,1029,0xfe2c55},{124,1059,0xfe2c55}, sim=99, region={114, 412, 725, 1069}}, --116英3 {{276,957,0xfe2c55},{649,946,0xfe2c55},{627,428,0x7e7e7e},{641,427,0xf2f2f2},{652,438,0x7e7e7e},{688,422,0x7e7e7e},{690,430,0xf2f2f2},{691,434,0x7e7e7e},{701,436,0x7e7e7e},{715,422,0x7e7e7e}, sim=99, region={266, 412, 725, 967}}, --116英4 {{243,640,0xfe2c55},{673,616,0xfe2c55},{648,431,0xafb0b4},{699,431,0xadadad},{716,449,0xadadad},{732,431,0xadadad},{712,446,0xffffff},{673,485,0xffffff},{673,486,0x8a8b90}, sim=99, region={233, 421, 742, 650}}, } p116密码已输入1 = { -- {{641,411,0x7e7e7e},{625,416,0x7e7e7e},{658,416,0x7e7e7e},{641,432,0x7e7e7e},{641,399,0x7e7e7e},{641,415,0xf2f2f2},{688,410,0x7e7e7e},{690,418,0xf2f2f2},{691,422,0x7e7e7e},{715,410,0x7e7e7e}, sim=99, region={615, 389, 725, 460}}, --116英4 {{647,434,0xafb0b4},{647,438,0xffffff},{647,443,0xafb0b4},{635,439,0xafb0b4},{646,426,0xafb0b4},{660,438,0xafb0b4},{648,451,0xafb0b4},{648,485,0xffffff},{648,486,0x8a8b90},{733,431,0xadadad}, sim=99, region={630, 410, 738, 500}}, } p116密码已输入2 = {{280,1049,0xfe2c55},{88,1008,0xfe2c55},{724,1007,0xfe2c55}, sim=99, region={78, 590, 734, 1059}} p116_2账号不存在 = { {{114,512,0xda3123},{114,510,0xffffff},{114,517,0xffffff},{112,516,0xda3123},{111,520,0xda3123},{109,524,0xda3123},{108,528,0xda3123},{108,531,0xffffff},{105,528,0xffffff},{107,524,0xffffff}, {109,516,0xffffff},{108,520,0xffffff},{117,516,0xda3123},{120,516,0xffffff},{118,520,0xda3123},{121,520,0xffffff},{119,524,0xda3123},{122,524,0xffffff},{121,528,0xda3123},{124,528,0xffffff}, region={100,436,128,541}, sim=98} } p116_3Timeout = { {{113,498,0xda3123},{108,498,0xda3123},{118,498,0xda3123},{121,498,0xffffff},{124,498,0xda3123},{127,498,0xffffff},{124,500,0xffffff},{124,495,0xffffff},{118,496,0xffffff},{118,501,0xffffff}, {113,501,0xda3123},{113,496,0xffffff},{108,496,0xffffff},{108,501,0xffffff},{105,498,0xffffff},{113,506,0xda3123},{117,506,0xffffff},{124,506,0xda3123},{127,506,0xffffff},{124,514,0xda3123}, {127,514,0xffffff},{121,514,0xffffff},{117,514,0xffffff},{113,514,0xda3123},{110,514,0xffffff}, region={95,485,137,540}, sim=98} } p117帐密同登 = {{64,451,0x000000},{63,451,0xffffff},{64,450,0xffffff},{762,451,0x000000},{762,452,0xffffff},{64,571,0x000000},{63,571,0xffffff},{64,570,0xffffff},{762,571,0x000000},{762,570,0xffffff}, sim=99, region={53, 440, 772, 581}} --p117未输入账号 = {{295,406,0xadadad},{295,450,0xffffff},{295,451,0x000000}, sim=99, region={285, 396, 305, 461}} p117未输入账号 = {{295,402,0xadadad},{295,405,0xadadad},{295,411,0xadadad},{295,416,0xffffff},{295,397,0xffffff},{298,405,0xffffff},{301,405,0xadadad},{295,447,0xffffff},{295,451,0x000000}, sim=99, region={278, 386, 414, 461}} p118密码未输入 = {{192,522,0xadadad},{192,528,0xadadad},{224,571,0x000000}, sim=99, region={182, 512, 234, 581}} p119帐密已输入 = {{284,803,0xfe2c55},{86,760,0xfe2c55},{714,760,0xfe2c55}, sim=99, region={76, 733, 724, 888}} p120登录报错 = { {{113,505,0xda3123},{113,507,0xda3123}, sim=99, region={60, 455, 300, 1000}}, } p125Request封禁 = { {{400,399,0x020203},{403,399,0xdfdfe0},{403,397,0xf5f5f5},{400,397,0x000000},{400,394,0xf5f5f5},{497,361,0x6b6b6b},{174,366,0x000000},{178,1657,0xfe2c55},{41,1633,0xfe2c55},{38,1633,0xf5f5f5}, sim=99, region={28, 351, 507, 1667}}, --125(2) {{400,397,0x000000},{403,397,0xf5f5f5},{403,399,0xdfdfe0},{400,399,0x020203},{400,394,0xf5f5f5},{403,401,0xf5f5f5},{41,267,0x000000},{54,253,0x000000},{79,1622,0xfe2c55},{761,1688,0xfe2c55}, sim=99, region={31, 243, 771, 1698}}, --125(3) {{400,397,0x000000},{403,397,0xf5f5f5},{403,399,0xdfdfe0},{400,399,0x020203},{400,394,0xf5f5f5},{403,401,0xf5f5f5},{41,267,0x000000},{54,253,0x000000},{66,1660,0xf8a4b5},{747,1666,0xf8a4b5}, sim=99, region={31, 243, 771, 1698}}, } p123点赞白 = { --123 {{766,1021,0xf0f0f0},{766,1047,0xf0f0f0},{776,1041,0xf0f0f0},{757,1041,0xf0f0f0},{747,1030,0xf0f0f0},{758,1030,0xf0f0f0},{787,1030,0xf0f0f0},{792,1022,0xf0f0f0},{781,1022,0xf0f0f0},{762,1022,0xf0f0f0}, {741,1022,0xf0f0f0},{740,1013,0xf0f0f0},{759,1013,0xf0f0f0},{787,1013,0xf0f0f0},{793,1013,0xf0f0f0},{778,999,0xf0f0f0},{754,999,0xf0f0f0},{766,1004,0xf0f0f0}, sim=90, region={738, 900, 795, 1060}} } p124Notnow_savelogin = { -- {"Not now","Save login"}, {{234,1118,0x474747},{234,1114,0x474747},{234,1110,0xffffff},{234,1129,0x474747},{237,1132,0x474747},{241,1132,0xffffff},{237,1135,0xffffff},{389,1073,0xf1f1f2},{461,1073,0xf1f1f2},{414,1109,0xdfdfe1}, {512,1119,0x000000},{519,1116,0xffffff},{522,1114,0x000000},{617,1138,0x000000},{617,1134,0xffffff},{613,1129,0x000000},{648,1123,0x000000}, sim=99, region={224, 1063, 658, 1148}}, --(2) {{234,1118,0x474747},{234,1114,0x474747},{234,1110,0xffffff},{234,1124,0x474747},{235,1131,0x474747},{237,1132,0x474747},{237,1128,0xffffff},{237,1134,0xffffff},{268,1073,0xf1f1f2},{414,1117,0xdfdfe1}, {586,1112,0x000000},{586,1109,0xffffff},{586,1120,0x000000},{586,1125,0x000000},{586,1131,0x000000},{586,1134,0xffffff},{612,1136,0x000000},{617,1138,0x000000},{623,1133,0x000000},{631,1112,0x000000}, sim=99, region={224, 1063, 641, 1148}}, --(3) {{234,1103,0x474747},{234,1099,0x474747},{234,1096,0xffffff},{234,1108,0x474747},{234,1114,0x474747},{237,1117,0x474747},{237,1119,0xffffff},{237,1114,0xffffff},{414,1081,0xdfdfe1},{414,1132,0xdfdfe1}, {586,1097,0x000000},{586,1094,0xffffff},{586,1116,0x000000},{586,1119,0xffffff},{617,1123,0x000000},{617,1119,0xffffff},{614,1115,0x000000},{623,1111,0x000000},{623,1103,0x000000},{623,1100,0xffffff}, sim=99, region={224, 1071, 633, 1142}}, } p126弹窗banned = { {{362,1126,0x595959},{362,1135,0x595959},{362,1144,0x595959},{362,1148,0xffffff},{362,1121,0xffffff},{434,1131,0x595959},{434,1127,0xffffff},{434,1124,0x595959},{266,1030,0x000000},{369,934,0x000000}, {138,895,0xe0e0e0},{138,896,0xffffff},{691,991,0xe0e0e0},{691,992,0xffffff},{359,1087,0xe0e0e0},{359,1088,0xffffff},{287,670,0x000000},{296,670,0xffffff},{305,670,0x000000},{296,682,0x000000}, region={128,660,701,1158}, sim=98}, --ocr {"Dismiss", "Your account","banned"}, -- {"Request another review", "banned"}, } p127弹窗Agree = Demo --tk shop select p130personalSelect = Demo --Verify it's really you p136Verify = {"Verify it's really you"} p136Verify_radio = Demo p137Verify_Next = Demo p138Verify_Code6 = Demo p139Verify2_Code未 = Demo p139Verify2_Code未2 = Demo p139Verify2_选Auth = Demo p139Verify2_Useanother_Email = Demo p139Verify2_选Email = Demo p139Verify2_Useanother_Auth = Demo p139Email = Demo p139Auth = Demo z左返 = {42,83} p140Verify2_Code已 = Demo p140Verify2_Code已_continue = Demo p160已Inbox = { {{564,1670,0x161823},{576,1670,0x161823},{596,1670,0x161823},{588,1679,0xffffff},{579,1679,0x161823},{569,1679,0xffffff},{376,1651,0x20d5ec},{451,1690,0xfa2d6c},{409,1666,0x161823},{414,1670,0xffffff}, sim=99, region={366, 1641, 606, 1700}} } p160消息蓝 = {{806,885,0x00add2},{809,883,0x00add2},{806,880,0x00add2},{806,874,0xf8f8f8},{809,877,0xf8f8f8},{812,883,0xf8f8f8}, find_all = true, sim=70, region={806, 600, 812, 1532}} --0f94d6 p161sent成功 = {{798,838,0x6d6d6d},{798,835,0x6d6d6d},{798,831,0xf8f8f8},{798,843,0x6d6d6d},{798,847,0x6d6d6d},{798,848,0x6d6d6d},{799,849,0x6d6d6d},{799,852,0xf8f8f8}, sim=98, region={797, 600, 800, 1532}} p162Notsent失败 = { -- Not sent {{798,907,0xff4c3a},{798,904,0xff4c3a},{798,900,0xf8f8f8},{798,911,0xff4c3a},{798,915,0xff4c3a},{799,917,0xff4c3a},{799,921,0xf8f8f8}, sim=98, region={798, 600, 800, 1515}}, -- !红 {{683,858,0xff4c3a},{683,862,0xff4c3a},{683,867,0xff4c3a},{683,854,0xf8f8f8},{683,850,0xff4c3a},{688,862,0xf8f8f8}, sim=98, region={188, 840, 734, 877}}, -- This message .... --{{137,970,0x6d6d6d},{137,974,0x6d6d6d},{137,982,0x6d6d6d},{137,984,0x6d6d6d},{137,987,0xf8f8f8},{137,967,0xf8f8f8},{799,921,0xf8f8f8},{680,974,0x6d6d6d},{680,980,0x6d6d6d},{690,985,0x6d6d6d}, sim=98, region={127, 600, 809, 1515}}, {{673,1433,0x2b5db9},{670,1424,0x2b5db9},{670,1438,0x2b5db9},{673,1438,0xf8f8f8},{677,1438,0x2b5db9},{683,1430,0x2b5db9},{683,1438,0x2b5db9},{691,1438,0x2b5db9},{691,1431,0x2b5db9},{687,1431,0xf8f8f8}, {137,1352,0x6d6d6d},{137,1359,0x6d6d6d},{137,1366,0x6d6d6d},{137,1369,0xf8f8f8},{137,1349,0xf8f8f8},{656,1475,0x6d6d6d},{656,1466,0x6d6d6d},{656,1461,0xf8f8f8},{216,1440,0x6d6d6d},{680,1356,0x6d6d6d}, sim=95, region={127, 600, 700, 1515}}, --2025-04-29 {{673,1439,0x2b5db9},{673,1435,0xf8f8f8},{670,1430,0x2b5db9},{670,1426,0xf8f8f8},{670,1436,0x2b5db9},{670,1444,0x2b5db9},{670,1447,0xf8f8f8},{625,1434,0x2b5db9},{610,1438,0x2b5db9},{560,1439,0x6d6d6d}, sim=95, region={550, 600, 683, 1515}}, } p166Done大红按钮 = { {{232,1652,0xfe2c55},{98,1613,0xfe2c55},{98,1610,0xffffff},{65,1665,0xfe2c55},{62,1665,0xffffff},{485,1698,0xfe2c55},{485,1701,0xffffff},{762,1645,0xfe2c55},{765,1645,0xffffff},{354,1770,0x000000}, sim=98, region={52, 1600, 775, 1780}} } p167叉掉Marksafe = {{755,1307,0x707070},{755,1304,0xcecece},{752,1307,0xcecece},{745,1297,0x707070},{210,1558,0xff4c3a},{598,1563,0x000000},{664,1562,0x000000},{660,1562,0xffffff},{210,1575,0xff4c3a}, sim=98, region={200, 1287, 765, 1585}} p168_StickersGotit = {{276,1646,0xfe2c55},{119,1605,0xfe2c55},{119,1602,0xffffff},{65,1639,0xfe2c55},{62,1639,0xffffff},{392,1653,0xffffff},{387,1656,0xfe2c55},{387,1661,0xffffff},{387,1770,0x000000},{439,1641,0xffffff}, {771,736,0x000000},{771,733,0xa7a7a7},{768,736,0xa8a8a8},{761,726,0x000000},{759,724,0xffffff},{384,1261,0x000000},{384,1265,0xffffff},{384,1269,0x000000}, sim=98, region={52, 714, 781, 1780}} p169_Followyfrs = {{729,371,0x000000},{721,363,0x000000},{738,363,0x000000},{738,380,0x000000},{721,380,0x000000},{725,372,0xffffff},{729,367,0xffffff},{734,371,0xffffff},{730,376,0xffffff}, {91,367,0x858585},{92,369,0xffffff},{92,372,0x858585},{92,374,0x858585},{91,376,0x858585},{91,379,0xffffff},{91,383,0x858585},{91,364,0xffffff},{91,360,0x858585},{103,371,0x858585}, sim=98, region={81, 350, 748, 493}} emoji = {"😃","😄","😁","😆","😅","😍","😇","😊","😉","🙂","😘","😗","😚","😙","😋","😝","🤑","🤗","🤠","🤓","😳","💀","🤡","👹","👺","👽","👾","🤖","😺","😹","😻","😽"} --注册成功后 换绑 p30_01右上三 = {{773,139,0x000000},{759,139,0x000000},{783,139,0x000000},{783,136,0xffffff},{764,136,0xffffff},{760,143,0xffffff},{777,143,0xffffff},{764,151,0x000000},{781,151,0x000000},{772,127,0x000000}, region={749,117,793,161}, sim=98} z三 = {770,139} p30_02Settings = { {"© Settings and privacy", "TikTok Stidio", "Balance"}, --"© Settings and privacy" {"Settings and privacy", "TikTok Stidio", "Balance", ocr=2}, --"© Settings and privacy" {{132,1635,0x000000},{138,1635,0xffffff},{144,1635,0x000000},{150,1640,0xffffff},{154,1640,0x000000},{387,1645,0x000000},{393,1630,0x000000},{389,1630,0xffffff},{394,1627,0xffffff},{166,1582,0xe0e0e0}, region={122,1500,404,1700}, sim=98}, {{111,1640,0x000000},{128,1638,0xffffff},{132,1629,0x000000},{194,1635,0x000000},{194,1646,0x000000},{191,1653,0x000000},{184,1653,0x000000},{184,1584,0xe0e0e0},{32,1584,0xe0e0e0},{30,1584,0xffffff}, region={20,1574,204,1663}, sim=98}, } p30_03Account = {{115,453,0x000000},{111,450,0xffffff},{113,442,0x000000},{119,461,0x000000},{119,464,0xffffff},{103,461,0x000000},{110,454,0x000000},{65,456,0xa8a8a8},{65,452,0xffffff},{65,447,0xa8a8a8}, region={55,432,129,474}, sim=98} p30_04inform = { {"Account Information", "Password"}, {{216,280,0x000000},{216,275,0x000000},{213,275,0x000000},{218,269,0x000000},{220,272,0xffffff},{212,279,0xffffff},{315,269,0x000000},{315,272,0xffffff},{316,276,0x000000},{776,279,0x858585}, region={202,259,786,290}, sim=98}, } p30_05info_Email = {"Email", "Account region"} p30_06Addemail = {"Add email", "Learn more"} p30_06填email = {{248,442,0x7e7e7e},{249,442,0x7e7e7e},{248,399,0xf2f2f2},{248,481,0xf2f2f2}, region={238,389,291,491}, sim=98} p30_06Continue = {{283,1111,0xfe2c55},{96,1075,0xfe2c55},{709,1147,0xfe2c55},{600,1107,0xfe2c55},{650,1063,0xffffff},{281,1064,0xffffff},{491,1064,0xffffff}, region={86,900,719,1157}, sim=98} p30_07Verifyemail = {"Verify email", "Use the link"} p30_08Nothanks = {"No thanks", "Get updates"} p30_09Phonenumber = {"Phone number", "Account region"} p30_10Unlink = { {"Unlink phone number", "Change phone number"}, {"Unlink phone", "Change phone"} } p30_11Remove = {"Remove", "Remove phone?"} p30_12Unlink成功 = {"Phone number unlinked"} end if w==750 and h==1334 then -- 7/8 --弹窗Agree and Continue p01_AgreeandContinue = { {{243,817,0x000000},{238,813,0xffffff},{232,817,0x000000},{254,829,0x000000},{258,826,0xffffff},{264,819,0x000000},{378,803,0x000000},{378,799,0xffffff},{378,823,0x000000},{518,815,0x000000}, {159,766,0xe0e0e0},{490,766,0xe0e0e0},{490,765,0xffffff},{382,562,0x000000},{403,572,0x000000},{431,580,0x000000},{468,654,0x000000},{397,630,0x000000},{285,630,0x000000},{149,536,0x474747}, region={139, 526, 550, 850}, sim=99}, --01(2) {{265,836,0x000000},{265,826,0x000000},{265,823,0xffffff},{258,836,0xffffff},{254,838,0x000000},{251,841,0xffffff},{253,845,0x000000},{258,847,0x000000},{264,844,0x000000},{236,821,0x000000}, {461,819,0x000000},{461,823,0xffffff},{462,826,0x000000},{462,840,0x000000},{462,843,0xffffff},{141,783,0xe0e0e0},{373,783,0xe0e0e0},{586,783,0xe0e0e0},{518,832,0x000000},{230,840,0x000000}, region={131,773,596,857}, sim=98} } --欢迎页 p01_AgreeandContinue_A = { {{285,739,0xfe5d7d},{271,729,0xffffff},{259,718,0x65d9d5},{286,711,0x65d9d5},{264,764,0x65d9d5},{310,753,0xffffff},{317,760,0x000000},{391,755,0x000000},{387,745,0x65d9d5},{562,866,0xfe5d7d}, region={249, 701, 572, 1000}, sim=99} } p01_AgreeandContinue_B = { {{222,1635,0xfe2c55},{58,1597,0xfe2c55},{58,1594,0xffffff},{33,1669,0xfe2c55},{30,1669,0xffffff},{557,1690,0xfe2c55},{557,1693,0xffffff},{794,1627,0xfe2c55},{797,1627,0xffffff},{661,1651,0xfe2c55}, region={222, 789, 528, 839}, sim=99} } p02_兴趣悬浮字 = { --(2) {{644,1250,0x332225},{670,1225,0x332225},{693,1275,0x332225},{733,1247,0x333333},{98,247,0xffffff},{105,247,0xffffff},{112,247,0xffffff},{105,255,0xffffff},{105,268,0xffffff},{34,252,0x333333}, region={24, 237, 743, 1285}, sim=99}, --(1) {{451,1249,0x332225},{13,251,0x333333},{730,259,0x333333},{98,247,0xffffff},{158,323,0xffffff},{363,348,0xffffff},{636,343,0xffffff},{591,284,0xffffff},{408,259,0xffffff},{224,297,0xffffff}, region={3, 237, 740, 1259}, sim=99} } p02_兴趣 = { --{{151,486,0xe0e0e0},{151,485,0xffffff},{151,487,0xe0e0e0},{151,488,0xffffff},{151,572,0xe0e0e0},{151,571,0xffffff},{151,598,0xe0e0e0},{151,597,0xffffff},{151,684,0xe0e0e0},{151,683,0xffffff}, region={141, 450, 161, 1000}, sim=99}, {{121,598,0xe0e0e0},{121,596,0xffffff},{121,601,0xffffff},{121,684,0xe0e0e0},{121,682,0xffffff},{121,687,0xffffff},{121,710,0xe0e0e0},{121,708,0xffffff},{121,713,0xffffff},{121,796,0xe0e0e0}, region={100,450,200,1000}, sim=98}, --(2) {{139,482,0xdadada},{138,481,0xf9f9f9},{138,577,0xdadada},{138,576,0xffffff},{137,610,0xdadada},{137,609,0xf8f8f8},{137,705,0xdadada},{137,704,0xffffff}, region={135, 450, 161, 1000}, sim=99}, --(3) {{512,488,0x000000},{512,438,0xffffff},{512,437,0xf5f5f5},{512,605,0xffffff},{512,606,0xf5f5f5},{512,621,0xf5f5f5},{512,622,0xffffff},{512,789,0xffffff},{512,790,0xf5f5f5}, region={415, 400, 435, 1000}, sim=99}, } p02_兴趣未 = { --SKIP (1) (2) {{468,1250,0xfeaabb},{415,1207,0xfeaabb},{415,1204,0xffffff},{384,1237,0xfeaabb},{381,1237,0xffffff},{514,1300,0xfeaabb},{355,1250,0xf2f2f2},{208,1212,0xf2f2f2},{140,1297,0xf2f2f2},{297,1249,0xf2f2f2}, region={130, 1194, 524, 1310}, sim=99}, } --Skip 未选 p02_Skip未选 = { --SKIP (1) (2) {{297,1249,0xf2f2f2},{468,1250,0xfeaabb},{415,1207,0xfeaabb},{415,1204,0xffffff},{384,1237,0xfeaabb},{381,1237,0xffffff},{514,1300,0xfeaabb},{355,1250,0xf2f2f2},{208,1212,0xf2f2f2},{140,1297,0xf2f2f2}, region={130, 1194, 524, 1310}, sim=99}, --(3) {{291,1252,0xe8e8e8},{354,1216,0xe8e8e8},{375,1223,0xf5f5f5},{375,1265,0xf5f5f5},{347,1298,0xe8e8e8},{393,1292,0xf8a4b5},{393,1216,0xf8a4b5},{502,1224,0xf8a4b5}, region={281, 1206, 512, 1308}, sim=99}, } --兴趣未 大按钮 p04兴趣未 = { {{180,1254,0xfeaabb},{81,1206,0xfeabbb},{33,1265,0xfeaabb},{681,1300,0xfeaabb},{716,1246,0xfeaabb},{719,1247,0xffffff}, region={23, 1196, 729, 1310}, sim=99}, } --兴趣已 p05兴趣已 = { {{180,1254,0xfe2c55},{81,1206,0xfe2c55},{33,1265,0xfe2c55},{681,1300,0xfe2c55},{716,1246,0xfe2c55},{719,1247,0xffffff}, region={23, 1196, 729, 1310}, sim=99}, --(2) {{614,1247,0xfe2c55},{451,1207,0xfe2c55},{526,1300,0xfe2c55},{684,1249,0xfe2c55},{687,1249,0xffffff},{376,1250,0xffffff},{354,1245,0xf2f2f2},{232,1215,0xf2f2f2},{162,1294,0xf2f2f2},{78,1250,0xf2f2f2}, region={68, 1197, 697, 1310}, sim=99}, } --兴趣已 skip p06兴趣已 = { {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99} } -- startwatching p03_startwatching = { {{187,1255,0xfe2c55},{98,1207,0xfe2c55},{65,1253,0xfe2c55},{62,1253,0xffffff},{659,1300,0xfe2c55},{247,1124,0x000000},{487,1123,0x000000},{572,873,0x000000},{177,521,0x000000},{520,409,0x000000}, region={52, 399, 669, 1310}, sim=99} } p03_Swipe_startwatching = { {{314,769,0xbababa},{314,694,0xbababa},{317,600,0xbababa},{332,515,0xbababa},{369,610,0xbababa},{362,636,0xe4e4e4},{390,655,0xe4e4e4},{361,681,0xe4e4e4},{371,777,0xbababa},{370,800,0xe4e4e4}, region={304, 505, 400, 810}, sim=99} } -- 主页有弹窗 p10main暗 = { {{335,1281,0x106a75},{336,1270,0x106a75},{353,1266,0x7f7f7f},{373,1281,0x0b0c11},{403,1293,0x7f7f7f},{414,1282,0x7c1636},{413,1264,0x7c1636},{402,1265,0x7f7f7f}, region={325, 1254, 424, 1303}, sim=98}, --上滑 小白点 {{338,1301,0x16555d},{374,1281,0x717174},{368,1275,0xa1a1a1},{411,1302,0x621a30}, region={328,1265,421,1312}, sim=98}, --弹窗 {{335,1281,0x236b74},{336,1270,0x236b74},{353,1266,0x7c7c7c},{373,1281,0x1f2024},{403,1293,0x7c7c7c},{414,1282,0x7a2841},{413,1264,0x7a2841},{402,1265,0x7c7c7c}, region={325, 1254, 424, 1303}, sim=88, klog("视频主页 弹窗?")}, --弹窗 小白点 {{335,1295,0x24565d},{374,1281,0x797a7c},{411,1301,0x602739}, region={325,1271,421,1311}, sim=98}, --弹窗 + 上滑 极暗 {{337,1300,0x08353b},{368,1275,0x404040},{374,1281,0x050609},{412,1300,0x3e0b1b}, region={327,1265,422,1310}, sim=98} } -- 弹窗背景 p10弹窗背景 = {{5,357,0x7c7c7c},{5,481,0x7c7c7c},{5,565,0x7c7c7c},{744,341,0x7c7c7c},{744,438,0x7c7c7c},{744,527,0x7c7c7c}, region={0,200,749,1300}, sim=96} -- swipeup p10swipeup = { {"Swipe up for more"}, {"swipe up for more"}, {"Swipe üp for more"}, {"Swipe.Mp. far more"}, {"SwipesMp. for more"}, {"For You", "Swipe", "for more", "Profile"}, {"Swipe up", "Videos are personalized for you"}, --{{130,855,0xffffff},{142,884,0xffffff},{228,896,0xffffff},{349,895,0xffffff},{407,847,0xffffff},{620,869,0xffffff},{514,631,0xffffff},{507,866,0xffffff},{215,846,0xffffff},{489,864,0xffffff}, region={120, 621, 630, 906}, sim=99}, --(1) S 反色 --{{155,852,0xfefefe},{147,846,0xfefefe},{137,846,0xfefefe},{129,855,0xfefefe},{137,865,0xfefefe},{135,869,0xfefefe, -10},{125,858,0xfefefe, -10},{133,843,0xfefefe, -10},{151,843,0xfefefe, -10},{159,851,0xfefefe, -10}, {135,855,0xfefefe},{148,864,0xfefefe},{157,874,0xfefefe},{150,884,0xfefefe},{135,884,0xfefefe},{132,888,0xfefefe, -10},{154,887,0xfefefe, -10},{161,875,0xfefefe, -10},{151,860,0xfefefe, -10},{140,855,0xfefefe, -10}, region={115,810,171,918}, sim=98}, --(2) S 反色 --{{196,866,0xfefefe},{191,862,0xfefefe},{184,862,0xfefefe},{179,868,0xfefefe},{186,876,0xfefefe},{196,881,0xfefefe},{196,889,0xfefefe},{186,893,0xfefefe},{178,886,0xfefefe}, {186,868,0xfefefe, -10},{191,871,0xfefefe, -10},{200,875,0xfefefe, -10},{203,886,0xfefefe, -10},{191,884,0xfefefe, -10},{182,880,0xfefefe, -10},{173,869,0xfefefe, -10},{173,890,0xfefefe, -10},{181,897,0xfefefe, -10},{197,896,0xfefefe, -10}, region={163,840,213,920}, sim=98}, --(2)b S 反色 极暗 --{{196,866,0x7f7f7f},{191,862,0x7f7f7f},{184,862,0x7f7f7f},{179,868,0x7f7f7f},{186,876,0x7f7f7f},{196,881,0x7f7f7f},{196,889,0x7f7f7f},{186,893,0x7f7f7f},{178,886,0x7f7f7f}, {186,868,0x7f7f7f, -20},{191,871,0x7f7f7f, -20},{200,875,0x7f7f7f, -20},{203,886,0x7f7f7f, -20},{191,884,0x7f7f7f, -20},{182,880,0x7f7f7f, -20},{173,869,0x7f7f7f, -20},{173,890,0x7f7f7f, -20},{181,897,0x7f7f7f, -20},{197,896,0x7f7f7f, -20}, {572,881,0x7f7f7f},{478,872,0x7f7f7f},{396,871,0x7f7f7f},{295,881,0x7f7f7f}, region={163,840,582,920}, sim=98}, --(2) --{{196,866,0xffffff},{187,862,0xffffff},{178,869,0xffffff},{187,893,0xffffff},{256,902,0xffffff},{353,902,0xffffff},{304,881,0xffffff},{402,862,0xffffff},{571,881,0xffffff},{518,893,0xffffff}, region={168, 852, 581, 912}, sim=95}, --10(3) --{{153,852,0xffffff},{143,846,0xffffff},{131,854,0xffffff},{143,864,0xffffff},{154,876,0xffffff},{143,884,0xffffff},{129,875,0xffffff},{229,896,0xffffff},{229,884,0xffffff},{229,857,0xffffff}, {144,874,0xffffff,-20},{131,868,0xffffff,-20},{129,843,0xffffff,-20},{142,854,0xffffff,-20},{147,858,0xffffff,-20},{156,861,0xffffff,-20},{230,901,0xffffff,-20},{229,852,0xffffff,-20},{223,863,0xffffff,-20},{223,881,0xffffff,-20}, region={119,833,240,911}, sim=98} } -- 十 视频主页 p10main十 = { {{335,1267,0x20d5ec},{335,1277,0x20d5ec},{335,1293,0x20d5ec},{341,1291,0xffffff},{369,1286,0xffffff},{366,1281,0x161823},{374,1281,0x161823},{374,1271,0x161823},{414,1270,0xfa2d6c},{414,1287,0xfa2d6c}, region={325, 1257, 424, 1303}, sim=99}, --10(2) 小白点 {{338,1301,0x219faf},{374,1281,0x76767b},{368,1275,0xd7d7d7},{411,1302,0xb92a56}, region={328,1265,421,1312}, sim=98} } zProfile = {673,1280} zHome = {75,1280} -- 弹窗 个人 Accept/Terima p弹窗Accept_Terima = { {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99} } p弹窗Gotit = {{410,1073,0x000000},{410,1064,0x000000},{409,1061,0xf2f2f2},{410,1081,0x000000},{413,1083,0x000000},{414,1080,0xf2f2f2},{414,1086,0xf2f2f2},{416,1083,0xf2f2f2},{381,1071,0x000000},{381,1064,0x000000}, {380,1061,0xf2f2f2},{381,1081,0x000000},{385,1083,0x000000},{388,1083,0xf2f2f2},{344,1063,0x000000},{351,1066,0x000000},{351,1070,0xf2f2f2},{353,1074,0x000000},{346,1074,0x000000},{350,1081,0x000000}, {96,1024,0xffffff},{96,1025,0xd5d5d5},{96,1026,0xf2f2f2},{653,1024,0xffffff},{653,1025,0xd5d5d5},{653,1026,0xf2f2f2},{194,1067,0xf2f2f2},{532,1071,0xf2f2f2},{332,1025,0xd5d5d5}, region={86,1000,663,1100}, sim=98} p弹窗Gotit蓝 = {{381,787,0x007aff},{381,783,0x007aff},{382,801,0x007aff},{415,802,0x007aff},{412,787,0x007aff},{401,787,0x007aff},{344,781,0x007aff},{344,802,0x007aff},{353,793,0x007aff},{168,588,0x000000}, region={158,578,425,812}, sim=98} p弹窗Update_Accept = {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99} p弹窗弃号 = {{374,1671,0x236b74},{397,1671,0x7c7c7c},{403,1671,0x1f2024},{423,1671,0x1f2024},{446,1671,0x7c7c7c},{453,1671,0x7a2841},{627,1094,0xfe2c55},{205,1128,0xfe2c55},{264,1241,0x000000},{579,1216,0x000000}, {222,1217,0x000000},{226,1221,0xffffff},{550,1222,0x000000},{551,1241,0x000000},{562,1233,0x000000},{558,1230,0xffffff},{389,1088,0x474747}, sim=99, region={195, 1060, 637, 1681}} p弹窗选language = {{177,776,0xe3e4e5},{229,776,0xe3e4e5},{229,777,0xffffff},{229,869,0xe3e4e5},{274,869,0xe3e4e5},{274,870,0xffffff},{274,961,0xe3e4e5},{320,961,0xe3e4e5},{320,962,0xffffff},{320,1053,0xe3e4e5}, sim=99, region={167, 766, 330, 1063}} -- Don't have Signup 20 20b 20(1)b p20Signup = { {{529,1258,0xfe2c55},{529,1262,0xfe2c55},{528,1269,0xfe2c55},{523,1273,0xfe2c55},{518,1272,0xfe2c55},{522,1270,0xf8f8f8},{579,1273,0xfe2c55},{159,1249,0x818181},{158,1257,0x818181},{159,1267,0x818181}, region={148, 1239, 589, 1283}, sim=99} } p20Signup_r = { --ocr {"Don't have an account?", "Sign up", "Log in to TikTok"}, } p20Signup_clk = { {{568,1650,0xfe2c55},{568,1649,0xfe2c55},{568,1648,0xfe2c55}, region={525,1620,640,1680}, sim=98} } --in Login Signup p20inLogin = { --20(1)(2)(3) {{511,1254,0xfe2c55},{511,1251,0xf8f8f8},{511,1248,0xfe2c55},{507,1248,0xf8f8f8},{503,1251,0xfe2c55},{499,1248,0xfe2c55},{494,1249,0xfe2c55},{492,1253,0xfe2c55},{497,1257,0xfe2c55},{523,1273,0xfe2c55}, region={482,1238,536,1283}, sim=98} } -- Log in Use phone p20Usephone = { --(1) (2) {{112,490,0x161823},{112,482,0xffffff},{111,473,0x161823},{103,481,0x161823},{111,494,0xffffff},{111,498,0x000000},{98,507,0x000000},{125,507,0x000000},{117,446,0xcbccce},{64,488,0xcbccce}, region={54, 370, 135, 517}, sim=99}, --(3) {{96,332,0x161823},{96,336,0xffffff},{96,340,0x000000},{96,344,0xffffff},{108,346,0x000000},{83,346,0x000000},{88,323,0x161823},{91,323,0xffffff},{95,316,0x161823},{94,288,0xcbccce}, region={73,278,118,500}, sim=98} } --in Signup Log in p21inSignup = { --21(1)(2)(3) {{532,1260,0xfe2c55},{535,1260,0xf8f8f8},{538,1253,0xfe2c55},{538,1267,0xfe2c55},{544,1260,0xfe2c55},{547,1260,0xf8f8f8},{551,1272,0xfe2c55},{556,1273,0xfe2c55},{562,1269,0xfe2c55},{577,1248,0xfe2c55}, {517,1249,0xfe2c55},{517,1254,0xfe2c55},{517,1262,0xfe2c55},{517,1267,0xfe2c55},{521,1267,0xfe2c55},{526,1267,0xfe2c55},{521,1264,0xf8f8f8},{517,1270,0xf8f8f8},{517,1245,0xf8f8f8},{530,1267,0xf8f8f8}, region={507,1200,592,1283}, sim=98} } -- Google p21Google = {{127,771,0x5070a8},{126,761,0xffffff},{121,756,0xd53e36},{109,754,0xd53e36},{99,762,0xd53e36},{96,766,0xefb529},{96,773,0xefb529},{100,779,0x2f9e4f},{118,785,0x2f9e4f},{124,780,0x5070a8}} -- google.com Continue 21 21b 21c p21GGcontinue = {{547,1024,0x007aff},{3,3,0x656565},{825,1789,0xc4c4c4}, {614,1031,0x007aff},{495,1018,0x007aff},{483,1029,0x007aff},{496,1039,0x007aff},{414,1023,0xa3a1a3},{328,1017,0x007aff},{328,1028,0x007aff},{328,1039,0x007aff},{230,1027,0x007aff},{239,1017,0x007aff},{242,1039,0x007aff}} --Use phone or email p21Usephone = {{112,546,0x161823},{2,546,0xffffff},{826,546,0xffffff}, {112,550,0xffffff},{112,553,0x000000},{120,556,0x000000},{119,538,0x161823},{111,530,0x161823},{104,538,0x161823},{102,557,0x000000},{65,563,0xcbccce},{434,502,0xcbccce}} --Use phone 在Sign up p21_2Usephone = {{239,490,0x83848a},{238,490,0xf2f2f2},{240,490,0xf2f2f2},{239,482,0x83848a},{239,479,0xf2f2f2},{239,499,0x83848a},{239,502,0xf2f2f2},{769,167,0x161823},{769,164,0xc1c2c5},{42,153,0x707070}} --已在Phone p22Phone栏目 = { --22 {{215,260,0x161823},{215,259,0xffffff},{215,263,0x161823},{215,264,0xffffff},{111,263,0x161823},{300,263,0x161823},{10,263,0xd0d1d3},{10,262,0xffffff},{531,263,0xd0d1d3},{804,263,0xd0d1d3}, sim=95, region={0, 250, 814, 272}}, --22(5) {{408,261,0x000000},{411,261,0xffffff},{411,263,0xd3d3d3},{408,263,0x000000},{408,258,0xffffff},{408,265,0xffffff},{211,262,0x000000},{10,263,0xd3d3d3},{10,261,0xffffff},{818,263,0xd3d3d3}, sim=95, region={0, 248, 827, 275}}, } zPhone = {223,225} --已在Email p22Email栏目 = { -- {{602,260,0x161823}, {602,259,0xffffff},{602,263,0x161823},{602,264,0xffffff},{484,263,0x161823},{723,263,0x161823},{820,263,0xd0d1d3},{820,262,0xffffff},{35,263,0xd0d1d3},{279,263,0xd0d1d3}, sim=95, region={270, 248, 827, 275}}, --(5) {{602,260,0x000000}, {602,259,0xffffff},{602,263,0x000000},{602,264,0xffffff},{484,263,0x000000},{723,263,0x000000},{820,263,0xd0d1d3},{820,262,0xffffff},{35,263,0xd0d1d3},{279,263,0xd0d1d3}, sim=95, region={270, 248, 827, 275}}, } zEmail = {610,225} -- 小三角箭头 22 22_2 p22箭头 = { --(5) {{207,368,0x363636},{207,371,0x363636},{203,366,0x363636},{211,366,0x363636},{209,369,0x363636},{205,369,0x363636},{203,371,0xf2f2f2},{211,371,0xf2f2f2},{207,374,0xf2f2f2},{207,363,0xf2f2f2}, sim=96, region={193, 353, 300, 420}}, --(6) 20250505 {{241,404,0x363636},{241,407,0x363636},{241,410,0xffffff},{241,402,0x363636},{241,399,0xffffff},{237,402,0x363636},{245,402,0x363636},{243,404,0x363636},{246,406,0xffffff},{236,406,0xffffff}, sim=96, region={193, 353, 300, 420}}, --{{210,404,0x363636},{33,20,0xffffff}, {206,402,0x363636},{214,402,0x363636},{210,405,0x363636},{210,398,0xffffff},{210,411,0xffffff}}, --{{215,491,0x363636},{211,489,0x363636},{219,489,0x363636},{215,494,0x363636},{215,497,0xf2f2f2},{215,486,0xf2f2f2},{223,489,0xf2f2f2},{207,489,0xf2f2f2},{239,489,0x83848a},{239,498,0x83848a},{732,473,0xf2f2f2},{769,166,0x161823},{769,164,0xc1c2c5},{42,153,0x707070}}, --20241114 (3) --{{234,368,0x363636},{234,371,0x363636},{230,366,0x363636},{238,366,0x363636},{236,369,0x363636},{232,369,0x363636},{230,371,0xffffff},{238,371,0xffffff},{234,363,0xffffff},{258,368,0x8a8b90}}, --20241115 (4) --{{244,368,0x363636},{240,366,0x363636},{248,366,0x363636},{244,371,0x363636},{244,375,0xf2f2f2},{244,362,0xf2f2f2},{239,370,0xf2f2f2},{249,370,0xf2f2f2},{268,367,0x83848a},{267,367,0xf2f2f2}} } --国家页 p23国家_英 = { {{55,159,0x161823}, {247,149,0x000000},{241,155,0x000000},{254,164,0x000000},{247,170,0x000000},{240,167,0x000000}, {56,160,0x161823},{56,156,0xb0b1b4},{55,163,0xb0b1b4},{52,159,0xb0b1b4},{59,160,0xb0b1b4},{813,612,0x707070},{809,1298,0x707070}, sim=95, region={42, 139, 827, 1308}}, } z字母C = {812,673} p23国家_马 = { {{55,159,0x161823},{1,1,0xffffff},{261,149,0x000000},{261,158,0x000000},{261,167,0x000000},{263,170,0x000000},{263,173,0xffffff}, {56,160,0x161823},{56,156,0xb0b1b4},{55,163,0xb0b1b4},{52,159,0xb0b1b4},{59,160,0xb0b1b4},{813,612,0x707070},{809,1298,0x707070}}, --23马b {{55,159,0x161823},{6,6,0xffffff},{823,1772,0xffffff}, {261,149,0x000000},{261,156,0x000000},{261,162,0x000000},{261,170,0x000000},{261,173,0xffffff},{261,146,0xffffff},{275,154,0x000000},{279,151,0xffffff},{283,147,0x000000},{283,152,0xffffff},{283,155,0x000000},{283,162,0x000000},{283,170,0x000000},{283,173,0xffffff}, {55,156,0xb0b1b4},{59,159,0xb0b1b4},{56,163,0xb0b1b4},{52,160,0xb0b1b4},{44,148,0x161823},{55,154,0xffffff},{67,148,0x161823}} } -- 字母K p23马点K = {{811,968,0x707070},{5,180,0xffffff},{5,1780,0xffffff}, {811,963,0xffffff},{808,962,0x707070},{816,962,0x707070},{808,960,0xffffff},{809,946,0x707070},{812,948,0x707070},{816,944,0x707070},{816,935,0x707070},{813,922,0xffffff}, {813,919,0x707070},{813,913,0x707070},{813,906,0x707070},{813,903,0xffffff},{816,808,0x707070},{809,800,0x707070},{816,794,0x707070},{812,683,0x707070}} --23(3) p23国家_3 = {{808,745,0x707070},{2,339,0xffffff},{2,1379,0xffffff}, {807,744,0x707070},{812,738,0x707070},{817,740,0x707070},{818,744,0xffffff},{817,750,0x707070},{812,752,0x707070},{812,745,0xffffff},{812,683,0x707070},{817,1369,0x707070}, {808,1312,0x707070},{813,1312,0xffffff},{817,1312,0x707070},{815,1145,0x707070},{808,970,0x707070},{808,716,0x707070},{811,714,0xffffff},{812,1302,0x707070}} z字母C3 = {812,744} z字母K3 = {812,968} -- 选UK p24选UK = { --ocr {"United Kingdom", "Select country"}, } -- 选Canada p24选Canada = { {{759,509,0x707070},{9,110,0xffffff},{760,503,0x707070},{760,499,0xffffff},{760,516,0x707070},{760,519,0xffffff},{767,509,0x707070},{769,509,0xffffff},{753,510,0x707070},{750,510,0xffffff},{778,498,0x707070},{40,498,0x000000},{33,508,0x000000},{43,517,0x000000},{114,498,0x000000},{114,495,0xffffff},{114,517,0x000000},{114,520,0xffffff}}, --24马k {{759,405,0x707070},{11,111,0xffffff},{11,1708,0xffffff}, {760,399,0x707070},{760,396,0xffffff},{757,402,0xffffff},{753,405,0x707070},{750,405,0xffffff},{760,412,0x707070},{760,415,0xffffff},{778,394,0x707070},{778,413,0x707070}, {128,406,0x000000},{112,394,0x000000},{112,391,0xffffff},{112,403,0x000000},{112,413,0x000000},{112,416,0xffffff},{105,400,0x000000},{61,406,0x000000},{65,406,0xffffff},{68,406,0x000000}, {660,451,0xe3e4e5},{128,451,0xe3e4e5},{383,356,0xe3e4e5}} } -- UK +44 p25UK_44 = { --ocr {"UK", "Phone","Email","Send code"} } -- CA +1 p25CA_1 = { -- 25(5) 250503 {{207,368,0x363636},{202,366,0x363636},{199,366,0xf2f2f2},{207,371,0x363636},{207,374,0xf2f2f2},{175,358,0x000000},{175,367,0x000000},{175,376,0x000000},{106,357,0x000000},{98,367,0x000000}, sim=99, region={88, 347, 217, 386}}, -- 25(6) 250505 --{176,451,0x8a8b90}, {{196,404,0x363636},{192,402,0x363636},{200,402,0x363636},{196,407,0x363636},{166,394,0x000000},{166,400,0x000000},{166,405,0x000000},{166,412,0x000000},{126,412,0x000000},{123,406,0x000000}, {118,393,0x000000},{115,401,0x000000},{113,407,0x000000},{111,412,0x000000},{100,413,0x000000},{93,410,0x000000},{91,404,0x000000},{92,397,0x000000},{104,395,0x000000}, sim=99, region={81, 383, 210, 461}}, --{{123,405,0x000000},{20,60,0xffffff}, {64,451,0xffffff},{168,402,0x363636},{176,402,0x363636},{172,407,0x363636},{81,396,0x000000},{67,403,0x000000},{81,409,0x000000},{102,412,0x000000},{141,394,0x000000},{142,412,0x000000}}, --(3) + CA 1 箭头 --{{147,369,0x000000},{148,364,0x000000},{148,360,0xffffff},{148,375,0x000000},{148,378,0xffffff},{153,369,0x000000},{156,369,0xffffff},{142,369,0x000000},{140,369,0xffffff}, {90,367,0x000000},{97,357,0x000000},{105,360,0x000000},{106,364,0xffffff},{105,373,0x000000},{99,377,0x000000},{111,376,0x000000},{113,370,0x000000},{123,370,0x000000},{118,357,0x000000}, {165,358,0x000000},{166,365,0x000000},{166,376,0x000000},{196,368,0x363636},{196,371,0x363636},{192,366,0x363636},{200,366,0x363636},{196,375,0xffffff}}, --(4) + CA 1 箭头 20241115 --{{157,369,0x000000},{155,367,0xf2f2f2},{157,364,0x000000},{157,361,0xf2f2f2},{157,375,0x000000},{157,378,0xf2f2f2},{152,369,0x000000},{149,369,0xf2f2f2},{162,369,0x000000},{166,369,0xf2f2f2}, {113,360,0x000000},{104,357,0x000000},{98,367,0x000000},{105,377,0x000000},{113,373,0x000000},{114,369,0xf2f2f2},{122,370,0x000000},{126,357,0x000000},{132,370,0x000000},{134,376,0x000000}, {170,361,0x000000},{175,358,0x000000},{175,366,0x000000},{175,376,0x000000},{207,369,0x363636},{203,366,0x363636},{211,366,0x363636}}, } -- CA +1 25_2 p25_2CA_1 = {{215,493,0x363636},{211,489,0x363636},{219,489,0x363636},{215,489,0x363636},{215,497,0xf2f2f2},{153,492,0x000000},{151,490,0xf2f2f2},{166,484,0x000000},{169,481,0x000000},{171,481,0x000000},{171,490,0x000000},{171,499,0x000000},{171,502,0xf2f2f2},{171,477,0xf2f2f2},{83,490,0x000000},{93,480,0x000000},{106,493,0x000000},{239,490,0x83848a},{239,498,0x83848a},{238,490,0xf2f2f2}} -- 未输phone number p25未phone = { --25(5) {{417,367,0x7e7e7e},{417,357,0x7e7e7e},{417,353,0xf2f2f2},{417,377,0x7e7e7e},{417,380,0xf2f2f2},{436,370,0x7e7e7e},{433,370,0xf2f2f2},{430,370,0x7e7e7e}, sim=99, region={407, 343, 446, 390}}, --25(6) 20250505 {{472,402,0xadadad},{472,393,0xadadad},{472,390,0xffffff},{472,412,0xadadad},{472,415,0xffffff},{472,451,0x8a8b90},{483,405,0xadadad},{486,405,0xffffff},{489,405,0xadadad},{489,408,0xadadad}, sim=99, region={450, 360, 505, 461}}, --{{339,770,0xf1f1f2},{285,743,0xf1f1f2},{285,829,0xf1f1f2},{65,785,0xf1f1f2},{762,783,0xf1f1f2},{676,799,0xf1f1f2},{556,766,0xf1f1f2},{190,786,0xf1f1f2},{1,785,0xffffff},{826,783,0xffffff}, sim=99}, --(4) 20241115 --{{271,1118,0xfeaabb},{151,1071,0xfeaabb},{65,1118,0xfeaabb},{440,1156,0xfeaabb},{762,1102,0xfeaabb},{765,1102,0xffffff},{667,1068,0xffffff},{62,1125,0xffffff},{479,1159,0xffffff}, sim=99} } -- 未输phone number 25_2 p25_2未phone = {{430,490,0xbcbcbe},{429,481,0xbcbcbe},{429,477,0xf2f2f2},{429,501,0xbcbcbe},{429,504,0xf2f2f2},{239,490,0x83848a},{238,490,0xf2f2f2},{460,493,0xbcbcbe},{724,490,0xf2f2f2}, sim=95} -- 已输入 叉叉 p26_2clear = { {{714,485,0x9f9f9f},{714,490,0xf2f2f2},{714,474,0x9f9f9f},{714,507,0x9f9f9f},{729,491,0x9f9f9f},{698,491,0x9f9f9f},{239,490,0x83848a},{238,490,0xf2f2f2}}, --(3) 20241114 {{719,362,0xafb0b4},{719,355,0xafb0b4},{719,367,0xffffff},{720,380,0xafb0b4},{723,371,0xffffff},{731,367,0xafb0b4},{715,363,0xffffff},{707,367,0xafb0b4},{707,414,0xffffff},{707,415,0x8a8b90}}, --(4) 20241115 {{711,363,0xc1c1c1},{710,353,0xc1c1c1},{711,382,0xc1c1c1},{725,367,0xc1c1c1},{696,368,0xc1c1c1},{706,363,0xf2f2f2},{715,363,0xf2f2f2},{715,372,0xf2f2f2},{706,372,0xf2f2f2},{730,367,0xf2f2f2}} } -- continue p26_2continue = {{272,728,0xfe2c55},{156,687,0xfe2c55},{57,728,0xfe2c55},{195,780,0xfe2c55},{769,703,0xfe2c55},{723,766,0xfe2c55},{603,702,0xfe2c55},{480,778,0xfe2c55},{1,723,0xffffff},{826,722,0xffffff}} -- Sendcode p26Sendcode = {{389,729,0xfe2c55},{2,729,0xffffff}, {87,713,0xfe2c55},{551,797,0xfe2c55},{762,749,0xfe2c55},{765,748,0xffffff},{102,774,0xfe2c55}, region={385,600, 395,950}} zinputPhone = {0.5*w,404} zclear = {744,404} --弃用 20241114 -- Sendcode 红线异常 p26_2Sendcode异常 = { --(2)(3)(4) {{72,451,0xff4c3a},{118,451,0xff4c3a},{163,451,0xff4c3a},{212,451,0xff4c3a},{263,451,0xff4c3a},{305,451,0xff4c3a},{357,451,0xff4c3a},{422,451,0xff4c3a},{464,451,0xff4c3a},{506,451,0xff4c3a}, sim=99, region={62, 400, 777, 461}} --{{67,451,0xff4c3a},{2,2,0xffffff}, {66,451,0xff8477},{65,451,0xffcac5},{64,451,0xffffff},{67,450,0xffffff},{67,452,0xffffff},{375,451,0xff4c3a},{759,451,0xff4c3a},{763,451,0xffffff},{771,120,0x707070}}, -- (3) 20241117 --{{75,415,0xff4c3a},{3,3,0xffffff}, {75,414,0xffffff},{75,416,0xffffff},{648,415,0xff4c3a},{648,414,0xffffff},{648,416,0xffffff},{357,415,0xff4c3a},{756,415,0xff4c3a},{825,415,0xffffff}}, -- (4) 20241117 --{{125,451,0xda3123},{3,3,0xffffff}, {125,459,0xda3123},{625,467,0xda3123},{132,492,0xda3123},{584,414,0xff4c3a},{584,417,0xffffff},{824,483,0xffffff}} } -- 验证码 p27inputcode = { {{64,436,0x8a8b90},{19,19,0xffffff}, {63,436,0xffffff},{64,435,0xffffff},{64,437,0xffffff},{148,436,0x8a8b90},{761,436,0x8a8b90},{679,436,0x8a8b90},{772,120,0x707070},{766,133,0x707070},{772,159,0x707070}}, --(4) 20241115 {{169,429,0xf2f2f2},{169,445,0xf2f2f2},{169,468,0xf2f2f2},{171,468,0xffffff},{171,449,0xffffff},{171,433,0xffffff},{182,433,0xffffff},{182,448,0xffffff},{182,467,0xffffff}, {184,474,0xf2f2f2},{184,450,0xf2f2f2},{184,431,0xf2f2f2},{287,449,0xf2f2f2},{290,449,0xffffff},{299,449,0xffffff},{303,449,0xf2f2f2}, sim=99} } -- 弹窗Create account p27弹窗Create = {{374,965,0x007aff},{10,10,0xcccccc}, {526,980,0x007aff},{310,959,0x007aff},{301,970,0x007aff},{306,970,0xf1f1f1},{370,969,0xf1f1f1},{528,976,0xf1f1f1},{151,925,0xb3b3b3},{674,1014,0xb3b3b3},{70,436,0x6e6f73}} -- 已输入验证码 p28已输入code = { {{714,436,0x8a8b90},{60,20,0xffffff}, {714,435,0xffffff},{714,437,0xffffff},{122,436,0x8a8b90},{122,435,0xffffff},{122,437,0xffffff},{711,388,0x000000}, region={693,364, 749,419}}, --(4) 20241115 {{353,446,0x000000},{303,446,0xf2f2f2},{299,446,0xffffff},{290,446,0xffffff},{287,446,0xf2f2f2},{184,446,0xf2f2f2},{181,446,0xffffff},{172,446,0xffffff},{168,446,0xf2f2f2}, {642,458,0xf2f2f2},{646,458,0xffffff},{655,458,0xffffff},{659,458,0xf2f2f2},{824,451,0xffffff},{4,459,0xffffff}, sim=99} } zback = {45,83} -- 验证码 红线 弃号 p28验证码弃号 = { --28马2 {{65,436,0xff4c3a},{65,435,0xffffff},{65,437,0xffffff},{62,436,0xffffff},{741,436,0xff4c3a},{741,435,0xffffff},{741,437,0xffffff}, sim=99, region={52, 425, 751, 447}}, --28马4 {{78,547,0xda3123},{78,544,0xffffff},{79,541,0xda3123},{71,537,0xda3123},{406,538,0xda3123},{598,551,0xda3123},{324,611,0xfe2c55},{125,596,0xfe2c55},{68,603,0xfe2c55},{78,607,0xffffff}, sim=99, region={60, 500, 666, 650}}, --28马4 5 {{78,547,0xda3123},{78,544,0xffffff},{79,541,0xda3123},{71,537,0xda3123},{406,538,0xda3123},{598,551,0xda3123},{78,607,0xffffff}, sim=99, region={60, 500, 666, 650}}, --28英6 {{82,550,0xda3123},{78,538,0xda3123},{74,552,0xda3123},{78,553,0xffffff},{78,546,0xffffff},{78,558,0xda3123}, sim=99, region={64, 528, 92, 568}}, } p29再发sms = { --29英 {{119,564,0xfe2c55},{125,564,0xfe2c55},{125,561,0xffffff},{125,557,0xfe2c55},{125,568,0xffffff},{125,571,0xfe2c55},{233,564,0xfe2c55},{229,564,0xffffff},{226,561,0xfe2c55},{68,553,0xfe2c55}, sim=95, region={58, 543, 243, 681}}, --29马 {{144,564,0xfe2c55},{139,561,0xffffff},{135,559,0xfe2c55},{134,563,0xffffff},{68,553,0xfe2c55},{75,561,0xfe2c55},{78,565,0xffffff},{81,571,0xfe2c55},{324,552,0xfe2c55},{324,571,0xfe2c55}, sim=95, region={58, 542, 334, 681}}, } p28异常Log = {{278,924,0xfe2c55},{166,907,0xfe2c55},{624,889,0xfe2c55},{661,948,0xfe2c55},{403,971,0xfe2c55},{665,917,0xffffff},{523,884,0xffffff},{284,976,0xffffff},{161,928,0xffffff},{380,656,0xa6a8aa}, sim=99, region={151, 646, 675, 986}} p28_2Verify= {{128,558,0xa8a8a8},{130,545,0xffffff},{127,540,0xffffff},{125,544,0xffffff},{121,544,0xa8a8a8},{124,536,0xa8a8a8},{128,535,0xa8a8a8},{133,539,0xa8a8a8},{134,545,0xa8a8a8},{116,566,0xa8a8a8}, sim=99, region={106, 525, 144, 576}} -- accounts.google.com 30 30b / 30c 偏移 p30栏头accounts = { {{275,174,0x000000},{3,3,0x787977}, {231,181,0x000000},{243,172,0x000000}, {270,167,0x000000},{270,170,0xf7f7f7},{270,174,0x000000},{270,178,0xf7f7f7},{267,182,0x000000},{412,181,0x000000},{412,177,0xf7f7f7},{417,181,0xf7f7f7},{407,181,0xf7f7f7},{530,181,0x000000},{530,177,0xf7f7f7},{534,180,0xf7f7f7},{526,180,0xf7f7f7},{32,170,0x007aff},{32,173,0x007aff},{129,160,0x007aff},{129,182,0x007aff},{682,178,0x007aff},{706,162,0x007aff},{712,176,0x007aff},{779,162,0x007aff}}, {{427,181,0x000000},{3,3,0x787977}, {252,105,0xd1d3d0}, {427,177,0xf7f7f7},{431,180,0xf7f6f7},{423,181,0xf7f7f7},{545,181,0x000000},{545,177,0xf7f7f7},{549,180,0xf7f7f7},{541,181,0xf7f7f7},{252,160,0x000000},{247,167,0x000000}, {246,182,0x000000},{252,177,0x000000},{258,171,0x000000},{252,167,0xf7f6f7},{396,163,0x000000},{418,178,0x000000},{441,188,0x000000},{502,188,0x000000},{516,160,0x000000},{614,182,0x000000}} } -- 594,1051,0x203ea9 p39人机检测 = {{594,1051,0x203ea9},{593,1064,0xf9f9f9},{585,1074,0xb4b4b4},{571,1082,0xb4b4b4},{549,1063,0xb6b6b6},{551,1050,0x4e8df5},{565,1035,0x4f8df5},{578,1036,0x2843a3},{571,1059,0xf9f9f9}} --账号输入框 蓝 p30框ZH = {{{571,813,0xffffff},{570,759,0x0b57d0},{778,778,0x0b57d0},{778,843,0x0b57d0},{623,868,0x0b57d0},{137,868,0x0b57d0},{49,782,0x0b57d0},{61,759,0x0b57d0},{55,915,0x0b57d0},{64,901,0x0b57d0}}, {{589,807,0xffffff},{589,757,0x0b57d0},{249,757,0x0b57d0},{245,757,0xffffff},{65,757,0xffffff},{62,757,0x0b57d0},{49,771,0x0b57d0},{469,865,0x0b57d0},{777,798,0x0b57d0},{52,903,0x0b57d0}} } -- 账号输入框 初始未输入 灰 p30b框ZH灰 = {{70,756,0x747775},{242,756,0x747775},{48,777,0x747775},{48,832,0x747775},{314,866,0x747775},{778,804,0x747775},{47,796,0xffffff},{320,758,0xffffff},{355,868,0xffffff},{777,804,0xffffff}, {52,895,0x0b57d0},{60,895,0x0b57d0},{52,904,0x0b57d0},{52,912,0x0b57d0}} --账号已输入 蓝 p32账号已输入 = {{378,666,0x1f1f1f},{378,615,0xffffff},{378,611,0x0b57d0},{367,611,0x0b57d0},{390,611,0x0b57d0},{378,715,0xffffff},{378,720,0x0b57d0},{367,720,0x0b57d0},{390,720,0x0b57d0}} --键盘Done p32键盘Done = {{756,1145,0x007aff},{784,1149,0x007aff},{717,1138,0x007aff},{722,1156,0x007aff},{722,1151,0xeff0f1},{826,1102,0x919398},{826,1105,0xeff0f1},{2,1102,0x919398},{2,1105,0xeff0f1},{2,1099,0xffffff}} -- 账号输入框 灰 p33框ZH灰 = {{680,813,0xffffff},{249,758,0x747775},{246,758,0xffffff},{65,758,0xffffff},{62,758,0x747775},{48,779,0x747775},{223,868,0x747775},{778,814,0x747775}} -- 账号已输入 灰 p33账号已输入灰 = {{433,815,0x1f1f1f},{433,761,0xffffff},{433,758,0x747775},{443,758,0x747775},{423,758,0x747775},{433,866,0xffffff},{433,868,0x747775},{443,868,0x747775},{423,868,0x747775}} --帐密Next p30帐密Next = {{700,1203,0x0b57d0},{656,1187,0x0b57d0},{740,1187,0x0b57d0},{767,1221,0x0b57d0},{740,1254,0x0b57d0},{708,1259,0x0b57d0},{660,1254,0x0b57d0},{630,1238,0x0b57d0},{621,1221,0x0b57d0},{631,1200,0x0b57d0},{655,1201,0x0b57d0},{642,1221,0x0b57d0},{663,1239,0x0b57d0},{694,1239,0x0b57d0},{741,1222,0x0b57d0},{732,1203,0x0b57d0}} -- 密码输入框 蓝 p34框MA = {{628,890,0xffffff},{322,837,0x0b57d0},{653,837,0x0b57d0},{777,848,0x0b57d0},{778,920,0x0b57d0},{561,945,0x0b57d0},{193,946,0x0b57d0},{49,913,0x0b57d0},{50,854,0x0b57d0},{62,979,0x444746}} -- 密码已输入 蓝 p35密码已输入 = {{89,666,0x1f1f1f},{49,666,0x0b57d0},{777,666,0x0b57d0},{1,666,0xffffff},{826,666,0xffffff},{61,753,0x444746},{55,769,0x444746},{87,779,0x444746}} -- 89,892,0x1f1f1f p36密码已输入灰 = {{89,892,0x1f1f1f},{99,892,0xffffff},{108,892,0x1f1f1f},{309,836,0x747775},{306,836,0xffffff},{65,836,0xffffff},{62,836,0x747775},{778,852,0x747775},{558,946,0x747775},{48,883,0x747775}, {64,979,0x444746},{55,992,0x444746}} -- 账号完成 Continue p38ZM完成_Continue = {{610,1128,0x0b57d0},{610,1123,0x0b57d0},{610,1120,0xffffff},{610,1117,0x0b57d0},{610,1113,0xffffff},{610,1134,0x0b57d0},{610,1137,0xffffff},{610,1088,0x747775},{610,1166,0x747775},{427,1128,0x747775},{49,1127,0x747775},{2,1124,0xffffff},{120,1088,0x747775},{346,1166,0x747775},{400,1128,0x747775},{778,1128,0x747775}} -- 生日 p40生日 = {{704,293,0x78ebfa},{20,20,0xffffff}, {673,293,0x78ebfa},{673,285,0x161823},{665,293,0x161823},{674,306,0x161823},{729,294,0x78ebfa},{729,285,0x161823},{738,292,0x161823},{729,305,0x161823},{729,318,0xffffff}, {728,326,0x161823},{738,317,0x161823},{749,326,0x161823},{702,245,0xf07637}} -- 生日未 574 / 1540 p40生日未 = {{590,582,0xfeaabb},{744,542,0xfeaabb},{737,612,0xfeaabb},{266,544,0xfeaabb},{106,544,0xfeaabb},{70,576,0xfeaabb},{155,614,0xfeaabb}} -- 生日暗 p40生日暗背 = {{702,293,0x3c757d},{10,10,0x7f7f7f}, {672,293,0x3c757d},{666,293,0x0b0c11},{731,293,0x3c757d},{738,293,0x0b0c11},{701,285,0x0b0c11},{694,306,0x0b0c11},{702,277,0x7f7f7f},{699,256,0x712929}} -- 生日弹窗OK p40生日弹窗OK = { {{425,994,0x000000},{10,10,0x7f7f7f}, {423,990,0xffffff},{419,987,0x000000},{419,982,0xffffff},{262,948,0xe0e0e0},{262,947,0xffffff},{178,809,0x000000},{468,948,0xe0e0e0},{132,990,0x7f7f7f},{1,990,0x7f7f7f}}, {{420,1013,0x000000},{10,10,0x7f7f7f}, {431,1004,0x010101},{432,1022,0x000000},{424,1017,0xffffff},{398,1021,0x000000},{408,1005,0x000000},{747,575,0x80162c},{776,560,0x7f7f7f},{100,637,0x80162a},{703,291,0x3b767e}} } -- 生日已 p41生日已 = { {{590,582,0xfe2c55},{744,542,0xfe2c55},{737,612,0xfe2c55},{266,544,0xfe2c55},{106,544,0xfe2c55},{70,576,0xfe2c55},{155,614,0xfe2c55}}, {{574,1547,0xfe2c55},{88,1522,0xfe2c55},{57,1545,0xffffff},{249,1491,0xffffff},{769,1559,0xffffff},{706,293,0x78ebfa},{672,294,0x78ebfa},{665,294,0x161823},{10,10,0xffffff}} } -- 密码 p42密码 = { {{715,397,0xadadad},{715,440,0x8a8b90},{20,20,0xffffff},{715,439,0xffffff},{73,440,0x8a8b90},{73,441,0xffffff},{732,386,0xadadad},{699,386,0xadadad},{703,400,0xadadad},{772,120,0x707070},{754,149,0x707070},{789,149,0x707070},{771,148,0x707070},{777,134,0x707070},{766,132,0x707070},{771,135,0xffffff}}, --(4) 20241115 {{701,423,0x7e7e7e},{701,428,0x7e7e7e},{698,427,0xf2f2f2},{705,427,0xf2f2f2},{711,424,0x7e7e7e},{715,422,0xf2f2f2},{715,415,0x7e7e7e},{692,425,0x7e7e7e},{688,422,0xf2f2f2},{688,415,0x7e7e7e}, {703,373,0xf2f2f2},{703,370,0xffffff},{700,466,0xf2f2f2},{700,469,0xffffff},{762,414,0xf2f2f2},{765,414,0xffffff},{65,414,0xf2f2f2},{62,414,0xffffff}, sim=99}, --42马 {{702,423,0x7e7e7e},{702,419,0xf2f2f2},{702,429,0x7e7e7e},{702,431,0xf2f2f2},{695,426,0xf2f2f2},{691,426,0x7e7e7e},{709,426,0xf2f2f2},{712,426,0x7e7e7e},{710,421,0x7e7e7e},{693,421,0x7e7e7e}, {5,5,0xffffff},{822,1786,0xffffff},{771,148,0x707070},{766,137,0xffffff},{766,133,0x707070}} } -- 密码未 p42密码未 = { {{593,738,0xf1f1f2},{747,704,0xf1f1f2},{744,775,0xf1f1f2},{340,778,0xf1f1f2},{281,703,0xf1f1f2},{218,745,0xf1f1f2},{89,701,0xf1f1f2},{72,759,0xf1f1f2},{62,741,0xffffff},{228,692,0xffffff}, sim=95}, {{612,736,0xf1f1f2},{737,699,0xf1f1f2},{84,772,0xf1f1f2},{59,729,0xffffff},{353,688,0xffffff},{408,791,0xffffff},{91,703,0xf1f1f2},{706,769,0xf1f1f2}}, --(4) 20241115 {{701,423,0x7e7e7e},{701,428,0x7e7e7e},{698,427,0xf2f2f2},{705,427,0xf2f2f2},{711,424,0x7e7e7e},{715,422,0xf2f2f2},{715,415,0x7e7e7e},{692,425,0x7e7e7e},{688,422,0xf2f2f2},{688,415,0x7e7e7e}, {703,373,0xf2f2f2},{703,370,0xffffff},{700,466,0xf2f2f2},{700,469,0xffffff},{762,414,0xf2f2f2},{765,414,0xffffff},{310,409,0x6a6a6a},{175,435,0x6a6a6a},{65,414,0xf2f2f2},{62,414,0xffffff}, sim=99}, --42马 {{702,423,0x7e7e7e},{702,419,0xf2f2f2},{702,429,0x7e7e7e},{702,431,0xf2f2f2},{695,426,0xf2f2f2},{691,426,0x7e7e7e},{709,426,0xf2f2f2},{712,426,0x7e7e7e},{710,421,0x7e7e7e},{693,421,0x7e7e7e}, {5,5,0xffffff},{822,1786,0xffffff},{771,148,0x707070},{766,137,0xffffff},{766,133,0x707070}, {379,422,0x6a6a6a}, sim=99} } zpsw = {400,393} -- 密码已 p43密码已 = { {{593,738,0xfe2c55},{747,704,0xfe2c55},{744,775,0xfe2c55},{340,778,0xfe2c55},{281,703,0xfe2c55},{218,745,0xfe2c55},{89,701,0xfe2c55},{72,759,0xfe2c55},{62,741,0xffffff},{228,692,0xffffff}, sim=95}, {{612,736,0xfe2c55},{737,699,0xfe2c55},{84,772,0xfe2c55},{59,729,0xffffff},{353,688,0xffffff},{408,791,0xffffff},{91,703,0xfe2c55},{706,769,0xfe2c55}} } p43密码后异常 = { --ocr {"Dismiss", "Your account","banned"}, -- {"Request another review", "banned"}, } --粘贴 p44粘贴 = {{97,300,0x090909},{85,292,0x060606},{100,314,0x0d0d0d},{93,311,0xf3f3f3},{89,303,0xf6f6f6},{89,308,0x0b0b0b},{81,300,0xf9f9f9},{80,292,0xf5f5f5},{80,296,0x0b0b0b},{102,291,0x101010},{126,296,0x0b0b0b},{136,296,0x0c0c0c},{131,299,0x0b0b0b},{131,313,0x0a0a0a},{131,317,0xf4f4f4},{127,299,0xf8f8f8},{182,302,0x080808},{182,309,0x070707},{182,319,0x090909},{182,323,0xf3f3f3}, sim=85} -- 昵称 通 p44昵称 = { {{762,531,0x8a8b90},{5,5,0xffffff}, {765,531,0xffffff},{493,531,0x8a8b90},{229,531,0x8a8b90},{65,531,0x8a8b90},{63,531,0xffffff},{69,530,0xffffff},{707,532,0xffffff} ,{771,123,0x707070},{771,127,0xffffff},{771,131,0x707070},{771,136,0xffffff},{771,141,0x707070},{771,147,0x707070},{771,152,0xffffff},{771,156,0x707070},{788,139,0x707070},{776,135,0x707070},{755,141,0x707070}}, {{762,562,0x8a8b90},{5,5,0xffffff}, {765,562,0xffffff},{493,562,0x8a8b90},{229,562,0x8a8b90},{65,562,0x8a8b90},{63,562,0xffffff},{69,561,0xffffff},{707,563,0xffffff} ,{771,123,0x707070},{771,127,0xffffff},{771,131,0x707070},{771,136,0xffffff},{771,141,0x707070},{771,147,0x707070},{771,152,0xffffff},{771,156,0x707070},{788,139,0x707070},{776,135,0x707070},{755,141,0x707070}}, -- (3) 20241114 {{450,557,0xf2f2f2},{771,147,0x707070},{5,5,0xffffff}, {771,136,0xffffff},{767,133,0x707070},{772,131,0x707070},{776,136,0x707070},{771,127,0xffffff},{771,123,0x707070},{755,139,0x707070},{788,139,0x707070}, {61,141,0x707070},{82,156,0x707070},{36,134,0x707070},{43,128,0x707070},{42,151,0x707070},{320,246,0x161823},{83,246,0x161823},{514,506,0xf2f2f2}}, -- (4) 20241115 {{609,509,0xf2f2f2},{761,505,0xf2f2f2},{761,505,0xf2f2f2},{825,505,0xffffff}, {2,2,0xffffff}, {320,251,0x161823},{320,254,0xffffff},{317,258,0x161823},{323,288,0x161823},{320,271,0x161823},{317,247,0x161823},{322,244,0x161823},{313,247,0xffffff},{88,245,0x161823},{67,267,0x161823},{100,258,0x161823},{100,262,0xffffff},{555,273,0x161823},{555,277,0xffffff},{555,281,0x161823}, {771,140,0x707070}, {71,327,0x707070},{122,375,0x707070},{433,406,0x707070}, sim=99}, --44(4) {{643,589,0xf2f2f2},{3,3,0xffffff},{771,147,0x707070}, {88,246,0x161823},{67,267,0x161823},{105,277,0x161823},{106,273,0xffffff},{118,251,0x161823},{118,254,0xffffff},{118,258,0x161823},{136,300,0x161823},{607,251,0x161823},{422,300,0x161823}, {240,500,0xf2f2f2}, sim=99} } -- 昵称未 p44昵称未 = { {{596,756,0xf1f1f2},{747,721,0xf1f1f2},{753,784,0xf1f1f2},{409,795,0xf1f1f2},{321,722,0xf1f1f2},{229,779,0xf1f1f2},{147,718,0xf1f1f2},{95,791,0xf1f1f2},{75,754,0xf1f1f2},{62,741,0xffffff},{320,710,0xffffff}}, {{653,784,0xf1f1f2},{20,20,0xffffff}, {468,744,0xf1f1f2},{468,741,0xffffff},{750,825,0xf1f1f2},{734,562,0x8a8b90},{375,562,0x8a8b90},{83,562,0x8a8b90},{736,509,0xffffff},{772,123,0x707070},{771,156,0x707070}}, --44(4) {{643,589,0xf2f2f2},{3,3,0xffffff},{771,147,0x707070},{555,981,0xfeaabb}, {358,557,0x9f9f9f},{459,530,0x9f9f9f},{459,527,0xf2f2f2},{574,543,0x9f9f9f},{207,530,0x9f9f9f},{189,530,0x9f9f9f},{189,552,0x9f9f9f},{207,552,0x9f9f9f}, sim=99} } znick = {500,491} zskip = {64, 139} -- 昵称已 p45昵称已 = { --45(6) {{309,1112,0xfe2c55},{91,1078,0xfe2c55},{725,1145,0xfe2c55}, region={81,700,735,1155}, sim=98}, {{596,756,0xfe2c55},{747,721,0xfe2c55},{753,784,0xfe2c55},{409,795,0xfe2c55},{321,722,0xfe2c55},{229,779,0xfe2c55},{147,718,0xfe2c55},{95,791,0xfe2c55},{75,754,0xfe2c55},{62,741,0xffffff},{320,710,0xffffff}}, {{653,784,0xfe2c55},{20,20,0xffffff}, {468,744,0xfe2c55},{468,741,0xffffff},{750,825,0xfe2c55},{734,562,0x8a8b90},{375,562,0x8a8b90},{83,562,0x8a8b90},{736,509,0xcccccc},{772,123,0x707070},{771,156,0x707070}}, --20241030 {{250,1107,0xfe2c55},{739,1072,0xfe2c55},{86,1154,0xfe2c55},{59,1108,0xffffff},{213,1063,0xffffff},{769,1102,0xffffff},{716,1151,0xfe2c55}}, } -- 昵称 出提示 p46出提示 = { {{400,112,0x5d5d5d},{2,2,0xffffff},{825,132,0xffffff}, {359,112,0x5f5f5f},{328,112,0x616161},{302,112,0x626262},{427,112,0x5d5d5e},{461,112,0x5f5f5f},{461,111,0xffffff},{435,111,0xffffff},{385,111,0xffffff},{335,111,0xffffff}, {772,123,0x707070},{772,127,0xffffff},{772,132,0x707070},{776,135,0x707070},{771,136,0xffffff},{771,141,0x707070},{771,147,0x707070},{771,152,0xffffff},{771,156,0x707070}}, --46(2) {{258,113,0x636363},{277,113,0x636363},{294,113,0x636363},{318,113,0x636363},{342,113,0x636363},{365,113,0x636363},{393,113,0x636363},{415,113,0x636363},{436,113,0x636363},{465,113,0x636363}, sim=99, region={121, 103, 717, 201}} } --面部 skip p49SkipFace = { --49 {{61,141,0x707070},{42,128,0x707070},{82,136,0x707070},{83,145,0x707070},{83,156,0x707070},{93,143,0xffffff},{96,143,0x707070},{74,1639,0xfe2c55},{324,1700,0xfe2c55},{751,1630,0xfe2c55}, {263,402,0xfe5d7d},{266,390,0x010202},{290,404,0xfe5d7d},{296,405,0xffffff},{300,434,0xfe5d7d},{309,434,0xffffff},{317,434,0xfe5d7d},{519,461,0x65d9d5},{516,452,0x010202},{550,344,0x65d9d5}, sim=99, region={32, 118, 761, 1710}}, --49(2) {{61,141,0x707070},{42,128,0x707070},{82,136,0x707070},{83,145,0x707070},{83,156,0x707070},{93,143,0xffffff},{96,143,0x707070},{74,1639,0xfe2c55},{324,1700,0xfe2c55},{751,1630,0xfe2c55}, {325,424,0x14eae4},{332,424,0x6d2fff},{327,433,0x6d30ff},{336,436,0x14eae4},{612,395,0xff6577},{622,396,0xffffff},{631,396,0xffdb00},{561,457,0xff6677},{457,522,0x14eae4},{466,531,0x6e2ffe}, sim=99, region={32, 118, 761, 1710}} } -- 可关注 红十 p50可关注 = {{763,928,0xfe2c55},{765,925,0xffe9ed},{767,925,0xffffff},{768,925,0xffe9ed},{770,928,0xfe2c55},{770,930,0xffe9ed},{770,931,0xffffff},{770,933,0xffe9ed},{770,935,0xfe2c55},{766,931,0xffffff}, sim=99, region={753, 666, 780, 1083}} -- Not now Get notified p51Notnow = { {{211,1183,0xf2f2f2},{83,1155,0xf2f2f2},{83,1151,0xffffff},{357,1230,0xf2f2f2},{374,1194,0xffffff},{391,1192,0xfe2c55},{491,1158,0xfe2c55},{678,1193,0xfe2c55},{526,1235,0xfe2c55},{693,1192,0xffffff}, {533,613,0x00abf4},{527,639,0x00abf4},{534,632,0xffffff},{532,654,0xffffff},{533,670,0xe1e1e1},{533,701,0xff3b76},{531,713,0xffffff},{532,728,0xff3b76},{531,738,0xffffff}, region={73, 555, 703, 1245}, sim=99} } -- Not now Get notified xxx p51Notnow_a = { {{533,613,0x00abf4},{527,639,0x00abf4},{534,632,0xffffff},{532,654,0xffffff},{533,670,0xe1e1e1},{533,701,0xff3b76},{531,713,0xffffff},{532,728,0xff3b76},{531,738,0xffffff}, region={517, 555, 544, 800}, sim=99} } p51Notnow_b = { {{211,1183,0xf2f2f2},{83,1155,0xf2f2f2},{83,1151,0xffffff},{357,1230,0xf2f2f2},{374,1194,0xffffff},{391,1192,0xfe2c55},{491,1158,0xfe2c55},{678,1193,0xfe2c55},{526,1235,0xfe2c55},{693,1192,0xffffff}, region={73, 1141, 703, 1245}, sim=99} } -- ok 下弹菜单 xxx p52OK = {{600,1652,0xfe2b54},{746,1614,0xff2a58},{743,1687,0xfe2b54},{121,1619,0xfe2b54},{88,1646,0xfe2b54},{86,1260,0x020202},{76,1269,0xffffff},{87,1282,0x020202},{771,1092,0x000000},{771,1089,0xadadad}} --Faham xxx p53_Faham = { --53马1 2 {{402,1124,0x000000},{402,1113,0x000000},{402,1109,0xffffff},{402,1133,0x000000},{402,1137,0xffffff},{411,1120,0x000000},{414,1118,0xffffff},{409,1123,0xffffff},{368,1114,0x000000},{378,1114,0x000000}, {135,1076,0xe0e0e0},{135,1075,0xffffff},{427,1076,0xe0e0e0},{692,1076,0xe0e0e0},{692,1077,0xffffff},{198,805,0x474747},{198,822,0x474747},{203,812,0x474747},{203,816,0xffffff},{210,822,0x474747}, {211,993,0x474747},{267,981,0x474747},{309,991,0x474747},{317,974,0x474747},{413,990,0x474747},{410,989,0xffffff},{366,923,0x474747},{534,889,0x474747}, sim=99, region={126, 770, 711, 1186}}, } -- 广告 叉掉 xxx p54_AD叉 = {{413,1188,0xffffff},{413,1184,0x999999},{413,1193,0x9f9d9e},{415,1189,0xffffff},{560,1012,0xff490f},{168,526,0xfefedc},{365,504,0x916b00},{315,524,0xffe071},{535,501,0xfee893},{374,1667,0x062b34}} -- Choose_select p55_Choose_select = { {{370,839,0xfe2c55},{370,831,0xfe2c55},{370,827,0xf8f8f8},{370,851,0xfe2c55},{370,854,0xf8f8f8},{366,851,0xf8f8f8},{366,838,0xf8f8f8},{373,834,0xf8f8f8},{373,846,0xf8f8f8},{332,836,0xfe2c55}, {105,792,0xdadada},{360,792,0xdadada},{637,792,0xdadada}, region={95,600,647,1324}, sim=98} } p56弹窗弃号 = { --56马 {{253,707,0x000000},{250,703,0xffffff},{246,713,0x000000},{252,713,0xffffff},{552,773,0x000000},{546,772,0xffffff},{589,773,0x000000},{583,771,0xffffff},{579,770,0x000000},{476,1122,0x000000}, {560,890,0x474747},{267,855,0x4f4f4f},{267,858,0xffffff},{267,861,0x474747},{293,967,0x010101},{353,1004,0x474747},{500,968,0x474747},{499,965,0xffffff},{463,968,0x010101}, sim=99, region={236, 693, 599, 1132}} } -- 我页 黑十 p60我页 = { {{335,1281,0x20d5ec},{335,1268,0x20d5ec},{328,1268,0xffffff},{355,1268,0x161823},{366,1280,0xffffff},{383,1287,0x161823},{383,1281,0xffffff},{414,1290,0xfa2d6c},{414,1271,0xfa2d6c},{421,1283,0xffffff}, sim=99, region={318, 1258, 431, 1300}}, } -- 我页 黑十 弹窗 124 p60我页弹窗 = { {{335,1269,0x106a75},{335,1280,0x106a75},{341,1280,0x0b0c11},{341,1267,0x0b0c11},{365,1281,0x7f7f7f},{385,1280,0x7f7f7f},{391,1280,0x0b0c11},{408,1280,0x0b0c11},{413,1280,0x7c1636},{413,1296,0x7c1636}, region={325,1257,423,1306}, sim=98}, {{335,1275,0x236b74},{347,1275,0x1f2024},{367,1280,0x7c7c7c},{407,1281,0x1f2024},{413,1281,0x7a2841}, region={325,1265,423,1291}, sim=98}, } -- upload 小按钮 带白边 p60upload = { {{416,1133,0xfe2c55},{416,1125,0xfe2c55},{416,1122,0xffffff},{416,1178,0xfe2c55},{416,1181,0xffffff},{326,1144,0xfe2c55},{323,1144,0xffffff},{501,1143,0xfe2c55},{504,1143,0xffffff},{336,1131,0xfe2c55}}, {{421,1100,0xfe2c55},{350,1087,0xfe2c55},{350,1085,0xffffff},{519,1105,0xfe2c55},{521,1105,0xffffff},{397,1140,0xfe2c55},{397,1142,0xffffff},{308,1109,0xfe2c55},{306,1109,0xffffff}}, --(5) {{420,1143,0xfe2c55},{318,1126,0xfe2c55},{318,1123,0xffffff},{308,1173,0xfe2c55},{305,1173,0xffffff},{471,1187,0xfe2c55},{471,1190,0xffffff},{519,1144,0xfe2c55},{522,1144,0xffffff}}, --(7) {{391,1102,0xfe2c55},{327,1094,0xfe2c55},{349,1088,0xfe2c55},{373,1088,0xfe2c55},{427,1088,0xfe2c55},{465,1088,0xfe2c55},{488,1088,0xfe2c55},{499,1099,0xfe2c55},{350,1085,0xffffff},{469,1085,0xffffff}, sim=99, region={317, 1075, 509, 1150}}, --60d {{419,1183,0xfe2c55},{311,1189,0xfe2c55},{326,1171,0xfe2c55},{344,1167,0xfe2c55},{394,1166,0xfe2c55},{449,1166,0xfe2c55},{495,1168,0xfe2c55},{512,1181,0xfe2c55},{308,1185,0xffffff},{317,1171,0xffffff},{333,1163,0xffffff},{367,1163,0xffffff},{423,1163,0xffffff},{490,1163,0xffffff},{509,1170,0xffffff},{518,1183,0xffffff}, sim=99, region={301, 1000, 522, 1300}}, --60e {{419,1180,0xfe2c55},{327,1196,0xfe2c55},{334,1177,0xfe2c55},{351,1168,0xfe2c55},{390,1166,0xfe2c55},{440,1166,0xfe2c55},{474,1167,0xfe2c55},{491,1175,0xfe2c55},{500,1196,0xfe2c55},{323,1196,0xffffff},{327,1181,0xffffff},{340,1167,0xffffff},{361,1163,0xffffff},{401,1163,0xffffff},{434,1163,0xffffff},{468,1163,0xffffff},{486,1167,0xffffff},{497,1176,0xffffff},{504,1195,0xffffff}, sim=99, region={317, 1000, 510, 1300}}, } --我页 Login p63Login我 = {{300,747,0xfe2c55},{164,712,0xfe2c55},{126,777,0xfe2c55},{123,776,0xffffff},{123,737,0xffffff},{233,708,0xffffff},{468,782,0xfe2c55},{623,741,0xfe2c55},{626,741,0xffffff},{430,574,0xa6a8aa}, region={113,564,636,792}, sim=98} -- Recent 670,283,0x161823 --p70Recent = {{670,283,0x161823},{670,5,0x000000}, {670,281,0x161823},{670,279,0xffffff},{613,283,0x161823},{739,283,0x161823},{535,283,0xd0d1d3},{535,282,0xffffff},{812,283,0xd0d1d3},{812,282,0xffffff}} -- Recent p70Recent = { --70(1) {{145,283,0x161823},{29,283,0x161823},{28,283,0xd0d1d3},{28,282,0xffffff},{29,282,0x161823},{33,279,0xffffff}, sim=99, region={25, 278, 800, 284}}, --70(3) {{145,282,0x000000},{29,282,0x000000},{28,282,0xffffff},{28,283,0xd0d1d3},{141,278,0xffffff},{65,277,0xffffff}, sim=99, region={25, 276, 814, 284}}, } -- 642,243,0x8a8b90 p70Photo未 = { --Foto未 70d 70e {{642,243,0x8a8b90},{642,233,0x8a8b90},{642,252,0x8a8b90},{648,233,0x8a8b90},{648,243,0x8a8b90},{648,281,0xffffff},{648,283,0xd0d1d3},{642,255,0xffffff},{676,239,0x8a8b90}, sim=99, region={474, 230, 690, 286}}, --Photos未 70h {{419,244,0x8a8b90},{419,233,0x8a8b90},{413,234,0x8a8b90},{413,242,0x8a8b90},{413,251,0x8a8b90},{413,255,0xffffff},{468,239,0x8a8b90},{468,247,0x8a8b90},{471,253,0x8a8b90},{468,232,0xffffff},{504,249,0x8a8b91},{413,283,0xd0d1d3},{413,280,0xffffff}, sim=99, region={400, 230, 719, 286}}, --Photos --{{624,241,0x8a8b90},{624,234,0x8a8b90},{630,233,0x8a8b90},{630,238,0xffffff},{630,244,0x8a8b90},{648,283,0xd0d1d3},{624,249,0x8a8b90},{624,252,0x8a8b90},{624,283,0xd0d1d3},{624,281,0xffffff},{624,5,0x000000},{825,5,0x000000},{5,5,0x000000}}, --Photos - Live Photos --{{413,241,0x8a8b90},{413,234,0x8a8b90},{420,234,0x8a8b90},{420,239,0xffffff},{420,244,0x8a8b90},{413,244,0x8a8b90},{413,252,0x8a8b90},{413,281,0xffffff},{413,283,0xd0d1d3},{413,5,0x000000},{825,5,0x000000},{5,5,0x000000}} } zPhoto = {670,238} --abd -- Grid p70Grid = { --70(1) (3) {{698,500,0xffffff},{3,500,0xffffff}, {421,500,0xffffff},{123,500,0xffffff},{702,777,0xffffff},{128,777,0xffffff},{404,1054,0xffffff},{112,1054,0xffffff},{410,1332,0xffffff},{700,1332,0xffffff}, sim=99, region={0, 300, 800, 1640}}, --70_2(2) {{44,377,0xffffff},{361,377,0xffffff},{601,377,0xffffff},{796,377,0xffffff},{697,585,0xffffff},{527,585,0xffffff},{222,585,0xffffff},{132,585,0xffffff}, sim=99, region={0, 300, 810, 1640}}, } -- Next1 p71Next1 = {{607,1651,0xfe2c55},{449,1629,0xfe2c55},{426,1696,0xfe2c55},{415,1666,0xffffff},{398,1671,0xf1f1f2},{333,1635,0xf1f1f2},{296,1710,0xf1f1f2}} -- Next2 p72Next2 = { {{587,1646,0xfe2c55},{20,20,0x000000}, {452,1629,0xfe2c55},{435,1711,0xfe2c55},{414,1661,0x000000},{402,1665,0xffffff},{332,1629,0xffffff},{240,1712,0xffffff}}, -- 72e {{741,1648,0xfe2c55},{661,1629,0xfe2c55},{774,1629,0xfe2c55},{802,1650,0xfe2c55},{802,1693,0xfe2c55},{738,1714,0xfe2c55},{738,1717,0x000000},{805,1665,0x000000},{771,1626,0x000000},{680,1626,0x000000}, sim=99, region={409, 1616, 816, 1728}}, -- 72d --{{695,1671,0xfe2c55},{533,1630,0xfe2c55},{426,1700,0xfe2c55},{806,1665,0x000000},{689,1626,0x000000},{481,1718,0x000000},{419,1674,0x000000}, sim=99, region={409, 1616, 816, 1728}} } -- Next3 p73Next3 = {{736,1654,0xfe2b54},{785,1635,0xfe2b54},{776,1696,0xfe2b54},{488,1701,0xfe2b54},{467,1636,0xfe2b54},{429,1661,0xfe2b54},{415,1646,0xfffeff},{411,1685,0xffffff},{400,1666,0xf1f1f1},{257,1636,0xf1f1f1},{202,1705,0xf1f1f1},{36,1680,0xf1f1f1},{16,1678,0xffffff},{670,1617,0xffffff},{537,1722,0xffffff},{37,140,0x000000},{33,139,0xbababa},{31,139,0xffffff},{42,139,0xffffff}} -- 弹窗 Post Now p73弹窗PostNow = {{543,1078,0x000000},{2,2,0x7f7f7f},{825,1789,0x7f7f7f}, {543,1070,0x000000},{541,1067,0xffffff},{543,1087,0x000000},{546,1089,0x000000},{550,1089,0xffffff},{547,1085,0xffffff},{486,1069,0x000000},{499,1075,0x000000},{503,1075,0xffffff}, {320,1069,0x595959},{320,1079,0x595959},{320,1088,0x595959},{320,1092,0xffffff},{224,726,0x000000},{571,758,0x000000},{602,731,0x000000},{370,874,0x595959}} -- Next4 ok xxx p73_2Next4ok = {{592,1648,0xfe2b54},{18,18,0x7f7f7f}, {725,1616,0xfe2b54},{768,1632,0xffffff},{298,1694,0xfe2b54},{152,1611,0xff2b53},{68,1652,0xfe2b54},{61,1652,0xffffff},{123,1600,0xffffff},{771,1091,0x000000},{771,1088,0xa8a8a8}} -- 上传中 p74上传中 = {{413,1671,0x161823},{3,1631,0x000000},{821,1785,0x000000}, {403,1671,0x161823},{396,1671,0xffffff},{375,1671,0x20d5ec},{375,1659,0x20d5ec},{413,1680,0x161823},{421,1679,0xffffff},{453,1683,0xfa2d6c},{453,1667,0xfa2d6c}, {17,17,0x000000},{77,221,0xffffff},{781,149,0xffffff},{744,950,0x333333},{84,1076,0x333333},{72,819,0xffffff},{65,756,0x000000}} -- 已上传 p75已上传 = {{413,1671,0x161823},{3,1631,0x000000},{821,1785,0x000000}, {403,1671,0x161823},{396,1671,0xffffff},{375,1671,0x20d5ec},{375,1659,0x20d5ec},{413,1680,0x161823},{421,1679,0xffffff},{453,1683,0xfa2d6c},{453,1667,0xfa2d6c}, {17,17,0x000000},{781,149,0xffffff},{767,1304,0xe5e5e5},{767,1170,0xfefaf5},{768,1054,0xfefaf5}, sim=80} --【增粉 Scheme】 pfollow关注 = { {{276,550,0xfe2c55},{321,550,0xfe2c55},{324,550,0xffffff},{324,523,0xffffff},{320,523,0xfe2c55},{320,583,0xfe2c55},{324,583,0xffffff},{338,583,0xf1f1f2},{338,550,0xf1f1f2},{338,523,0xf1f1f2}, region={222,450,600,600}, sim=98} } p个页加载中 = {{370,443,0x000000},{372,445,0x000000},{374,443,0x000000},{377,445,0x000000},{378,443,0x000000},{367,443,0xffffff},{381,443,0xffffff},{377,440,0xffffff},{371,440,0xffffff},{371,448,0xffffff}, {374,448,0xffffff},{378,448,0xffffff},{381,445,0xffffff},{467,451,0xe3e4e5},{466,451,0xffffff},{283,454,0xe3e4e5},{284,454,0xffffff}, region={273,430,477,470}, sim=98} p个页Bell = {{585,93,0x000000},{579,93,0xffffff},{596,93,0x000000},{596,97,0xffffff},{597,101,0x000000},{606,101,0x000000},{606,97,0xffffff},{606,93,0x000000},{619,93,0x000000},{623,93,0xffffff}, region={569,83,633,111}, sim=98} p弹窗Open = {{535,973,0x007aff},{535,966,0x007aff},{535,987,0x007aff},{528,970,0x007aff},{518,960,0x007aff},{511,977,0x007aff},{556,973,0x007aff},{567,979,0x007aff},{575,981,0x007aff},{328,959,0x007aff}, sim=99, region={318, 949, 585, 997}} -- 验证加载中 p验证加载中 = {{189,808,0x7f162a},{2,485,0x7f7f7f}, {258,768,0x7f162a},{258,765,0x7f7f7f},{762,802,0x7f162a},{765,802,0x7f7f7f},{533,853,0x7f162a},{533,856,0x7f7f7f},{65,810,0x7f162a},{62,810,0x7f7f7f}} -- 旋码 箭头 英语/马来 p旋码 = { {{175,1142,0xb3b5b7},{2,1142,0x7f7f7f},{826,1142,0x7f7f7f}, {193,1142,0xb3b5b7},{196,1142,0xffffff},{169,1123,0xb3b5b7},{169,1141,0xb3b5b7},{169,1161,0xb3b5b7},{152,1135,0xb3b5b7},{152,1132,0xffffff}, {703,551,0x999999},{704,550,0xadadad},{704,552,0x999999},{703,553,0xadadad},{702,551,0xadadad},{705,552,0xadadad},{705,553,0x999999},{702,550,0x999999}}, {{175,1167,0xb3b5b7},{2,2,0x7f7f7f}, {193,1167,0xb3b5b7},{196,1167,0xffffff},{169,1148,0xb3b5b7},{166,1148,0xffffff},{171,1147,0xffffff},{169,1186,0xb3b5b7},{166,1186,0xffffff},{171,1187,0xffffff},{148,1167,0xb3b5b7},{146,1167,0xffffff},{716,1167,0xf4f5f6},{718,1167,0xffffff},{703,525,0x999999},{414,774,0xffffff},{504,966,0xffffff},{323,966,0xffffff}} } z旋_A箭1 = {175,1167} z旋截屏1 = {222, 700, 608, 1083} z旋_路程full1 = 717-229 z旋_刷新1 = {173,1256} z旋_关闭1 = {703,525} -- 旋码 验证中 p旋码验证中 = {{112,1166,0xc2edd8},{2,2,0x7f7f7f}, {112,1134,0xc2edd8},{112,1200,0xc2edd8},{122,1210,0xc2edd8},{122,1163,0xc2edd8},{122,1125,0xc2edd8},{122,1122,0xffffff},{108,1166,0xffffff},{703,525,0x999999},{704,526,0x999999}} -- 旋码 叉叉 p旋码2 = { {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99}, --旋码3 --{{646,313,0x000000},{646,311,0x797979},{644,313,0x797979},{639,306,0x000000},{654,321,0x000000},{656,323,0xffffff},{166,751,0x000000},{155,738,0x000000},{155,763,0x000000},{182,715,0xebebeb}, {378,705,0xffffff},{378,734,0xf8f8f8},{619,722,0xf8f8f8}, region={145, 296, 666, 773}, sim=95}, } z旋_A箭2 = {155,750} z旋截屏2 = {204, 357, 545, 698} z旋截屏2_small = {270, 424, 479, 631} z旋_路程full2 = 662-215 z旋_刷新2 = {590,824} z旋_关闭2 = {646,313} p旋码3 = { --旋码3 {{646,313,0x000000},{646,311,0x797979},{644,313,0x797979},{639,306,0x000000},{654,321,0x000000},{656,323,0xffffff},{166,751,0x000000},{155,738,0x000000},{155,763,0x000000},{182,715,0xebebeb}, {378,705,0xffffff},{378,734,0xf8f8f8},{619,722,0xf8f8f8}, region={145, 296, 666, 888}, sim=95}, --旋码3(3) {{646,410,0x000000},{646,408,0x797979},{644,410,0x797979},{639,403,0x000000},{639,418,0x000000},{644,413,0x000000},{647,413,0x797979},{649,413,0x000000},{160,845,0x565656},{137,848,0x000000}, region={127,296,659,888}, sim=98} } z旋_A箭3 = {155,750} z旋截屏3 = {204, 357, 545, 698} z旋截屏3_small = {270, 424, 479, 631} z旋_路程full3 = 662-215 z旋_刷新3 = {590,824} z旋_关闭3 = {646,313} --滑块 p滑块 = { {{646,294,0x000000},{639,287,0x000000},{643,295,0xffffff},{643,298,0x000000},{639,303,0x000000},{637,305,0xffffff},{209,293,0x000000},{209,297,0x000000},{209,302,0x000000},{209,309,0x000000}, {165,749,0x000000},{159,749,0x000000},{150,749,0x000000},{137,749,0x000000},{134,749,0xebebeb},{157,745,0xebebeb},{157,740,0x000000},{155,737,0x000000},{152,735,0xebebeb},{155,761,0x000000}, region={124,277,656,888}, sim=90}, --2026-01-12 {{646,294,0x000000},{639,287,0x000000},{637,285,0xffffff},{656,285,0xffffff},{654,287,0x000000},{651,295,0xffffff},{654,303,0x000000},{656,305,0xffffff},{637,304,0xffffff},{639,303,0x000000}, {165,749,0x000000},{170,749,0xebebeb},{138,749,0x000000},{130,749,0xebebeb},{155,749,0x000000},{155,744,0xebebeb},{155,738,0x000000},{155,754,0xebebeb},{155,760,0x000000}, region={120,275,666,888}, sim=90 } } z滑_A箭 = {150,749} --749-294 z滑截屏 = {88,360, 660,680} --360-294 680-294 z滑_刷新 = {590,824} --824-294 z滑_关闭 = {646,294} -- --{ "code": 1, "message": "", "data": { "滑块": { "X坐标值": 53, "Y坐标值": 224 }, "缺口": { "X坐标值": 240, "Y坐标值": 228 } } } --滑块 main 103 p滑块main = {{638,398,0x999999},{639,399,0x999999},{639,400,0xadadad},{637,399,0xadadad},{638,397,0xadadad},{640,398,0xadadad},{636,398,0xf8f8f8},{636,396,0x999999},{174,850,0xb3b5b7},{129,922,0x505050}, region={119,266,650,960}, sim=98} z滑m_A箭 = {150,850} --850-398 z滑m截屏 = {99,459, 650,802} --459-398 802-398 z滑m_刷新 = {118,926} --926-398 z滑m_关闭 = {638,398} -- -- 打码 点相同 正常 / 有数字键盘弹出 p相同码 = Demo z同截屏1 = {113, 700, 713, 1070} z同_刷新1 = {191,1113} z同_关闭1 = {703,574} p点相同不完全1 = Demo -- 打码 点相同2 20250715 叉+已加载+按钮灰 p相同码2 = { {{646,282,0x000000},{639,275,0x000000},{643,275,0xffffff},{654,275,0x000000},{654,280,0xffffff},{654,290,0x000000},{650,290,0xffffff},{639,290,0x000000},{639,286,0xffffff},{636,273,0xffffff}, {95,335,0xf3f3f3},{97,332,0xf3f3f3},{87,332,0xffffff},{653,333,0xf5f5f2},{661,331,0xffffff},{661,715,0xffabbb},{664,715,0xffffff},{210,743,0xffabbb},{88,769,0xffabbb},{85,769,0xffffff}, {134,829,0x000000}, region={75,260,674,1000}, sim=98}, --2026-02-22 {{646,395,0x000000},{639,387,0x000000},{654,387,0x000000},{654,403,0x000000},{639,403,0x000000},{642,395,0xffffff},{651,395,0xffffff},{646,391,0xffffff},{647,399,0xffffff}, {98,449,0xf2f2f2},{89,442,0xffffff}, {88,836,0xffabbb},{85,836,0xffffff},{359,816,0xffabbb},{359,812,0xffffff},{661,857,0xffabbb},{664,857,0xffffff},{268,892,0xffabbb},{268,895,0xffffff}, {222,853,0xffabbb},{529,854,0xffabbb},{92,819,0xffabbb},{88,816,0xffffff}, region={75,180,674,1000}, sim=98 } } z同截屏2 = {90, 0+48, 660, 0+402} z同_刷新2 = {590,0+543} z同_关闭2 = {646,0} z同_确认2 = {356,0+457} p点相同不完全2 = Demo --20250510 p91Skip同步 = Demo p92弹窗skip同步 = {"Skip","Skip finding", "Find friends"} p93Done = Demo p98_1_SkipFaceB = {{190,1262,0x000000},{38,1233,0xf2f2f2},{190,1247,0xf2f2f2},{190,1271,0x000000},{190,1274,0xf2f2f2},{364,1261,0xf2f2f2},{373,1261,0xffffff},{385,1261,0xfe2c55},{495,1216,0xfe2c55},{679,1297,0xfe2c55}, region={28,1206,689,1307}, sim=98} p98_2_SkipFaceB = {242,826} p98_3_Xyfriends = {{692,83,0x000000},{692,80,0xa8a8a8},{696,80,0x000000},{696,83,0xa8a8a8},{696,87,0x000000},{693,87,0xa8a8a8},{725,1242,0xffffff},{708,1230,0xf2f2f2},{345,1266,0xf2f2f2},{339,1271,0x000000}, region={329,70,735,1281}, sim=98} p99tk欢迎页 = { {{140,1250,0xfe2c55},{80,1207,0xfe2c55},{80,1204,0xffffff},{33,1255,0xfe2c55},{30,1255,0xffffff},{667,1300,0xfe2c55},{424,701,0xfe5d7d},{336,558,0x65d9d5},{260,586,0xfe5d7d}, sim=99, region={20, 548, 677, 1310}}, --(2) {{195,1253,0xfe2c55},{42,1211,0xfe2c55},{710,1290,0xfe2c55},{617,1249,0xfe2c55},{72,1299,0xfe2c55},{431,839,0xfe5d7d},{365,732,0x000000},{362,717,0x65d9d5},{259,667,0xfe5d7d},{234,651,0x65d9d5}, sim=99, region={32, 641, 720, 1309}}, } --p10main暗 (2)弹窗 p99语言Cancel = { -- {{418,871,0x000000},{418,866,0x000000},{418,862,0x000000},{418,877,0x000000},{418,885,0xffffff},{418,855,0xffffff},{418,824,0xe3e4e5},{418,732,0xe3e4e5},{374,640,0xe3e4e5},{299,547,0xe3e4e5}, region={289,537,428,895}, sim=98}, } p101弹窗Account_status_OK = { {"OK", "Account status"}, {"OK", "logged out", "Account status"} --{{386,814,0x000000},{393,807,0x000000},{391,814,0xffffff},{394,826,0x000000},{390,820,0x000000},{384,825,0xffffff},{380,826,0x000000},{381,817,0x000000},{380,807,0x000000},{380,803,0xffffff}, {355,816,0x000000},{359,816,0xffffff},{368,816,0xffffff},{372,816,0x000000},{363,806,0x000000},{363,810,0xffffff},{363,823,0xffffff},{363,826,0x000000},{98,769,0xe0e0e0},{651,769,0xe0e0e0}, sim=99, region={88, 700, 661, 850}}, -- (2) --{{381,784,0x000000},{381,774,0x000000},{381,792,0x000000},{381,796,0xffffff},{381,769,0xffffff},{386,781,0x000000},{384,778,0xffffff},{385,786,0xffffff},{389,786,0x000000},{393,792,0x000000}, {356,777,0x000000},{360,779,0xffffff},{372,779,0x000000},{368,780,0xffffff},{363,790,0xffffff},{363,793,0x000000},{107,735,0xe0e0e0},{283,735,0xe0e0e0},{481,735,0xe0e0e0},{651,735,0xe0e0e0}, sim=99, region={97, 700, 661, 850}}, } p101账号status = { {"Account status", "logged out", "OK"} --{{237,530,0x000000},{232,547,0x000000},{240,547,0x000000},{247,547,0x000000},{253,547,0xffffff},{258,547,0x000000},{272,539,0x000000},{276,544,0xffffff},{281,546,0x000000},{382,531,0x000000}, sim=99, region={222, 500, 392, 600}}, } p102足迹save= { {{693,285,0x000000},{693,282,0x9e9e9e},{690,285,0x9f9f9f},{683,275,0x000000},{606,360,0x161823},{610,361,0xf1f1f2},{602,358,0xffffff},{517,275,0x161823},{523,278,0xf1f1f2},{523,284,0xffffff}, region={507, 265, 703, 371}, sim=95}, } p102足迹save点 = { {"Save", "Viewer history turned on"}, {"Confirm", "Viewer history"}, } p103叉掉菜单 = { -- 103英 {{783,1021,0x000000},{783,1018,0xa7a7a7},{780,1021,0xa8a8a8},{773,1011,0x000000},{771,1009,0xffffff},{393,1108,0x65d9d5},{393,1160,0x65d9d5},{492,1176,0xfe5d7d},{335,1192,0xfe5d7d},{418,1130,0x000000}, sim=99, region={325, 900, 793, 1250}}, --103马 {{783,916,0x000000},{783,913,0xa7a7a7},{787,920,0x000000},{787,916,0xa8a8a8},{784,920,0xa8a8a8},{780,917,0xa7a7a7},{780,913,0x000000},{492,1076,0xfe5d7d},{374,1021,0x65d9d5},{248,1646,0xfe2c55}, region={238, 903, 797, 1656}}, } --"TikTok" Wants to Use "google.com" to Sign In p103弹窗cancel={ {"Cancel", "Continue", "Log in to TikTok"} } --Sign in with your Apple ID p103弹窗Close={ {"Close", "Settings", "Sign in with your Apple ID"} } p104弹窗弃号= { --104马 {{375,1661,0x236b74},{408,1667,0x7c7c7c},{413,1670,0x1f2024},{454,1678,0x7a2841}, {430,1149,0x595959},{430,1152,0xffffff},{430,1155,0x595959},{411,1175,0x595959},{411,1166,0x595959},{411,1155,0x595959},{411,1152,0xffffff},{349,1157,0x595959},{347,1153,0xffffff},{344,1150,0x595959}, {168,919,0xffffff},{168,920,0xe0e0e0},{506,1015,0xffffff},{506,1016,0xe0e0e0},{681,1111,0xffffff},{681,1112,0xe0e0e0},{255,1054,0x000000},{404,983,0x010101},{510,869,0x010101}, sim=99, region={160, 800, 700, 1700}}, } p105弹窗Dont={ {{231,927,0x0a61ff},{227,931,0xebebeb},{159,922,0x0a61ff},{159,942,0x0a61ff},{276,921,0x0a61ff},{276,917,0xebebeb},{276,942,0x0a61ff},{276,946,0xebebeb},{433,948,0x0a61ff},{596,930,0x0a61ff}, region={149, 900, 606, 988}, sim=99}, } p106叉掉菜单= { --106英 {{771,1150,0x000000},{772,1151,0x000000},{771,1147,0xa7a7a7},{775,1150,0xa8a8a8},{772,1154,0xa8a8a8},{768,1151,0xa7a7a7},{66,1558,0xfe2c55},{153,1518,0xfe2c55},{757,1605,0xfe2c55},{760,1608,0xffffff}, sim=99, region={56, 1137, 785, 1618}}, } p107叉掉菜单= {{0,0,0xff33ff},{1,1,0x00ff00}, region={0,0, 1,1}, sim=99} p110登录另一个 = { {{347,762,0x000000},{347,758,0x000000},{346,754,0xf2f2f2},{347,768,0x000000},{350,768,0xf2f2f2},{343,768,0xf2f2f2},{348,776,0x000000},{105,608,0xffffff},{105,609,0xe3e3e5},{105,610,0xe3e3e5}, {105,611,0xffffff},{643,608,0xffffff},{643,609,0xe3e3e5},{643,610,0xe3e3e5},{643,611,0xffffff},{286,729,0xf2f2f2},{445,801,0xf2f2f2},{255,689,0xffffff},{501,841,0xffffff}, region={95,598,653,851}, sim=98} } p111用账号登录 = { -- 111 绿 {{595,465,0x10a2c5},{601,465,0x10a2c5},{599,458,0xffffff},{613,465,0x10a2c5},{618,465,0x10a2c5},{703,454,0xffffff},{628,465,0x10a2c5},{633,465,0x10a2c5},{653,465,0x10a2c5},{679,465,0x10a2c5}, sim=99, region={575, 400, 777, 600}}, } p112切换去账号栏 = { {{528,154,0xffffff}, {370,205,0x161823},{370,202,0xffffff},{373,205,0xffffff},{373,207,0xd0d0d3},{370,207,0x161823},{81,206,0x161823},{8,207,0xd0d0d3},{8,206,0xffffff},{743,207,0xd0d0d3},{743,206,0xffffff}, region={0, 140, 749, 217}, sim=99}, --(2) {{528,154,0xffffff}, {370,205,0x000000},{370,202,0xffffff},{373,205,0xffffff},{373,207,0xd3d3d3},{370,207,0x000000},{81,206,0x000000},{8,207,0xd3d3d3},{8,206,0xffffff},{743,207,0xd3d3d3},{743,206,0xffffff}, region={0, 140, 749, 217}, sim=99}, } p113已在账号栏 = { {{376,205,0x161823},{376,202,0xffffff},{376,207,0x161823},{376,208,0xffffff},{373,207,0xd0d0d3},{373,205,0xffffff},{73,206,0xffffff},{73,207,0xd0d0d3},{699,206,0x161823},{744,207,0xd0d0d3}, region={63, 192, 749, 218}, sim=99}, --(2) {{376,205,0x000000},{376,202,0xffffff},{376,207,0x000000},{376,208,0xffffff},{373,207,0xd3d3d3},{373,205,0xffffff},{73,206,0xffffff},{73,207,0xd3d3d3},{699,206,0x000000},{744,207,0xd3d3d3}, region={63, 192, 749, 218}, sim=99}, --(3) {{376,205,0x17181d},{376,207,0x17181d},{376,208,0xffffff},{376,203,0xfeffff},{373,207,0xcccdcf},{373,206,0xf8f9fb},{373,208,0xffffff},{745,207,0xcfcfcf},{6,207,0xcfcfcf}, region={0, 192, 749, 218}, sim=99}, } p113b账号栏加载异常 = {{273,505,0x808080}, {370,205,0x000000},{370,202,0x808080},{370,207,0x000000},{370,209,0x808080},{373,207,0x6a6a6a},{373,205,0x808080},{373,209,0x808080},{231,231,0x808080},{191,83,0x808080},{564,78,0x808080}, {317,1260,0xffffff},{451,1293,0xffffff},{551,1277,0xced1d6},{155,1280,0xced1d6},{199,1173,0xffffff}, region={145,68,574,1303}, sim=98} p113未输入账号 = { {{373,314,0x7e7e7e},{373,313,0x7e7e7e},{373,315,0x7e7e7e},{392,314,0x7e7e7e},{392,317,0x7e7e7e},{392,320,0x7e7e7e},{388,317,0xf2f2f2},{379,310,0xf2f2f2}, region={363, 300, 402, 330}, sim=99}, --(2) {{160,312,0x7e7e7e},{160,301,0x7e7e7e},{160,297,0xf2f2f2},{160,321,0x7e7e7e},{160,324,0xf2f2f2},{145,313,0x7e7e7e},{149,313,0xf2f2f2}, region={135, 287, 170, 334}, sim=99}, --(3)(4) {{359,350,0xababab},{359,343,0xaeaeae},{359,340,0xffffff},{359,356,0xababab},{359,359,0xffffff},{331,349,0xababab}, region={210, 330, 369, 369}, sim=95}, } p113粘贴 = {{87,235,0x000000},{89,271,0x000000},{80,263,0x000000},{98,263,0x000000},{105,255,0x000000},{73,255,0x000000},{25,242,0x000000},{148,187,0x000000},{139,219,0x000000},{50,207,0x000000}, region={15,170,205,300}, sim=98} p114账号已输入x = {{632,307,0xc2c2c2},{632,311,0xf2f2f2},{632,317,0xc2c2c2},{635,314,0xf2f2f2},{647,312,0xc2c2c2},{632,297,0xc2c2c2},{618,312,0xc2c2c2},{632,326,0xc2c2c2},{612,311,0xf2f2f2},{654,311,0xf2f2f2}, region={602,250,664,400}, sim=98} p114账号已输入 = { --{{110,310,0x000000},{110,311,0x000000},{110,312,0x000000},{110,282,0xf2f2f2},{110,337,0xf2f2f2}, region={86, 272, 236, 347}, sim=99}, {{217,734,0xfe2c55},{100,695,0xfe2c55},{68,734,0xfe2c55},{568,731,0xfe2c55},{680,765,0xfe2c55}, region={58, 500, 690, 1000}, sim=99}, } p114_2账号不存在 = Demo p114_2红字异常 = { --字 {{83,450,0xda3123},{83,451,0xda3123},{83,452,0xda3123}, region={60,300,500,550}, sim=98}, --线 {{150,451,0xff4c3a},{151,451,0xff4c3a},{152,451,0xff4c3a}, {452,451,0xff4c3a}, region={60,300,500,550}, sim=98}, --背景红标 {{75,450,0x6d2a24},{75,451,0x6d2a24},{75,452,0x6d2a24}, region={65,436,85,475}, sim=98} } p114_3弹窗Safety = {{423,931,0xe8e8e8},{421,935,0xe8e8e8},{420,932,0xe8e8e8},{417,937,0x222222},{417,931,0x222222},{417,922,0x222222},{464,922,0x222222},{464,932,0x222222},{464,939,0x222222},{467,937,0xe8e8e8}, sim=99, region={407, 912, 477, 949}} p114_4红字Maxattempts = {{79,492,0xff4c3a},{79,493,0xff4c3a},{79,494,0xff4c3a},{79,495,0xff4c3a},{79,451,0x000000}, sim=99, region={69, 441, 626, 505}} p114_5Timeout = {{113,387,0xda3123},{111,387,0xda3123},{108,387,0xda3123},{117,387,0xda3123},{119,387,0xda3123},{113,390,0xda3123},{113,394,0xda3123},{113,399,0xda3123},{113,402,0xda3123},{110,389,0xffffff}, {108,389,0xffffff},{117,389,0xffffff},{119,389,0xffffff},{116,392,0xffffff},{116,398,0xffffff},{111,400,0xffffff},{111,394,0xffffff}, region={100,377,124,412}, sim=98} p114_6按钮不可点 = {{252,567,0xffabbb},{156,528,0xffabbb},{65,580,0xffabbb},{500,611,0xffabbb},{644,557,0xffabbb},{530,560,0xffabbb},{679,590,0xffabbb}, region={55,426,689,933}, sim=98} p115密码未输入 = { {{224,358,0x6a6a6a},{225,349,0x6a6a6a},{225,369,0x6a6a6a},{225,372,0xf2f2f2},{225,345,0xf2f2f2},{632,361,0x7e7e7e},{637,355,0x7e7e7e},{636,362,0xf2f2f2},{623,363,0x7e7e7e},{532,760,0xfeaabb}, region={214, 335, 647, 770}, sim=99}, -- 115(2) {{223,363,0x6a6a6a},{223,354,0x6a6a6a},{223,350,0xf2f2f2},{624,368,0x7e7e7e},{637,360,0x7e7e7e},{634,370,0x7e7e7e},{630,371,0xf2f2f2},{585,749,0xfeaabb},{148,765,0xfeaabb}, region={138, 340, 647, 775}, sim=99}, -- 115(3) {{192,381,0x707070},{192,372,0x707070},{192,369,0xffffff},{192,391,0x707070},{192,394,0xffffff},{650,389,0xadadad},{642,392,0xffffff},{638,393,0xadadad},{653,385,0xffffff},{655,375,0xadadad}, region={182,359,665,404}, sim=98} } p116密码已输入 = { {{199,756,0xfe2c55},{559,760,0xfe2c55},{139,719,0xfe2c55},{139,716,0xffffff},{65,778,0xfe2c55},{62,778,0xffffff},{684,769,0xfe2c55},{687,769,0xffffff},{632,361,0x7e7e7e},{548,359,0x7e7e7e}, {563,344,0x7e7e7e},{575,357,0x7e7e7e},{563,359,0xf2f2f2},{618,355,0xf2f2f2},{615,361,0x7e7e7e}, region={52, 334, 697, 788}, sim=99}, } p116密码已输入1 = { {{632,361,0x7e7e7e},{548,359,0x7e7e7e}, {563,344,0x7e7e7e},{575,357,0x7e7e7e},{563,359,0xf2f2f2},{618,355,0xf2f2f2},{615,361,0x7e7e7e}, region={540, 334, 642, 500}, sim=99}, --116(3) 对应 115(3) {{561,383,0xafb0b4},{570,382,0xffffff},{570,372,0xafb0b4},{579,383,0xafb0b4},{570,428,0xffffff}, {648,384,0xadadad},{638,392,0xadadad}, region={555,362,658,450}, sim=98} } p116密码已输入2 = {{199,756,0xfe2c55},{559,760,0xfe2c55},{139,719,0xfe2c55},{139,716,0xffffff},{65,778,0xfe2c55},{62,778,0xffffff},{684,769,0xfe2c55},{687,769,0xffffff}, region={52, 510, 697, 1000}, sim=99} p116_2账号不存在 = { {{78,510,0xda3123},{71,525,0xda3123},{88,526,0xda3123}, sim=99, region={61, 500, 98, 536}} } p116_3Timeout = Demo p117帐密同登 = { {{376,205,0x161823},{373,205,0xffffff},{373,207,0xd0d0d3},{376,207,0x161823},{376,209,0xffffff},{376,202,0xffffff},{114,395,0x000000},{114,394,0xffffff},{114,515,0x000000},{114,514,0xffffff}, sim=98, region={104, 192, 386, 525}}, --118(2) {{376,205,0x000000},{373,205,0xffffff},{373,207,0xd3d3d3},{376,207,0x000000},{376,209,0xffffff},{376,202,0xffffff},{114,395,0x000000},{114,394,0xffffff},{114,515,0x000000},{114,514,0xffffff}, sim=98, region={104, 192, 386, 525}}, } --p117未输入账号 = {{295,406,0xadadad},{295,450,0xffffff},{295,451,0x000000}, sim=99, region={285, 396, 305, 461}} p117未输入账号 = {{295,402,0xadadad},{295,405,0xadadad},{295,411,0xadadad},{295,416,0xffffff},{295,397,0xffffff},{298,405,0xffffff},{301,405,0xadadad},{295,447,0xffffff},{295,451,0x000000}, sim=99, region={285, 386, 305, 461}} p118密码未输入 = {{192,464,0xadadad},{192,468,0xadadad},{192,472,0xadadad},{192,512,0xffffff},{192,515,0x000000}, region={182,454,202,525}, sim=98} p119帐密已输入 = {{246,752,0xfe2c55},{473,728,0xfe2c55},{576,777,0xfe2c55},{674,746,0xfe2c55},{131,715,0xfe2c55},{74,754,0xfe2c55},{166,788,0xfe2c55}, sim=99, region={64, 666, 684, 798}} p120登录报错 = { {{113,505,0xda3123},{113,507,0xda3123}, sim=99, region={60, 455, 300, 1000}}, } p125Request封禁 = { {{400,399,0x020203},{403,399,0xdfdfe0},{403,397,0xf5f5f5},{400,397,0x000000},{400,394,0xf5f5f5},{497,361,0x6b6b6b},{174,366,0x000000},{178,1657,0xfe2c55},{41,1633,0xfe2c55},{38,1633,0xf5f5f5}, sim=99, region={28, 351, 507, 1667}}, --125(2) {{400,397,0x000000},{403,397,0xf5f5f5},{403,399,0xdfdfe0},{400,399,0x020203},{400,394,0xf5f5f5},{403,401,0xf5f5f5},{41,267,0x000000},{54,253,0x000000},{79,1622,0xfe2c55},{761,1688,0xfe2c55}, sim=99, region={31, 243, 771, 1698}}, --125(3) {{400,397,0x000000},{403,397,0xf5f5f5},{403,399,0xdfdfe0},{400,399,0x020203},{400,394,0xf5f5f5},{403,401,0xf5f5f5},{41,267,0x000000},{54,253,0x000000},{66,1660,0xf8a4b5},{747,1666,0xf8a4b5}, sim=99, region={31, 243, 771, 1698}}, } p123点赞白 = { --123 {{766,1021,0xf0f0f0},{766,1047,0xf0f0f0},{776,1041,0xf0f0f0},{757,1041,0xf0f0f0},{747,1030,0xf0f0f0},{758,1030,0xf0f0f0},{787,1030,0xf0f0f0},{792,1022,0xf0f0f0},{781,1022,0xf0f0f0},{762,1022,0xf0f0f0}, {741,1022,0xf0f0f0},{740,1013,0xf0f0f0},{759,1013,0xf0f0f0},{787,1013,0xf0f0f0},{793,1013,0xf0f0f0},{778,999,0xf0f0f0},{754,999,0xf0f0f0},{766,1004,0xf0f0f0}, sim=90, region={738, 900, 795, 1060}} } p124Notnow_savelogin = { -- {"Not now","Save login"}, --124(2) {{210,874,0x595959,80},{210,870,0x595959,80},{210,879,0x595959,80},{211,887,0x595959,80},{214,888,0x595959,80},{214,885,0xffffff},{214,890,0xffffff},{210,867,0xffffff},{208,877,0xffffff},{212,881,0xffffff}, {375,875,0xe1e1e1,90},{375,852,0xe1e1e1,90},{375,894,0xe1e1e1,90},{455,873,0x000000},{562,894,0x000000},{562,890,0xffffff},{559,886,0x000000},{576,868,0x000000},{576,871,0xffffff},{576,874,0x000000}, region={198,842,586,904}, sim=98}, {{211,874,0x474747},{210,870,0x474747},{210,867,0xffffff},{210,884,0x474747},{213,888,0x474747},{217,888,0xffffff},{213,891,0xffffff},{183,830,0xf1f1f2},{371,834,0xffffff},{375,853,0xe4e4e5}, {375,895,0xe4e4e5},{379,895,0xffffff},{531,868,0x000000},{531,877,0x000000},{531,887,0x000000},{531,890,0xffffff},{531,840,0xffffff},{531,830,0xf1f1f2}, region={173, 800, 541, 960}, sim=90}, } --弹窗 banned p126弹窗banned = { {{323,943,0x595959},{323,952,0x595959},{323,962,0x595959},{345,949,0x595959},{345,957,0x595959},{345,962,0x595959},{345,945,0xffffff},{97,905,0xe0e0e0},{97,904,0xffffff},{97,809,0xe0e0e0}, {97,808,0xffffff},{97,713,0xe0e0e0},{97,712,0xffffff},{326,764,0x000000},{227,866,0x000000},{419,646,0x000000},{207,394,0x000000},{227,394,0x000000},{217,400,0xffffff},{217,406,0x000000}, {498,470,0x000000},{498,445,0x000000},{538,402,0x000000},{528,407,0x000000},{527,416,0x000000},{540,413,0x000000},{359,445,0x000000},{360,470,0x000000},{252,445,0x000000},{250,470,0x000000}, region={87,384,550,972}, sim=98}, --ocr {"Dismiss", "Your account","banned"}, -- {"Request another review", "banned"}, } --弹窗 Changes to our Terms p127弹窗Agree= {{345,1003,0x000000},{340,1000,0xffffff},{338,991,0x000000},{335,1002,0x000000},{332,1010,0x000000},{251,1049,0xe0e0e0},{255,1087,0x000000},{256,1106,0x000000},{217,953,0xe0e0e0},{196,250,0x000000}, region={186,240,355,1116}, sim=98} p127弹窗Agree = Demo --tk shop select p130personalSelect = { --(2) {{370,839,0xfe2c55},{370,831,0xfe2c55},{370,827,0xf8f8f8},{370,851,0xfe2c55},{370,854,0xf8f8f8},{366,851,0xf8f8f8},{366,838,0xf8f8f8},{373,834,0xf8f8f8},{373,846,0xf8f8f8},{332,836,0xfe2c55}, {105,792,0xdadada},{360,792,0xdadada},{637,792,0xdadada}, region={95,600,647,1324}, sim=98}, --(1) {{377,1051,0xfe2c55},{373,1051,0xf8f8f8},{370,1039,0xfe2c55},{370,1035,0xf8f8f8},{370,1047,0xfe2c55},{370,1059,0xfe2c55},{370,1062,0xf8f8f8},{389,1051,0xfe2c55},{220,1000,0xdadada},{517,1000,0xdadada}, region={210,600,527,1324}, sim=98}, --(3) {{369,790,0xfe2c55},{370,782,0xfe2c55},{370,778,0xffffff},{370,801,0xfe2c55},{370,804,0xffffff},{366,794,0xffffff},{363,794,0xfe2c55},{351,794,0xfe2c55},{357,797,0xffffff},{357,801,0xfe2c55}, {113,743,0xe3e4e5},{325,743,0xe3e4e5},{622,743,0xe3e4e5}, region={103,600,632,1324}, sim=98} } --Verify it's really you p136Verify = {"Verify it's really you"} p136Verify_radio ={ --1 {{627,454,0xffffff},{627,433,0xe3e3e4},{606,456,0xe3e3e4},{646,467,0xe3e3e4},{682,451,0xffffff},{684,451,0xe0e0e0},{529,1185,0xffabbb}, region={519,423,694,1195}, sim=98}, --2 {{631,431,0xffffff},{641,413,0xe3e3e4},{643,451,0xe3e3e4},{613,424,0xe3e3e4},{380,371,0xe0e0e0},{264,1187,0xffabbb},{63,1163,0xffabbb},{679,1174,0xffabbb}, region={53,360,689,1197}, sim=98}, --3 2025-12-16 {{632,461,0xffffff},{632,441,0xe3e3e4},{613,470,0xe3e3e4},{650,475,0xe3e3e4},{113,467,0xa8a8a8},{113,472,0xffffff},{113,477,0xa8a8a8},{97,467,0xa8a8a8},{98,464,0xffffff},{100,460,0xa8a8a8}, {566,1187,0xffabbb},{192,1189,0xffabbb}, region={87,431,660,1210}, sim=98 }, --4 2025-12-16 radio+mail {{632,461,0xffffff},{632,441,0xe3e3e4},{650,475,0xe3e3e4},{615,474,0xe3e3e4},{113,468,0xa8a8a8},{113,472,0xffffff},{113,476,0xa8a8a8},{128,460,0xa8a8a8},{129,464,0xffffff},{130,467,0xa8a8a8}, {523,1187,0xffabbb},{198,1191,0xffabbb}, region={103,431,660,1210}, sim=98 }, --5 2025-02-22 radio+phone {{632,431,0xffffff},{632,411,0xe3e3e4},{654,432,0xe3e3e4},{633,454,0xe3e3e4},{611,432,0xe3e3e4},{622,421,0xffffff},{618,417,0xe3e3e4},{106,420,0xa8a8a8},{106,455,0xa8a8a8},{102,436,0xa8a8a8}, region={92,390,664,500}, sim=98 } } p137Verify_Next = { --1 {{529,1185,0xfe2c55}, {627,454,0xfe2c55},{627,433,0xfe2c55},{627,437,0xffffff},{646,467,0xfe2c55},{682,451,0xffffff},{684,451,0xe0e0e0}, region={519,423,694,1195}, sim=98}, --2 {{270,1185,0xfe2c55},{268,1290,0x707070},{675,1181,0xfe2c55},{440,1134,0xffffff},{380,371,0xe0e0e0},{631,430,0xfe2c55},{622,419,0xffffff},{619,416,0xfe2c55},{640,443,0xfe2c55},{643,446,0xffffff},{646,449,0xfe2c55}, region={258,406,685,1300}, sim=98}, -- {"Next", "Request support", "Verify identity"} } p138Verify_Code6 = { --1 {{597,458,0x8a8b91},{594,458,0xffffff},{630,458,0x8a8b91},{684,458,0x8a8b91},{687,458,0xffffff},{651,457,0xffffff},{581,458,0xffffff},{577,458,0x8a8b91},{577,457,0xffffff},{491,458,0x8a8b91}, region={481,360,697,468}, sim=98}, -- (2) {{600,413,0x8a8b91},{640,413,0x8a8b91},{682,413,0x8a8b91},{693,413,0xffffff},{588,413,0xffffff},{573,413,0x8a8b91},{536,413,0x8a8b91},{495,413,0x8a8b91},{482,413,0xffffff},{466,413,0x8a8b91}, region={456,360,703,468}, sim=98}, -- (4) {{672,444,0x95969b},{672,442,0xffffff},{675,444,0xffffff},{671,446,0xffffff},{589,444,0x95969b},{585,444,0xffffff},{591,442,0xffffff},{591,446,0xffffff},{568,444,0x95969b},{487,444,0x95969b}, region={477,422,685,466}, sim=98}, {"2%-step verification", "Authenticator", "Your code was sent", ocr=2} } p139Verify2_Code未 = { --(1) (2) {{65,440,0xf2f2f2},{62,440,0xffffff},{111,402,0xf2f2f2},{111,399,0xffffff},{155,442,0xf2f2f2},{159,442,0xffffff},{168,442,0xffffff},{171,442,0xf2f2f2},{261,442,0xf2f2f2},{264,442,0xffffff}, region={52,356,274,540}, sim=98}, {"2%-step verification", "Authenticator", "Your code was sent", ocr=2} } p138九格键盘 = {"MNO", "WXYZ"} --"PORS", "+*#" "MNO""WXYZ" p138第1格 = { --方格 {{100,412,0xf2f2f2},{69,412,0xf2f2f2},{61,412,0xffffff},{61,388,0xffffff},{67,388,0xf2f2f2},{67,447,0xf2f2f2},{61,447,0xffffff},{92,371,0xf2f2f2},{92,365,0xffffff}, region={51,300,110,600}, sim=98}, --横线 {{96,389,0xffffff},{96,429,0xffffff},{96,430,0x8a8b91},{96,431,0xffffff},{87,430,0x8a8b91},{65,430,0x8a8b91},{61,430,0xffffff},{68,428,0xffffff},{68,432,0xffffff}, region={51,300,106,600}, sim=98}, --横线 20260122 {{113,401,0xffffff},{113,441,0xffffff},{113,444,0x95969b},{78,444,0x95969b},{125,444,0x95969b},{160,444,0x95969b},{165,444,0xffffff},{73,444,0xffffff},{90,446,0xffffff},{142,446,0xffffff}, region={51,300,190,600}, sim=98 } } p139Verify2_选Auth = { {"Authenticator", "Cancel", "Select verification method"} } p139Verify2_Useanother_Email = { {"Use another method", "Email"}, {"Try another method", "Email"} } p139Verify2_选Email = { {"Email", "Cancel", "Select verification method"} } p139Verify2_Useanother_Auth = { {"Use another method", "Authenticator"}, {"Try another method", "Authenticator"} } p139Email = { --138 {{68,187,0x000000},{75,187,0x000000},{83,187,0x000000},{68,197,0x000000},{68,210,0x000000},{65,210,0xffffff},{65,197,0xffffff},{65,187,0xffffff},{70,184,0xffffff},{78,184,0xffffff}, region={55,170,93,266}, sim=98}, --138(4) {{65,185,0x000000},{71,185,0x000000},{79,185,0x000000},{65,192,0x000000},{65,199,0x000000},{65,207,0x000000}, {62,184,0xffffff},{62,192,0xffffff},{62,204,0xffffff},{65,181,0xffffff},{73,181,0xffffff},{79,181,0xffffff},{71,189,0xffffff},{79,189,0xffffff}, region={60,165,89,230}, sim=98}, --139 {{69,206,0x000000},{74,206,0x000000},{80,206,0x000000},{87,206,0x000000},{95,206,0x000000},{95,203,0xffffff},{80,203,0xffffff},{69,203,0xffffff},{69,224,0x000000},{69,248,0x000000}, region={59,193,105,266}, sim=98}, --ocr {"Email"}, {"Verify your email"}, {"Enter 6-digit code"} } p139Auth = { --138之二 {{74,185,0x000000},{71,185,0xffffff},{71,195,0x000000},{68,195,0xffffff},{68,204,0x000000},{65,204,0xffffff},{82,188,0x000000},{85,188,0xffffff},{85,198,0x000000},{89,198,0xffffff}, region={55,175,99,266}, sim=98}, --139 {{79,206,0x000000},{75,206,0xffffff},{72,216,0xffffff},{76,216,0x000000},{70,235,0x000000},{67,235,0xffffff},{63,247,0xffffff},{67,247,0x000000},{466,218,0x000000},{454,247,0x000000}, region={53,190,476,266}, sim=98}, --ocr {"Authenticator", "authenticator app"} } z左返 = {42,83} p140Verify2_Code已 = { --黑 {{648,327,0x000000},{648,326,0x000000}, region={628,300,658,500}, sim=98}, --(1) (2) {{638,446,0x000000},{638,412,0xf2f2f2},{638,481,0xf2f2f2}, region={620,340,660,540}, sim=98}, --(4) {{631,400,0x000000},{631,366,0xffffff},{631,435,0xffffff},{631,444,0x95969b},{637,444,0x95969b},{627,444,0x95969b},{631,446,0xffffff}, region={600,333,647,488}, sim=98} } p140Verify2_Code已_continue = {{233,1253,0xfe2c55},{174,1229,0xfe2c55},{85,1260,0xfe2c55},{501,1256,0xfe2c55},{599,1229,0xfe2c55},{661,1254,0xfe2c55}, region={75,700,671,1300}, sim=98} p160已Inbox = { {{564,1670,0x161823},{576,1670,0x161823},{596,1670,0x161823},{588,1679,0xffffff},{579,1679,0x161823},{569,1679,0xffffff},{376,1651,0x20d5ec},{451,1690,0xfa2d6c},{409,1666,0x161823},{414,1670,0xffffff}, sim=99, region={366, 1641, 606, 1700}} } p160消息蓝 = {{806,885,0x00add2},{809,883,0x00add2},{806,880,0x00add2},{806,874,0xf8f8f8},{809,877,0xf8f8f8},{812,883,0xf8f8f8}, find_all = true, sim=70, region={806, 600, 812, 1532}} --0f94d6 p161sent成功 = {{798,838,0x6d6d6d},{798,835,0x6d6d6d},{798,831,0xf8f8f8},{798,843,0x6d6d6d},{798,847,0x6d6d6d},{798,848,0x6d6d6d},{799,849,0x6d6d6d},{799,852,0xf8f8f8}, sim=98, region={797, 600, 800, 1532}} p162Notsent失败 = { -- Not sent {{798,907,0xff4c3a},{798,904,0xff4c3a},{798,900,0xf8f8f8},{798,911,0xff4c3a},{798,915,0xff4c3a},{799,917,0xff4c3a},{799,921,0xf8f8f8}, sim=98, region={798, 600, 800, 1515}}, -- !红 {{683,858,0xff4c3a},{683,862,0xff4c3a},{683,867,0xff4c3a},{683,854,0xf8f8f8},{683,850,0xff4c3a},{688,862,0xf8f8f8}, sim=98, region={188, 840, 734, 877}}, -- This message .... --{{137,970,0x6d6d6d},{137,974,0x6d6d6d},{137,982,0x6d6d6d},{137,984,0x6d6d6d},{137,987,0xf8f8f8},{137,967,0xf8f8f8},{799,921,0xf8f8f8},{680,974,0x6d6d6d},{680,980,0x6d6d6d},{690,985,0x6d6d6d}, sim=98, region={127, 600, 809, 1515}}, {{673,1433,0x2b5db9},{670,1424,0x2b5db9},{670,1438,0x2b5db9},{673,1438,0xf8f8f8},{677,1438,0x2b5db9},{683,1430,0x2b5db9},{683,1438,0x2b5db9},{691,1438,0x2b5db9},{691,1431,0x2b5db9},{687,1431,0xf8f8f8}, {137,1352,0x6d6d6d},{137,1359,0x6d6d6d},{137,1366,0x6d6d6d},{137,1369,0xf8f8f8},{137,1349,0xf8f8f8},{656,1475,0x6d6d6d},{656,1466,0x6d6d6d},{656,1461,0xf8f8f8},{216,1440,0x6d6d6d},{680,1356,0x6d6d6d}, sim=95, region={127, 600, 700, 1515}}, --2025-04-29 {{673,1439,0x2b5db9},{673,1435,0xf8f8f8},{670,1430,0x2b5db9},{670,1426,0xf8f8f8},{670,1436,0x2b5db9},{670,1444,0x2b5db9},{670,1447,0xf8f8f8},{625,1434,0x2b5db9},{610,1438,0x2b5db9},{560,1439,0x6d6d6d}, sim=95, region={550, 600, 683, 1515}}, } p166Done大红按钮 = { {{232,1652,0xfe2c55},{98,1613,0xfe2c55},{98,1610,0xffffff},{65,1665,0xfe2c55},{62,1665,0xffffff},{485,1698,0xfe2c55},{485,1701,0xffffff},{762,1645,0xfe2c55},{765,1645,0xffffff},{354,1770,0x000000}, sim=98, region={52, 1600, 775, 1780}} } p167叉掉Marksafe = {{755,1307,0x707070},{755,1304,0xcecece},{752,1307,0xcecece},{745,1297,0x707070},{210,1558,0xff4c3a},{598,1563,0x000000},{664,1562,0x000000},{660,1562,0xffffff},{210,1575,0xff4c3a}, sim=98, region={200, 1287, 765, 1585}} p168_StickersGotit = {{276,1646,0xfe2c55},{119,1605,0xfe2c55},{119,1602,0xffffff},{65,1639,0xfe2c55},{62,1639,0xffffff},{392,1653,0xffffff},{387,1656,0xfe2c55},{387,1661,0xffffff},{387,1770,0x000000},{439,1641,0xffffff}, {771,736,0x000000},{771,733,0xa7a7a7},{768,736,0xa8a8a8},{761,726,0x000000},{759,724,0xffffff},{384,1261,0x000000},{384,1265,0xffffff},{384,1269,0x000000}, sim=98, region={52, 714, 781, 1780}} p169_Followyfrs = {{729,371,0x000000},{721,363,0x000000},{738,363,0x000000},{738,380,0x000000},{721,380,0x000000},{725,372,0xffffff},{729,367,0xffffff},{734,371,0xffffff},{730,376,0xffffff}, {91,367,0x858585},{92,369,0xffffff},{92,372,0x858585},{92,374,0x858585},{91,376,0x858585},{91,379,0xffffff},{91,383,0x858585},{91,364,0xffffff},{91,360,0x858585},{103,371,0x858585}, sim=98, region={81, 350, 748, 493}} emoji = {"😃","😄","😁","😆","😅","😍","😇","😊","😉","🙂","😘","😗","😚","😙","😋","😝","🤑","🤗","🤠","🤓","😳","💀","🤡","👹","👺","👽","👾","🤖","😺","😹","😻","😽"} -- for k,v in pairs(kg) do -- if kg[k]["region"] == nil then -- kg[k]["region"] = {v[1][1]-10, v[1][2]-10, v[1][1]+10, v[1][2]+10} -- end -- end end if w>50 and h>104 then p20Log_Usephone = {"Use phone", "Log in to TikTok", "Don't have an account", "Sign up", ocr=2} --Don't have an account? Sign up 含有一个? 匹配不了 -- p弹窗验证打码 = { {"Verify to continue","Report a problem", oper=0, log="打码 滑块42"}, -- {"Drag the puzzle piece into place", oper=0, log="打码 滑块4"}, -- {"Drag the slider to fit the puzzle", oper=0, log="打码 旋码3"}, -- {"Select 2 objects that are the same shape", oper=0, log="打码 选2个相同", ocr=2}, -- } -- p301弹窗Reconfirmemail = {"Confirm", "Reconfirm email", "Update"} p302弹窗FinishSettingUpiPhone = {"Not Now", "Finish Setting Up iPhone", "OK"} p303弹窗Viewerhistory = { --102 {"Save", "Viewer history turned on"}, {"Confirm", "Viewer history"}, } p304弹窗ChangestoourService = {"Continue", "Changes to our Service"} p305弹窗TermsofService = { {"Continue", "Terms of Service", "Privacy Policy", "You also"}, {"Continue", "Terms of Service", "agreed to our changes", "Learn more"},} p306弹窗Agreeandcontinue = {"Agree and continue", 'By tapping "Agree and continue"'} p307弹窗Servicesnotavailable = {"Close app", "Services not available"} p308弹窗PrivacyPolicyUpdate = { {"Got it","Privacy Policy update"}, {"OK","Privacy Policy Update"},} p309弹窗Accountstatus = {"OK", "Account status"} --p101弹窗Account_status_OK p310意外_Managetheadsyousee = {"Manage the ads you see", "Manage data used for ad personalization"} --"Manage your off-TikTok data" p311弹窗TermsandConditions = {"Agree to all", "Terms and Conditions", "See details", ocr=2} p311弹窗TermsandConditions_A = {{119,308,0xffffff},{170,311,0x000000},{180,311,0x000000},{173,300,0x000000},{119,289,0xe3e3e4},{143,311,0xe3e3e4},{103,326,0xe3e3e4},{98,311,0xe3e3e4},{103,311,0xffffff}, region={88,279,190,336}, sim=98} p311弹窗TermsandConditions_C = {{513,1075,0xfe2c55},{452,1064,0xfe2c55},{367,1054,0xfe2c55},{258,1047,0xfe2c55},{137,1045,0xfe2c55},{93,1049,0xffffff},{146,1032,0xffffff}, region={83,math.floor(0.7*h),w-100,h-200}, sim=98} p313弹窗Allow_personalised_ads = {"Accept", "Allow personalised ads?", "Manage in Settings"} p314弹窗Allow_trending_content = {"Allow", "Allow trending content"} p315弹窗Remote_access = {"Got it","transfers of EEA User"} p316弹窗Community = {"Got it","Community", "Guidelines update"} p317弹窗Saveloginfornexttime = {"Not now","Save login for next time"} p318弹窗Getnotifiedof = {"Not now","Get notified of"} p318_2弹窗notifications = {"Not now","Turn on", "notifications"} p319弹窗adsettings = {"Got it","ad settings"} p320弹窗Letothersseeyou = {"Not now","Let others see you"} p321弹窗PrivacyHighlights = {"Dismiss","Privacy Highlights", "for teens"} p322弹窗SafetyVerification = {"Safety Verification","Feedback"} --Service error. Please contact us. -- 638,291,0x222222 p322弹窗X = {{638,291,0x222222},{638,289,0xb0b0b0},{639,292,0x222222},{639,291,0x222222},{638,292,0x222222},{641,291,0xababab},{639,294,0xababab},{636,292,0xb0b0b0},{629,282,0x222222},{629,301,0x222222}, region={619,272,651,311}, sim=98 } p323弹窗Verification = {"Verification","networkErrorText"} -- 646,393,0x000000 p323弹窗X = {{646,393,0x000000},{647,393,0x000000},{647,394,0x000000},{646,394,0x000000},{646,391,0x797979},{649,393,0x7a7a7a},{647,396,0x797979},{644,394,0x797979},{639,386,0x000000},{639,401,0x000000}, region={629,376,659,411}, sim=98 } p324弹窗Findcontacts = {"Don't allow", "Find contacts", "OK"} p325弹窗Followyourfriends = {"X", "Follow your friends"} p326弹窗Remoteaccess = {"Got it", "Remote%-access"} p327弹窗Updateyourapp = {"Dismiss", "Update your app", "A new version of TikTok"} p328弹窗Youonlyhave = {"OK", "You only have", "To help your app run properly"} p329弹窗Postviewhistory = {"Save", "Post view history", "You can see which followers viewed"} p330弹窗Verifyrobot = {"Verify that you're not a robot"} p331弹窗iPhoneStorageFull = {"Not Now","iPhone Storage Full", "Settings", "You can free up space on this iPhone"} p332弹窗ReuseContentSetting = {"OK", "Reuse of content setting", "Permission settings", ocr=2} -- 视频发布时音乐不可用提示:继续发布,不进入替换音乐流程 p333弹窗MusicCantBeUsed = { {"Continue anyway", "Music can't be used"}, {"Continue anyway", "Music can’t be used"}, {"Continue anyway", "Replace music"}, } -- p401封禁banned = { -- {"Your account", "was banned"}, {"Account banned", "Appeal"} --402 } p501小火箭页面 = {{"Local Servers", "Global Routing"}, {"Shadowrocket", "Global Routing"}} p501小火箭SG = {"SG", "Global Routing"} p501小火箭JP = { {"JP", "Global Routing"}, {"ip", "Global Routing"} } p501小火箭未连接 = {"Not Connected", "Shadowrocket", "Global Routing"} p501小火箭连接中 = {"Connecting...", "Shadowrocket", "Global Routing"} p501小火箭弹窗Dismiss = {"Dismiss", "Shadowrocket"} p601Updatename_Confirm = {"Confirm","Cancel", "Update name?"} pAutoFillPasswordCancel = {"Cancel", "AutoFill Password", "Choose a password"} end end function ff(data0, content, mode) if data0 == nil then klog(" [缺数据] "..content) return false end local colors = 0 local j=1 local ver='' local data if type(data0[1][1]) == "table" then colors = #data0 end while true do if colors == 0 then data = data0 ver = "" Ix = 0 --colors序号 else data = data0[j] ver = " <"..j..">" Ix = j --colors序号 end Xin0 = -1 Yin0 = -1 local sim = 90 if data.sim == nil then else sim = data.sim end local region = {} if data.region == nil then region = {data[1][1]-8, data[1][2]-8, data[1][1]+8, data[1][2]+8} else region = {data.region[1], data.region[2], data.region[3], data.region[4]} end local xx1, yy1 = -1,-1 --xx1, yy1 = screen.find_color(data, 90) xx1, yy1 = screen.find_color(data, sim) --xx1, yy1 = screen.find_color(data, sim, region[1], region[2], region[3], region[4]) --xx1, yy1 = screen.find_color(data, sim, data.region[1], data.region[2], data.region[3], data.region[4]) if xx1 ~= -1 then Xin0 = xx1 Yin0 = yy1 if string.sub(content,1,1) ~= "#" then klog(content..ver.." "..tostring (xx1)..","..tostring (yy1)) end if mode == 1 then touch.tap(xx1, yy1) sys.msleep(500) screen.unkeep() --screen.keep() ttdog = os.time() end return xx1,yy1 end j=j+1 if j>colors then break end end return false end function ff2(data0, content, mode) if data0 == nil then klog(" [缺数据] "..content) return false end local colors = 0 local j=1 local ver='' local data resocr = {0, kw="", log="", x=-1,y=-1} if type(data0[1][1]) == "table" or type(data0[1][1]) == "string" then colors = #data0 end while true do if colors == 0 then data = data0 ver = "" Ix = 0 --colors序号 else data = data0[j] ver = " <"..j..">" Ix = j --colors序号 end if type(data[1]) == "string" then ver=ver.."_r" end --ocr识别 Xin0 = -1 Yin0 = -1 local xx1, yy1 = -1,-1 local sim = 90 if type(data[1]) == "string" then --ocr识别 resocr = {0, kw="", log="", x=-1,y=-1} if flagocr==1 or flagocr==2 then for j=1, #data do if string.match(ocrtext, data[j]) or (data.ocr==3 and string.match(ocrtext_l, data[j])) then if j == #data then --匹配成功 全部 flagocr = 2 resocr = {1, kw=data[1], x=-1,y=-1} xx1=5 yy1=5 for _, item in pairs(ocrinfo) do if type(item) == "table" and item.text and (item.text==data[1] or (data.ocr==2 and string.match(item.text, data[1])) or (data.ocr==3 and string.match(string.lower(item.text), data[1]))) then resocr.x = item.x resocr.y = item.y xx1 = item.x+10 yy1 = item.y+10 +0 break end end end else --匹配失败 break end end end else if data.sim == nil then else sim = data.sim end --local region = {} if data.region == nil then --region = {data[1][1]-8, data[1][2]-8, data[1][1]+8, data[1][2]+8} xx1, yy1 = screen.find_color(data, sim) else --region = {data.region[1], data.region[2], data.region[3], data.region[4]} xx1, yy1 = screen.find_color(data, sim, data.region[1], data.region[2], data.region[3], data.region[4]) end end --xx1, yy1 = screen.find_color(data, 90) --xx1, yy1 = screen.find_color(data, sim) --xx1, yy1 = screen.find_color(data, sim, region[1], region[2], region[3], region[4]) --xx1, yy1 = screen.find_color(data, sim, data.region[1], data.region[2], data.region[3], data.region[4]) if xx1 >0 then if resocr[1]==1 and resocr.x==-1 then --ocr坐标 没有匹配出来 klog(content..ver.." ——ocr不全") if mode ~= 1 then return true end else --if data.log then content=data.log end if string.sub(content,1,1) ~= "#" then klog(content..ver.." "..tostring (xx1)..","..tostring (yy1)) end Xin0 = xx1 Yin0 = yy1 if mode == 1 then touch.tap(xx1, yy1) screen.unkeep() sys.msleep(500) --screen.keep() local ttemp = os.time() if xx1 == tttap.x and yy1 == tttap.y and ttemp-tttap[3]<20 then tttap[2] = tttap[2]+1 tttap[3] = ttemp klog("【重复点击】"..tttap[2].." "..tttap.x..","..tttap.y) else tttap = {ttemp, 0, ttemp, x=xx1, y=yy1} ttdog = ttemp end ocrtext = "" end return true end end j=j+1 if j>colors then break end end return false end -- 视频上传音乐不可用弹窗的宽松 OCR 处理。该弹窗在不同版本中会拆分 -- 文本或改变撇号形式,因此不能只依赖一个完整字符串匹配。 function tk视频音乐不可用继续() local text = string.lower(tostring(ocrtext or "")) local has_unavailable = string.find(text, "can't be used", 1, true) or string.find(text, "can’t be used", 1, true) local has_button_text = string.find(text, "continue", 1, true) and string.find(text, "anyway", 1, true) local has_replace_music = string.find(text, "replace music", 1, true) -- 编辑页顶部一直有 Replace music 标签,必须先点右下角 Next,不能当成弹窗处理。 if has_replace_music and not has_unavailable and not has_button_text then local next_x = math.floor(w * 0.74) local next_y = math.floor(h * 0.955) klog("视频上传编辑页识别 Replace music,先点Next "..next_x..","..next_y) touch.tap(next_x, next_y) screen.unkeep() sys.msleep(800) ttdog = os.time() ocrtext = "" return true end if not has_unavailable and not has_button_text then return false end for _, item in pairs(ocrinfo or {}) do if type(item) == "table" and type(item.text) == "string" then local item_text = string.lower(item.text) if string.find(item_text, "continue", 1, true) and string.find(item_text, "anyway", 1, true) and tonumber(item.x) and tonumber(item.y) then local x, y = item.x + 10, item.y + 10 klog("视频上传 Music can't be used,OCR点 Continue anyway "..x..","..y) touch.tap(x, y) screen.unkeep() sys.msleep(500) ttdog = os.time() ocrtext = "" return true end end end -- OCR 有时会把标题和按钮拆成多行,按全文命中时使用按钮行坐标。 if has_button_text then for _, item in pairs(ocrinfo or {}) do if type(item) == "table" and type(item.text) == "string" then local item_text = string.lower(item.text) if string.find(item_text, "continue", 1, true) and tonumber(item.x) and tonumber(item.y) then local x, y = item.x + 10, item.y + 10 klog("视频上传 Continue anyway OCR兜底点击 "..x..","..y) touch.tap(x, y) screen.unkeep() sys.msleep(500) ttdog = os.time() ocrtext = "" return true end end end end -- 标题已识别但按钮行被 OCR 漏掉时,按弹窗布局比例点击底部灰色 Continue anyway。 if has_unavailable then local fallback_x = math.floor(w / 2) local fallback_y = math.floor(h * 0.92) klog("视频上传 Continue anyway OCR缺按钮,按比例兜底点击 "..fallback_x..","..fallback_y) touch.tap(fallback_x, fallback_y) screen.unkeep() sys.msleep(500) ttdog = os.time() ocrtext = "" return true end return false end function ff3(data0, content) --找多目标 if data0 == nil then klog(" [缺数据] "..content) return false end local data = data0 local sim = 90 if data.sim == nil then else sim = data.sim end if data.region == nil then result = screen.find_color(data, sim) else result = screen.find_color(data, sim, data.region[1], data.region[2], data.region[3], data.region[4]) end if #result > 0 then local c原 = #result --klog(content.." #"..c原.." "..json.encode(result)) --klog(content.." #"..c原) if #result >1 then for i=#result,2,-1 do for j= i-1, 1, -1 do if math.abs(result[j][1]-result[i][1])+ math.abs(result[j][2]-result[i][2]) < 50 then table.remove(result, i) break end end end end local c后 = #result --klog(content.." #"..c后.." "..json.encode(result)) result2 = {} for i=1, #result do if #result2 == 0 then table.insert(result2, result[i]) else for j=1, #result2 do if result[i][2] < result2[j][2] then table.insert(result2, result[i], j) break elseif j == #result2 then table.insert(result2, result[i]) end end end end local str = "" for j=1, #result2 do str = str.." ["..result2[j][1]..","..result2[j][2].."]" end klog(content.." #"..c原.."->#"..c后..str) return true else return false end end function click(x,y) touch.tap(x,y) screen.unkeep() sys.msleep(500) screen.keep() ocrtext = "" end function interv(tt, n) if tt == nil then return true elseif os.time()-tt >n then return true else return false end end function interD(cc, n) if vartk[cc] == nil then vartk[cc] = os.time() return false elseif os.time()-vartk[cc] <=n then vartk[cc] = nil return true else vartk[cc] = os.time() return false end end function interCount(cc, n) if vartk[cc] == nil then vartk[cc] = 0 return true elseif vartk[cc] < n then return true else return false end end function tmove(a1,b1,a2,b2) touch.on(a1, b1):move(a2,b2):msleep(600):off() end function klog_sys(textlog) sys.log(os.date("!%H:%M:%S ", os.time()+seczone)..textlog) end function klog(textlog) --klog_bkp sys.log(os.date("!%H:%M:%S ", os.time()+seczone)..textlog) --同时记录到sys.log if string.sub(textlog,1,1) == "#" then return --# 不记录 end --arraylog = {kloglast = '', ttlog = 0, rept = 0} if arraylog.kloglast == textlog then arraylog.rept = arraylog.rept + 1 if os.time()- arraylog.ttlog < 10 then return else --file.appends(logfile, os.date("%H:%M:%S ").."rep<"..arraylog.rept..">"..arraylog.kloglast.."\n"); file.appends(logfile, os.date("!%H:%M:%S ", os.time()+seczone).."rep<"..arraylog.rept..">"..arraylog.kloglast.."\n"); arraylog = {kloglast = textlog, ttlog = os.time(), rept = 0} end else if arraylog.rept >= 1 then file.appends(logfile, os.date("!%H:%M:%S ", os.time()+seczone).."rep<"..arraylog.rept..">"..arraylog.kloglast.."\n"); end file.appends(logfile, os.date("!%H:%M:%S ", os.time()+seczone)..textlog.."\n") arraylog = {kloglast = textlog, ttlog = os.time(), rept = 0} end end function kloghead(textlog) if loghead then else loghead = "【续上】\n" end loghead = loghead.."\n\t"..textlog end function record01(textlog) file.appends(file01, os.date("%Y/%m/%d %H:%M:%S ")..textlog.."\n") end function filewrites(path, content) for i=1,3 do local success = file.writes(path, content) if success then klog("文件写入成功 "..path) return true elseif i==3 then klog("文件写入fail "..path) sys.toast("文件写入fail "..path) sys.msleep(2000) else sys.msleep(200) end end return false end function sendfile(f,l) local b = file.reads(f) local url = "http://winder-chen.top/lualog/xxt_tk/xxtk241028.php" local boundary='---------------------------37427927640223190903331309375' local datatable = {"--"..boundary.."\r\n", 'Content-Disposition: form-data; name="uploadfile"; filename="log2.png"\r\n', 'Content-Type: image/png\r\n\r\n', b..'\r\n', '--'..boundary..'\r\n', 'Content-Disposition: form-data; name="path"'..'\r\n\r\n'..l..'\r\n', '--'.. boundary .. '--' } local data = table.concat(datatable) local headers = { ["Content-Type"] = "multipart/form-data; boundary=" .. boundary, ["Content-Length"] = #data, } local code, res_headers, body = http.post(url, 10, headers, data) if code==200 then return body --sys.alert("日志上传成功\n\n"..body, 2) end return false end function upload() local url = "http://winder-chen.top/lualog/xxt_tk/xxtk241028.php" local dir = "tk_"..os.date("!%Y%m%d-%H%M%S", os.time()+seczone) local logname = dir.."_"..string.match(Ver, "v.+")..".log" local code, res_headers, body = http.post(url, 10, {}, "func=0&filename="..dir.."&data=0") if code==200 then if body == dir then -- else --sys.alert("dir fail") os.exit() os.exit() end else --sys.alert("dir fail2") os.exit() os.exit() end sys.msleep(500) -- sendfile("/var/mobile/Media/1ferver/log/XXT_tiktok.log", dir.."/"..logname) -- local list = file.list("/var/mobile/Media/1ferver/res/") for _, name in ipairs(list) do if string.match(name, ".png") then if sendfile("/var/mobile/Media/1ferver/res/"..name, dir.."/"..name) then os.execute('rm -rf '.."/var/mobile/Media/1ferver/res/"..name) end end end end function dwload() local url = "http://winder-chen.top/lualog/xxt_tk/xxtk241028.php" local code, res_headers, body = http.post(url, 10, {}, "func=3&filename=0&data=0") if code==200 then file.writes("/var/mobile/Media/1ferver/lua/scripts/".."xxt_GGPhone.lua", body) sys.alert("脚本更新成功",3) os.exit() else sys.alert("dwload fail2\n"..code) os.exit() end end function clock校时() seczone = 3600*8 end function clean日志文件(hh) file.writes("/var/mobile/Media/1ferver/log/sys.log", " ") --清空sys.log local listfile = getList("/var/mobile/Media/1ferver/log/") local fname = "" local fcomp = os.date("!%Y%m%d-%H%M%S", os.time()+3600*(8-hh)) local tt清文件 = os.time()-5 if #listfile >10 then klog("日志文件过多 \n\t"..table.concat(listfile, "\t")) for i=1, #listfile do fname = string.match(listfile[i], "%d%d%d%d%d%d%d%d%-%d%d%d%d%d%d") --XXT_20250901-153920.log if fname and fname < fcomp then -- local ok, err = file.remove("/var/mobile/Media/1ferver/log/"..fname) -- if ok then -- --klog('删除过期日志:'..fname) -- end if os.time()-tt清文件 >= 5 then sys.toast("多余日志文件清理中....") tt清文件=os.time() end klog("删除 "..listfile[i]) os.execute("rm -rf ".."/var/mobile/Media/1ferver/log/"..listfile[i]); end end end listfile = getList("/var/mobile/Media/1ferver/res/") if #listfile >10 then klog("报错截屏文件过多 \n\t"..table.concat(listfile, "\t")) for i=1, #listfile do fname = string.match(listfile[i], "%d%d%d%d%d%d%d%d%-%d%d%d%d%d%d") --tk报错_20250901-114450_注册不识别.png if fname and fname < fcomp then if os.time()-tt清文件 >= 5 then sys.toast("报错截屏文件清理中....") tt清文件=os.time() end klog("删除 "..listfile[i]) os.execute("rm -rf ".."/var/mobile/Media/1ferver/res/"..listfile[i]); end end end end function getList(path) local a = io.popen("ls "..path); local f = {}; for l in a:lines() do table.insert(f,l) end a:close() return f end --【节点识别】 function app.views_info_old() proc_put('界面信息', '') app.eval( { bid = "com.zhiliaoapp.musically", lua = [==[ local objc = require 'objc' dispatch_sync(dispatch_get_main_queue(), function() pcall(function() local UIApp = objc.UIApplication.sharedApplication() local s = UIApp.keyWindow().recursiveDescription().UTF8String() dispatch_async(dispatch_get_work_queue(), function() proc_put("界面信息", s) -- 发送通知回脚本进程 end) end) end) ]==]}) local tm = sys.mtime() local rd = '' while sys.mtime()-tm < 1000 do -- 超时时间 1 秒 rd = proc_put('界面信息', '') if rd~='' then break end sys.msleep(10) end return rd end function views_info() while (true) do local viewinfo = app.views_info_old() if string.find(viewinfo,"界面文本1") ~= nil then sys.toast("这是界面1") end if string.find(viewinfo,"界面文本2") ~= nil then sys.toast("这是界面2") end sys.msleep(3000) end end function getVC() --不行 要注入 proc_put("vc","") app.eval{ bid = 'com.zhiliaoapp.musically', lua = [[ local objc = require 'objc' dispatch_sync(dispatch_get_main_queue(), function() topVC= objc.HTSAccountUtil.topViewController(); proc_put("vc",topVC.className().UTF8String()) end) ]], } local tm=sys.mtime() local vc="" while sys.mtime()-tm <1000 do vc=proc_put("vc","") if vc~="" then break end end return vc end function tk红字异常() if ff2(p114_2红字异常, "红字异常") then if flag红字pass == 1 then --特别情况 pass一轮 flag红字pass = 0 flag文字判断 = false return false end flag文字判断 = true return true end flag文字判断 = false return false end function tk红字判断() ocrlog() if flag字库==nil then ku = { --结束 完成 {"Incorrect", "Couldn't continue", "Unable to log in", "Maximum" }, --Unable to log in. Please update your password. --"Maximum", --队列 {"Verification code is expired or incorrect"}, --封禁 {"banned", "Account doesn't exist", "Account is currently suspended"}, --"Account" "account" --无视 flag红字pass = 1 {"Time out", "Time ovt", "Time o.t", "Please try again"}, --左上返回 {"Enter a valid code"}, --切换IP 删除旧备份 新机后 重新登录 {"different method"}, } flag字库=1 end local res = {0, nil} for i=1, #ku do for j=1, #ku[i] do if string.match(ocrtext, ku[i][j]) then res = {i, ku[i][j]} break end end if res[1]>0 then break end end if 1>2 then elseif res[1]==0 then klog("红字判断 无果") --ocrlog() elseif res[1]==1 then klog("[关键词]:"..res[2].." 【处理】结束任务") tk日志byKey(res[2]) sys.toast("[关键词]:"..res[2].." 【处理】结束任务") sys.msleep(3000) runid = 129.9 elseif res[1]==2 then klog("[关键词]:"..res[2].." 【处理】加入队列") sys.toast("[关键词]:"..res[2].." 【处理】加入队列") sys.msleep(3000) runid = 129.8 elseif res[1]==3 then klog("[关键词]:"..res[2].." 【处理】封禁") sys.toast("[关键词]:"..res[2].." 【处理】封禁") sys.msleep(3000) status_running = "forbidden" runid = 129.9 elseif res[1]==4 then if string.match(res[2], "Please try again") then c登录网络重试 = (c登录网络重试 or 0) + 1 flag红字pass = 0 flag文字判断 = false if c登录网络重试 <= 1 then klog("[关键词]:"..res[2].." 【处理】网络异常,切换IP后新机重登录 1/1") sys.toast("网络异常,切换IP后重新登录", 3) Close_app("com.zhiliaoapp.musically") sys.msleep(1000) flag新机登录 = true flag强制切换IP一次 = true vartk.fg新机重登录 = true runid = 100 ttdog = os.time() else klog("[关键词]:"..res[2].." 【处理】换IP重登录后仍失败,结束当前账号") sys.toast("换IP重登录后仍网络异常,结束当前账号", 3) API_上传log("网络异常登录失败") runid = 129.9 ttdog = os.time() end elseif string.match(res[2], "Time") then klog("[关键词]:"..res[2].." 【处理】检查当前登录页") sys.toast("[关键词]:"..res[2].." 【处理】检查当前登录页") sys.msleep(500) flag红字pass = 0 flag文字判断 = false local txt_l = string.lower(ocrtext or "") local is_password_page = string.match(txt_l, "enter password") local is_login_account_page = string.match(txt_l, "log in") and (string.match(txt_l, "email / username") or string.match(txt_l, "phone")) and not string.match(txt_l, "enter password") local next_runid = 116 if is_password_page then klog("Time out 在密码页,再点一次 Continue") elseif is_login_account_page then next_runid = 114 klog("Time out 在账号页,点Continue后回到密码流程") end local clicked_continue = false local timeout_continue_count = tonumber(vartk.timeoutContinueCount or 0) if timeout_continue_count < 3 and interv(vartk.timeoutContinueAt, 10) then local function clickContinueByOCR(info) if clicked_continue or type(info) ~= "table" then return end for _, item in pairs(info) do if type(item) == "table" and item.text and string.match(item.text, "Continue") and tonumber(item.y) then local click_x = math.floor(w * 0.5) local click_y = math.floor(item.y + 10) klog("Time out 后OCR点 Continue "..click_x..","..click_y) touch.tap(click_x, click_y) screen.unkeep() sys.msleep(800) screen.keep() clicked_continue = true break end end end clickContinueByOCR(ocrinfo) clickContinueByOCR(txtinfo) if not clicked_continue then if ff2(p116密码已输入2, "Time out 后点 Continue", 1) then clicked_continue = true else local click_y = math.floor(h * 0.536) if h >= 1600 then click_y = math.floor(h * 0.615) end if w==750 and h==1334 then click_y = math.floor(h * 0.57) end klog("Time out 后坐标兜底点 Continue") touch.tap(math.floor(w * 0.5), click_y) screen.unkeep() sys.msleep(800) screen.keep() clicked_continue = true end end if clicked_continue then vartk.timeoutContinueAt = os.time() vartk.timeoutContinueCount = timeout_continue_count + 1 klog("Time out Continue重试第"..tostring(vartk.timeoutContinueCount).."/3次,10秒后仍超时再重试") flag红字pass = 1 end elseif timeout_continue_count >= 3 and interv(vartk.timeoutContinueAt, 10) then c登录网络重试 = (c登录网络重试 or 0) + 1 vartk.timeoutContinueAt = nil vartk.timeoutContinueCount = 0 flag红字pass = 1 if c登录网络重试 <= 1 then klog("Time out Continue已重试3次,切换IP后新机重登录 1/1") sys.toast("登录超时3次,切换IP后重新登录", 3) Close_app("com.zhiliaoapp.musically") sys.msleep(1000) flag新机登录 = true flag强制切换IP一次 = true vartk.fg新机重登录 = true runid = 100 else klog("换IP新机重登录后Time out仍重试3次,结束当前账号") sys.toast("换IP后登录仍超时,结束当前账号", 3) API_上传log("网络异常登录失败") runid = 129.9 end ttdog = os.time() flag文字判断 = false return end runid = next_runid if is_password_page then if clicked_continue and type(vartk) == "table" then if vartk.pswNext == nil then vartk.pswNext = 0 end vartk.pswNext = vartk.pswNext + 1 vartk.V2pswNext = 0 vartk.p116 = os.time() end elseif next_runid == 116 then if vartk.pswNext == nil then vartk.pswNext = 0 end vartk.pswNext = vartk.pswNext + 1 vartk.V2pswNext = 0 vartk.p116 = os.time() else if type(vartk) == "table" then vartk.p114 = os.time() - 10 end end else klog("[关键词]:"..res[2].." 【处理】忽略") sys.toast("[关键词]:"..res[2].." 【处理】忽略") sys.msleep(3000) flag红字pass = 1 end elseif res[1]==5 then if vartk.validcode == nil then vartk.validcode = 1 end if vartk.validcode <=2 then klog("[关键词]:"..res[2].." 【处理】按当前分辨率左上返回 "..tostring(zback[1])..","..tostring(zback[2])) touch.tap(zback[1], zback[2]) sys.msleep(1500) vartk.validcode = vartk.validcode +1 else klog("[关键词]:"..res[2].." 【处理】 已重复3次 上报2fa 结束任务") API_上传log("2fa错误") runid = 129.9 end elseif res[1]==6 then klog("[关键词]:"..res[2].." 【处理】新机重登录") sys.toast("[关键词]:"..res[2].." 【处理】新机重登录") sys.msleep(3000) flag红字pass = 1 runid = 100 vartk.fg新机重登录 = true end flag文字判断 = false end function tk日志byKey(key) if key == "Incorrect" then flag账号任务失败 = true flag任务有账号失败 = true flag登录失败 = true 账号任务失败原因 = "密码错误" API_上传log("密码错误") elseif key == "Couldn't continue" then flag账号任务失败 = true flag任务有账号失败 = true flag登录失败 = true 账号任务失败原因 = "被锁定" API_上传log("被锁定") elseif key == "Unable to log in" then flag账号任务失败 = true flag任务有账号失败 = true flag登录失败 = true 账号任务失败原因 = "Unable to log in. Please update your password." API_上传log("Unable to log in. Please update your password.") elseif key == "Maximum" then flag账号任务失败 = true flag任务有账号失败 = true flag登录失败 = true flag登录频繁 = true 账号任务失败原因 = "Maximum number of attempts reached" API_上传log("Maximum") elseif key == "Verification code is expired or incorrect" then flag账号任务失败 = true flag任务有账号失败 = true flag登录失败 = true 账号任务失败原因 = "验证码错误" API_上传log("验证码错误") end end function tk有效TikTokUID(value) return type(value) == "string" and value ~= "" and value ~= "nil" and string.match(value, "^%d+$") ~= nil end function tk确认当前账号登录成功() status_running = "normal" flag账号任务失败 = false 账号任务失败原因 = nil flag登录失败 = false flag登录频繁 = false end function tk允许粘贴弹窗() if ocrtext == nil or not string.match(ocrtext, "would like to paste") or not string.match(ocrtext, "Allow Paste") then return false end local xx, yy = -1, -1 for _, item in pairs(ocrinfo or {}) do if type(item) == "table" and item.text then if item.text == "Allow Paste" or (string.match(item.text, "Allow Paste") and not string.match(item.text, "Don't")) then xx = item.x + 10 yy = item.y + 10 break end end end if xx <= 0 then xx = 0.5 * w yy = 0.585 * h klog("系统 Allow Paste 坐标兜底 "..tostring(math.floor(xx))..","..tostring(math.floor(yy))) else klog("系统 Allow Paste 点Allow Paste "..tostring(math.floor(xx))..","..tostring(math.floor(yy))) end touch.tap(xx, yy) screen.unkeep() sys.msleep(800) ttdog = os.time() ocrtext = "" return true end function tk弹窗文字() --主页 我页 弹窗 local txtocr, txtinfo = screen.ocr_text(1, 62, w-1, h-1) --local txtocr, txtinfo = ocrtext, ocrinfo if flag弹窗字库==nil then ku弹窗 = { {"Agree","Changes to our Terms", oper=1, log="弹窗 Changes to our Terms, 点 Agree"}, -- {"Not now","Save login", oper=1, log="弹窗 Save login for next time, 点 Not now"}, -- {"Got it","Privacy","Policy","update", oper=1, log="弹窗 Privacy Policy update, 点 Got it"}, -- {"Got it","Community", oper=1, log="弹窗 Community Guidelines Update, 点 Got it"}, -- {"Got it","Changes to our Terms", oper=1, log="弹窗 Changes to our Terms, 点 Got it"}, -- {"Got it","Remote%-access","transfers of EEA User", oper=1, log="弹窗 Remote-access GDPR 点 Got it"}, -- {"Cancel","Please select your app language",oper=1, log="弹窗 Please select your app language, 点 Cancel"}, -- {"Don't allow","Find contacts","Open settings",oper=1, log="弹窗 Find contacts, 点 Don't allow"}, -- {"Confirm","Viewer history","Profile views and post views are now",oper=1, log="弹窗 Viewer history, 点 Confirm"}, -- {"X","Let's do a quick","a few personalized security tips","Continue",oper=1, log="弹窗 security checkup, 点 X"}, -- {"OK","Account status", oper=1, log="弹窗 Account status, 点 OK"}, -- {"Confirm","Reconfirm email","Update", oper=1, log="弹窗 Reconfirm email, 点 Confirm"}, -- {"Confirm","Confirm use of email","Not now", oper=1, log="弹窗 Confirm use of email, 点 Confirm"}, -- {"X","R$100", oper=1, log="广告弹窗 R$100, 点 X"}, -- {"Swipe up for more", oper=0, log="Swipe up for more 上滑一下"}, -- {"Verify to continue","Report a problem", oper=0, log="弹窗 滑块42"}, -- {"Drag the puzzle piece into place", oper=0, log="弹窗 滑块4"}, -- {"Drag the slider to fit the puzzle", oper=0, log="弹窗 旋码3"}, -- {"was banned","Your account", oper=0, log="弹窗 Your account was banned 封禁"}, -- {"Safety Verification","Feedback", oper=0, log="弹窗 Safety Verification 结束任务"}, -- --我页 {"OK","Privacy Policy Update", oper=1, log="弹窗 Privacy Policy Update 点OK"}, -- --主页暗 {"Inbox","Home", oper=0, log="主页 暗 弹窗? "}, -- } flag弹窗字库=1 end local res = {0, kw="", log="", x=-1,y=-1} for i=1, #ku弹窗 do for j=1, #ku弹窗[i] do if string.match(txtocr, ku弹窗[i][j]) then if j == #ku弹窗[i] then --匹配成功 res = {1, kw=ku弹窗[i][1], log=ku弹窗[i].log, x=-1,y=-1} if ku弹窗[i].oper == 1 then for _, item in pairs(txtinfo) do if type(item) == "table" and item.text and string.find(item.text, ku弹窗[i][1]) then res.x = item.x+10 res.y = item.y+10 +0 break end end end if save_ocr == nil then klog("\n\n\t\t【初弹窗 ocr】\n\n\t\t"..txtocr) local strtxt_xy = "\n\n" for _, item in pairs(txtinfo) do if type(item) == "table" and item.text then strtxt_xy = strtxt_xy.." ".._.." ".. item.text.." "..item.x..","..item.y.."\n" end end klog("\n\n\n"..strtxt_xy.."\n\n") save_ocr = 1 end end else break end end if res[1]>0 then break end end if 1>2 then elseif res[1]==0 then if tt截屏==nil or os.time()-tt截屏>10 then local strtxt_xy = "\n\n\n\t\t【ocr不识别】\n\n\t\t"..txtocr.."\n\n" for _, item in pairs(txtinfo) do if type(item) == "table" and item.text then strtxt_xy = strtxt_xy.." ".._.." ".. item.text.." "..item.x..","..item.y.."\n" end end klog(strtxt_xy.."\n\n") --tk截屏日志("弹窗_不识别") ocrlog() tt截屏 = os.time() end return false elseif res[1]==1 then if res.x >0 then klog(res.log.." "..res.x..","..res.y) touch.tap(res.x, res.y) screen.unkeep() sys.msleep(500) --screen.keep() local ttemp = os.time() local xx1, yy1 = res.x, res.y if xx1 == tttap.x and yy1 == tttap.y and ttemp-tttap[3]<20 then tttap[2] = tttap[2]+1 tttap[3] = ttemp klog("【重复点击】"..tttap[2].." "..tttap.x..","..tttap.y) else tttap = {ttemp, 0, ttemp, x=xx1, y=yy1} ttdog = ttemp end ocrtext = "" if 1>2 then elseif res.log == "弹窗 Account status, 点 OK" then sys.msleep(3000) tt重登 = os.time() SelfProfile = {status = "Login expired" } end ttdog = os.time() return true else klog(res.log) if 1>2 then elseif res.kw == "Swipe up for more" then return tkSwipeUpForMore("Swipe up for more popup", true) elseif res.kw == "was banned" then klog("[关键词]:"..res.kw.." 【处理】封禁") sys.toast("[关键词]:"..res.kw.." 【处理】封禁") sys.msleep(3000) status_running = "forbidden" runid = 129.9 ttdog = os.time() return true elseif res.kw == "Safety Verification" then klog("[关键词]:"..res.kw.." 【处理】结束任务") API_上传log("弹窗_Safety_Verification") sys.toast("[关键词]:"..res.kw.." 【处理】重新加入队列") sys.msleep(3000) runid = 129.8 ttdog = os.time() return true elseif 1>2 and res.kw == "Verify to continue" or res.kw == "Drag the puzzle piece into place" or res.kw=="Drag the slider to fit the puzzle" then if ff2(p弹窗验证打码, "弹窗验证打码") and tk验证打码() then txtocr="" end return true elseif res.kw == "Inbox" and vartk.Inbox == nil then vartk.Inbox = 1 klog("点一下") touch.tap(0.5*w, 0.2*h) else --ttdog = os.time() return true end end end flag弹窗判断 = false return false end function tk屏幕文字ocr() -- --flagocr 0--不执行 1--ocr 2--匹配 --if flagocr ~= 2 and os.time()-ttocr<2 and os.time()>ttocrper then flagocr=0 return false end if flagocr == 2 then ttocrper = os.time()+5 end if ocrlast == nil then ocrlast = {"nil"} end if ocr不识别 == nil then ocr不识别 = {"x"} end ocrtext, ocrinfo = screen.ocr_text(1, 62, w-1, h-1) ocrtext_l = string.lower(ocrtext) ttocr = os.time() flagocr = 1 if ocrtext == ocrlast[1] then ocrlast[4] = ocrlast[4]+1 if os.time()-ocrlast[3]>15 and os.time()-ttdog>15 and ocrlast[4]>=10 and ocrlast[5]==nil and interv(vartk.shot,60) and (vartk.shots==nil or vartk.shots <5) then ocrlast[5] = 1 ocrlog() for i=1, #ocr不识别 do if ocr不识别[i] == ocrtext then break end if i==#ocr不识别 then tk截屏日志("不识别") table.insert(ocr不识别, ocrtext) end end vartk.shot=os.time() if vartk.shots==nil then vartk.shots=1 else vartk.shots=vartk.shots+1 end end else ocrlast = {ocrtext, ocrinfo, os.time(), 1} end end function ocrlog() local strtxt_xy = "\n\n\n\t\t【ocr】\n\n\t\t"..ocrtext.."\n\n" for _, item in pairs(ocrinfo) do if type(item) == "table" and item.text then strtxt_xy = strtxt_xy.." ".._.." ".. item.text.." "..item.x..","..item.y.."\n" end end klog(strtxt_xy.."\n") end function Config_IP(tISO) --【mcc mnc iso】 if 1>2 then if flagMCC == nil then flagMCC = 1 --mcc mnc iso 'LY','SA','IQ','AE','GE','MY','AU','PH','IL','PK','LB' countrystore = {{'606','00','LY'}, {'420','01','SA'}, {'418','00','IQ'}, {'424','02','AE'}, {'282','01','GE'}, {'502','01','MY'}, {'502','10','MY'}, {'502','11','MY'}, {'502','150','MY'}, {'502','151','MY'}, {'505','02','AU'}, {'515','03','PH'}, {'420','06','SA'}, {'425','03','IL'}, {'410','03','PK'}, {'415','03','LB'}, {'452','01','VN'}, {'302','220','CA'}, {'250','05','RU'}, {'520','03','TH'}, {'234','02','GB'}, {'262','06','DE'}, {'208','00','FR'}, {'214','01','ES'}, {'334','020','MX'}, {'724','06','BR'}, {'640','02','TZ'}, {'716','06','PE'}, {'640','02','TZ'}, {'452','02','VN'}, {'525','02','SG'}, {'645','02','ZM'},{'286','02','TR'}, {'736','02','BO'}, {'640','07','TZ'}, {'640','08','TZ'},{'748','03','UY'}, {'734','04','VE'}, {'457','08','LA'}, {'604','299','MA'}, {'621','20','NG'}, {'744','03','PY'}, {'604','02','MA'}, {'228','01','CH'}, {'740','01','EC'}, {'202','01','GR'}, {'730','01','CL'}, {'732','02','CO'}, {'282','01','GE'}, {'272','01','IE'}, {'621','22','NG'}, {'702','67','BZ'}, {'294','01','MK'}, {'310','59','BM'}, {'609','01','MR'}, {'608','01','SN'}, {'614','01','NE'}, {'744','01','PY'}, {'744','03','PY'}} stremp = '' for i=1, #countrystore do if string.match(stremp, countrystore[i][3]) then else stremp = stremp..",'"..countrystore[i][3].."'" end end countrylist = {} --str国家 = 'AE,LY' for i =1, #countrystore do if string.match(str国家, countrystore[i][3]) then table.insert(countrylist, countrystore[i]) end end if #countrylist == 0 then klog("没有匹配的 MCC库") sys.alert("没有匹配的 MCC库"); os.exit(); sys.msleep(1000) end end country = countrylist[math.random(1, #countrylist)] MCC = country[1] MNC = country[2] ISO = country[3] klog(MCC.." "..MNC.." "..ISO) --choice = sys.alert('你现在将要干啥?', 10, '你的选择', '取消', '吃饭', '睡觉') sys.alert(' MCC: '..MCC.."\n MNC: "..MNC.."\n ISO: "..ISO, 2, '运营商设置') --【appConfig.txt】 if 1>0 then local Config_content ='{"backup":false,"iso":"'..ISO..'","mcc":"'..MCC..'","mnc":"'..MNC..'","newiPhone":true,"restore":false,"restoreFileName":""}' local fileConfig = app.data_path("com.zhiliaoapp.musically").."/tmp/backup/appConfig.txt" file.writes(fileConfig, Config_content) end end --IP维持静态 if selects["IP维持静态"] and not flag强制切换IP一次 then klog("IP维持静态") return true end --【ISO】 if (selects["功能"] == "注册" or selects["功能"] == "换绑") and (flag注册方式 == 'Phone' or flag注册方式 == 'GG') then ISO = ISOlist[math.random(1, #ISOlist)] klog("【ISO】"..ISO) end --【切换IP】 if tISO then ISO = tISO end local proxy_platform = selects["代理平台Platform"] if selects["功能"] == "任务" and (proxy_platform == nil or proxy_platform == "" or proxy_platform == "xxxx") then klog("【代理配置异常】任务缺少代理Platform,停止切换IP") sys.toast("任务缺少代理Platform,请检查云控用户代理配置", 3) return false end if selects["切换IP域名"] == nil or selects["切换IP域名"] == "" then selects["切换IP域名"] = "ztik.cc" end --url_IP = 'http://wan.sswhgame.com:21000/api/changeipwithplatform?platform=abcproxy&localport='..selects["配置端口"]..'&country='..ISO --url_IP = 'http://ztik.cc:21000/api/changeipwithplatform?platform=abcproxy&localport='..selects["配置端口"]..'&country='..ISO --url_IP = 'http://wan.ztik.cc:21000/api/changeipwithplatform?platform=abcproxy&localport='..selects["配置端口"]..'&country='..ISO --url_IP = 'http://wan.ztik.cc:21000/api/changeipwithplatform?platform='..selects["代理平台Platform"]..'&localport='..selects["配置端口"]..'&country='..ISO --url_IP = 'http://wan.'..selects["切换IP域名"]..':21000/api/changeipwithplatform?platform='..selects["代理平台Platform"]..'&localport='..selects["配置端口"]..'&country='..ISO url_IP = 'http://www.'..selects["切换IP域名"]..':21000/api/changeipwithplatform?platform='..selects["代理平台Platform"]..'&localport='..selects["配置端口"]..'&country='..ISO --if selects["功能"] == "任务" and tISO and tasktable.type == "dm-task" and selects["socks5list"] == true then if selects["功能"] == "任务" and tISO and selects["socks5list"] == true and flag新机登录 == false then --url_IP = 'http://wan.ztik.cc:21000/api/changeipwithplatform?platform=socks5list&localport='..selects["配置端口"]..'&country='..ISO url_IP = 'http://wan.'..selects["切换IP域名"]..':21000/api/changeipwithplatform?platform=socks5list&localport='..selects["配置端口"]..'&country='..ISO end klog("切换IP "..url_IP) --klog_bkp("切换IP "..url_IP) local c, h, r local ttip = os.time() local ttwifi = os.time() local runide = -1 local loca节点 = {} local ccWiFi = 0 while true do -- if runide<0 or (runide >= 1 and runide <=3) then -- sys.msleep(500) -- screen.keep() -- tk屏幕文字ocr() -- end if runide == -1 then if app.front_bid() == "com.liguangming.Shadowrocket" then runide = 0 else if selects["功能"] == "注册" then VPN开启(0) else VPN开启(1) end runide = 0 end elseif runide == 0 then c, h, r = http.get(url_IP, 30) if c==200 then --{"code":0,"msg":"success"} klog(r) if string.match(r, "success") then flag强制切换IP一次 = nil return true else klog(c.." "..tostring(r)) sys.toast("IP切换fail\n\n"..c.." "..tostring(r), 3) sys.msleep(12000) end elseif selects["功能"] == "任务" and os.time()-ttip > 300 then if Checkwifi() then klog("切换ip 300秒超时 切换节点") --klog_bkp("切换ip 300秒超时 切换节点") runide = 1 elseif interv(vartk.ttwifi, 55) then --连接指定wifi的操作 if ccWiFi == 0 then ccWiFi = 1 klog("连接WIFI caicai") device.join_wifi('caicai', '99999999', 1) elseif ccWiFi == 1 then ccWiFi = 0 klog("连接WIFI mini") device.join_wifi('mini', '88888888', 1) end vartk.ttwifi = os.time() else sys.msleep(5*1000) end else klog("IP切换fail "..c.." "..tostring(r)) sys.toast("IP切换fail\n\n"..c.." "..tostring(r), 3) sys.msleep(12000) end elseif runide == 1 then VPN开启(2) --切换节点 runide = 0 ttip = os.time()-150 end screen.unkeep() sys.msleep(200) end klog("IP切换连续多次失败!") sys.alert("IP切换连续多次失败 !",3); sys.msleep(3000) return false end function 清理safari0() if _safati0 == nil then -- Close Tabs p_CloseTabs = {{462,1539,0xff3b30},{6,6,0xc7c7c8},{349,1523,0xff3b30},{349,1519,0xf0f1f0},{349,1532,0xff3b30},{349,1549,0xff3b30},{349,1552,0xf0f0f1},{431,1524,0xff3b30},{447,1524,0xff3b30},{439,1549,0xff3b30},{326,1669,0x007aff},{326,1654,0x007aff},{326,1650,0xffffff},{332,1665,0x007aff},{342,1679,0x007aff},{336,1679,0xffffff},{325,1679,0x007aff},{394,1686,0x007aff},{394,1689,0xffffff},{394,1661,0x007aff}} -- Clear History p_ClearHis = {{470,1539,0xff3b30},{6,6,0xc7c7c8},{221,1536,0xff3b30},{235,1524,0xff3b30},{235,1549,0xff3b30},{248,1523,0xff3b30},{248,1520,0xefefef},{248,1536,0xff3b30},{248,1549,0xff3b30},{248,1552,0xefefef},{607,1549,0xff3b30},{534,1524,0xff3b30},{430,1556,0xff3b30},{366,1654,0x007aff},{355,1666,0x007aff},{371,1678,0x007aff},{472,1653,0x007aff},{472,1649,0xffffff},{472,1666,0x007aff},{472,1679,0x007aff}} _safati0 = 1 end ::cqsafati:: klog("清理safari") closeApp("com.apple.Preferences") sys.msleep(1000) openURL("prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA") sys.msleep(2000) screen.unkeep() local ttsafari = os.time() local runidc = 0 while true do screen.keep() if ff2(p_ClearHis, "Clear History", 1) then runidc = 1 elseif ff2(p_CloseTabs, "Close Tabs", 1) then runidc = 2 sys.msleep(3000) screen.unkeep() return true elseif os.time()-ttsafari > 3 then if runidc > 0 then screen.unkeep() return true else break end end screen.unkeep() sys.msleep(1000) end goto cqsafati end function VPN开启(m) -- m == nil 指令开启VPN -- m == 0 强制开启小火箭 指令开启VPN (注册) -- m == 1 强制开启小火箭 识别开启界面 识别连接节点 (任务) -- m == 2 强制开启小火箭 并 切换节点 (任务) if m ~= 2 then local is_on, stat = device.is_vpn_on() if is_on then klog("VPN已开启,跳过节点OCR") return true end klog("VPN未开启,调用系统VPN开关") device.turn_on_vpn() sys.msleep(3000) is_on, stat = device.is_vpn_on() if is_on then klog("VPN已开启") return true end klog("系统VPN开关未确认,回落小火箭检查") end if 1>0 then local runidv = 0 if m then else runidv = 2 end local f目标 = "JP" while true do --开启小火箭 并确保开关打开 m=2 则要切换节点 klog("[VPN - "..runidv.."]") screen.keep() if runidv==1 or runidv>2 then tk屏幕文字ocr() if ff2(p501小火箭弹窗Dismiss, "小火箭弹窗 点Dismiss", 1) then end end if runidv == 0 then Check_app("com.liguangming.Shadowrocket") runidv = 1 elseif runidv == 1 then if ff2(p501小火箭页面, "小火箭页面") then runidv = 2 elseif m==0 then --注册 runidv = 2 end --指令开启VPN elseif runidv == 2 then local is_on, stat = device.is_vpn_on() if (is_on) then klog("VPN已开启") if m and m>0 then runidv =3 tt连接中 = nil else return true end else klog("device 开启VPN") device.turn_on_vpn() sys.msleep(3000) end --检查 小火箭开关 elseif runidv == 3 then if ff2(p501小火箭未连接, "小火箭未连接 打开开关") then if w == 750 then --Xin0 = 613 touch.on(605, Yin0):move(605+60,Yin0):off() sys.msleep(4000) end --touch.tap(Xin0, Yin0+5) screen.unkeep() sys.msleep(3000) elseif interv(vartk.ttConnecting, -4) and ff2(p501小火箭连接中, "Connecting...") then if tt连接中 == nil then tt连接中 = os.time() sys.msleep(5000) elseif os.time()- tt连接中 > 11 then klog("小火箭 连接异常") --sys.alert("小火箭 连接异常") sys.toast("小火箭 连接超时异常") sys.msleep(3000) ttdog = os.time() tt连接中 = os.time() runidv = 11 --去尝试拯救 -- runidv = 10 klog("连接超时 重启小火箭") else sys.msleep(5000) end vartk.ttConnecting = os.time() elseif ff2(p501小火箭SG, "节点 SG") and Yin0 < 0.3*h then if m==1 then return true elseif m==2 then f目标 = "JP" runidv = 4 end elseif ff2(p501小火箭JP, "节点 JP") and Yin0 < 0.3*h then if m==1 then return true elseif m==2 then f目标 = "SG" runidv = 4 end elseif 1>0 then if m==1 then --可以不检查 SG JP return true elseif m==2 then end end --切换节点 elseif runidv == 4 then if f目标 == "SG" then if ff2(p501小火箭SG, "节点 SG") then if Yin0 <0.3*h then klog("切换 "..f目标.." 成功") return true else klog("切换 "..f目标) touch.tap(Xin0, Yin0) sys.msleep(3000) end end elseif f目标 == "JP" then if ff2(p501小火箭JP, "节点 JP") then if Yin0 <0.3*h then klog("切换 "..f目标.." 成功") return true else klog("切换 "..f目标) touch.tap(Xin0, Yin0) sys.msleep(3000) end end end elseif runidv == 10 then Close_app("com.liguangming.Shadowrocket") sys.msleep(5000) runidv = 0 elseif runidv ==11 then --Connecting... 超时处理 ttconnecting = os.time() runidv = 11.1 elseif runidv == 11.1 then if os.time()-ttconnecting > 999 then runidv = 11.2 elseif ff2(p501小火箭未连接, "连接开关 已关闭") then runidv = 11.2 elseif ff2(p501小火箭连接中, "关闭连接开关") then if w == 750 then --touch.tap(650, 205) sys.msleep(6000) --白球心 --touch.tap(625, 205) sys.msleep(4000) --开关项中央 touch.on(655, 205):move(655-60,205):off() sys.msleep(4000) end end elseif runidv == 11.2 then if ff2(p501小火箭未连接, "重新打开VPN开关") then if w == 750 then --Xin0 = 613 touch.on(605, Yin0):move(605+60,Yin0):off() sys.msleep(4000) end else runidv = 3 end elseif runidv == 11.9 then Close_app("com.liguangming.Shadowrocket") sys.msleep(10000) runidv = 0 end screen.unkeep() sys.msleep(500) end end while (1>2 and true) do local is_on, stat = device.is_vpn_on() if (is_on) then klog("VPN已开启") break else klog("device 开启VPN") device.turn_on_vpn() sys.msleep(1000) end sys.msleep(600) end return true end function VPN快速检测() local is_on, stat = device.is_vpn_on() if is_on then klog("VPN快速检测 已开启") return true end klog("VPN快速检测 未开启,走小火箭检查") return VPN开启(1) end function VPN关闭() while (true) do local is_on, stat = device.is_vpn_on() if (is_on) then klog("device 关闭VPN") device.turn_off_vpn() sys.msleep(5000) else klog("VPN已关闭") break end sys.msleep(600) end return true end function Redo重检wifi_vpn() local runidc = 0 local tt01 = os.time() local ttwatchwifi = os.time() local ttopenwifi = os.time() local ccWiFi = 0 while true do klog(" [重检wifi_vpn - "..runidc.."]") if runidc ==3 then screen.keep() tk屏幕文字ocr() end if runidc == 0 and VPN关闭() then runidc = 1 elseif runidc == 1 and Close_app("com.liguangming.Shadowrocket") then tt01 = os.time() sys.msleep(2000) runidc = 2 --runidc = 6 sys.msleep(2000) --跳过wifi 直接重启小火箭 elseif runidc == 2 then klog("打开wifi界面") openURL("prefs:root=WIFI") sys.msleep(3000) runidc = 3 ttopenwifi = os.time() elseif runidc == 3 then if string.match(ocrtext, "WLAN") or string.match(ocrtext, "Wi%-Fi") or string.match(ocrtext, "Settings") then klog("wifi界面已打开") sys.msleep(2000) runidc = 5 tt05 = os.time()-45 elseif os.time()-ttopenwifi > 6 then runidc = 2 else sys.msleep(2000) end elseif runidc == 4 then if ccWiFi == 0 then ccWiFi = 1 -- klog("连接WIFI caicai") device.join_wifi('caicai', '99999999', 1) elseif ccWiFi == 1 then ccWiFi = 0 klog("连接WIFI mini") device.join_wifi('mini', '88888888', 1) end tt05 = os.time()+10 runidc = 5 elseif runidc == 5 then if Checkwifi() then runidc = 6 elseif 1>0 and os.time()-tt05 >55 then --检测失败后 连接指定wifi的操作 klog("重新连接WiFi") runidc = 4 else sys.msleep(5000) end elseif runidc == 6 then if VPN开启(1) then ttdog = os.time() return true end end screen.unkeep() sys.msleep(500) end end function Checkwifi() -- 获取设备的 WiFi IP local ip = nil local fallback = nil local ok, interfaces = pcall(device.ifaddrs) if ok and type(interfaces) == "table" then for _,v in ipairs(interfaces) do local name = tostring(v[1] or "") local addr = tostring(v[2] or "") local a, b = string.match(addr, "^(%d+)%.(%d+)%.") local private = string.match(addr, "^192%.168%.") or string.match(addr, "^10%.") or (a == "172" and tonumber(b) >= 16 and tonumber(b) <= 31) if private and not string.match(name, "^utun") and not string.match(name, "^pdp") then fallback = fallback or addr if name == "en0" then ip = addr break end end end end ip = ip or fallback if not ip then klog("WiFi未连接") device_wifiIP = "WiFi_nil" return false else klog("WiFi已连接 "..ip) device_wifiIP = ip return true end end function CheckNetTime() local nt = sys.net_time(10) -- 获取网络时间,10秒超时,超时返回 0 if nt==0 then klog("获取网络时间失败 网络异常?") sys.alert('获取网络时间失败 网络异常?', 5) return false else klog(os.date('当前网络时间 %Y-%m-%d %H:%M:%S', nt+8*3600)) return true end end function Watchwifi() local runide = 0 local ttwatchwifi = os.time() local ttopenwifi = os.time() while true do klog(" [watchwifi - "..runide.."]") screen.keep() tk屏幕文字ocr() if runide == 0 then klog("打开wifi界面") openURL("prefs:root=WIFI") sys.msleep(5000) ttwifi = os.time() runide = 1 ttopenwifi = os.time() elseif runide == 1 then if string.match(ocrtext, "WLAN") or string.match(ocrtext, "Wi%-Fi") or string.match(ocrtext, "Settings") then klog("停留10秒即可") sys.msleep(10000) --return true runide = 2 elseif os.time()-ttwatchwifi > 30 then klog("打开wifi界面 异常") ocrlog() sys.alert("打开wifi界面 异常", 4) runide = 0 elseif os.time()-ttopenwifi > 4 then runide = 0 else sys.msleep(2000) end elseif runide == 2 then Check_app("com.liguangming.Shadowrocket") klog("小火箭启动完 Watchwifi 结束") return true end screen.unkeep() sys.msleep(500) end end function Check_app(appname, sle) local ttapp = os.time()-10 local ttrunapp = os.time() local httpservice_rerun = false while true do if app.front_bid() == appname then if sle == nil then klog("已打开 "..appname) --sys.msleep(2000) end return true elseif os.time()-ttrunapp >24 then klog("启动app "..appname.." 异常") if appname == "com.ncitys.httpserviceapp" then if os.time()-ttrunapp >60 then --sys.alert("启动app "..appname.." 异常\n12秒后重试") --sys.msleep(12000) ttrunapp = os.time() else sys.msleep(12*1000) --sys.msleep((41-os.time()+ttrunapp)*1000) end else --sys.msleep(12000) ttrunapp = os.time() end --return false elseif os.time()-ttapp>10 then klog("启动 "..appname) app.run(appname) sys.msleep(2000) if appname == "com.ncitys.httpserviceapp" and httpservice_rerun == false then sys.msleep(1000) if app.front_bid() ~= appname then klog("httpservice 未进前台,关闭后重启一次") app.close(appname) sys.msleep(1000) app.run(appname) sys.msleep(2000) end httpservice_rerun = true end ttapp = os.time() end sys.msleep(500) end end function Close_app(appname) local ttapp = os.time()-10 while true do if app.is_running(appname) then klog("关闭 "..appname) app.close(appname) sys.msleep(2000) else klog("已关闭 "..appname) return true end sys.msleep(500) end end function Check_AMG_Result() while true do mSleep(3000) local result_file = "/var/mobile/am".."gRe".."sult.txt" if file.exists(result_file) then local amg_result = file.reads(result_file) if amg_result == "0" then return false elseif amg_result == "1" then return true elseif amg_result == "2" then toast("执行中",1) end end end end Deam = { New = (function(iso) --Check_app("com.dream.inject") Check_app("com.ncitys.httpserviceapp") klog("dream 新机") klog("http://127.0.0.1:8013/NewiPhone?bundleID=com.zhiliaoapp.musically&iso="..iso) local code, h, res = http.get("http://127.0.0.1:8013/NewiPhone?bundleID=com.zhiliaoapp.musically&iso="..iso) if code == 200 then klog(res) sys.toast("dream 新机") return true end end), Backup = (function(filename) --Check_app("com.dream.inject") Check_app("com.ncitys.httpserviceapp") klog("dream 备份 "..filename) --local code, h, res = http.get("http://127.0.0.1:8013/BackUp?bundleID=com.zhiliaoapp.musically&fileName=2019aa") local code, h, res = http.get("http://127.0.0.1:8013/BackUp?bundleID=com.zhiliaoapp.musically&fileName="..filename) if code == 200 then klog(res) sys.toast("dream 备份") return true end end), Restore = (function(filename) --Check_app("com.dream.inject") --Deam.Restore Check_app("com.ncitys.httpserviceapp") klog("dream 还原 "..filename) --local code, h, res = http.get("http://127.0.0.1:8013/Restore?bundleID=com.zhiliaoapp.musically&fileName=2019aa") local code, h, res = http.get("http://127.0.0.1:8013/Restore?bundleID=com.zhiliaoapp.musically&fileName="..filename) if code == 200 then klog(res) sys.toast("dream 还原 "..filename) return true end end), DelBackUp = (function(filename) --Check_app("com.dream.inject") Check_app("com.ncitys.httpserviceapp") klog("dream 删除指定备份 "..filename) local code, h, res = http.get("http://127.0.0.1:8013/DelBackUp?bundleID=com.zhiliaoapp.musically&fileName="..filename) if code == 200 then klog(res) sys.toast("dream 删除指定备份 "..filename) return true end end), Delall = (function() --Check_app("com.dream.inject") Check_app("com.ncitys.httpserviceapp") klog("dream 删除全部备份") local code, h, res = http.get("http://127.0.0.1:8013/DelBackUp?bundleID=com.zhiliaoapp.musically") if code == 200 then klog(res) sys.toast("dream 删除全部备份") return true end end), } AMG = { New = (function() Check_app("com.superdev.AMG") klog("AMG 新机") klog("http://127.0.0.1:8080/cmd?fun=newRecord") local code, h, res = http.get("http://127.0.0.1:8080/cmd?fun=newRecord") if code == 200 then --klog(res) sys.toast("AMG 新机") return Check_AMG_Result() end end), Backup = (function() Check_app("com.superdev.AMG") klog("AMG 备份") local code, h, res = http.get("http://127.0.0.1:8013/BackUp?bundleID=com.zhiliaoapp.musically&fileName=2019aa") if code == 200 then --klog(res) sys.toast("AMG 备份") return Check_AMG_Result() end end), Restore = (function() Check_app("com.superdev.AMG") klog("AMG 还原") local code, h, res = http.get("http://127.0.0.1:8080/cmd?fun=setRecord&recordName=2019aa") if code == 200 then --klog(res) sys.toast("AMG 还原") return Check_AMG_Result() end end), DelBackUp = (function() Check_app("com.superdev.AMG") klog("AMG 删除指定备份") local code, h, res = http.get("http://127.0.0.1:8013/DelBackUp?bundleID=com.zhiliaoapp.musically&fileName=2019aa") if code == 200 then klog(res) sys.toast("AMG 删除指定备份 2019aa") return true end end), } function tk读取AccountToken() local path = app.data_path("com.zhiliaoapp.musically") .. "/Documents/Account/Account.txt" if not file.exists(path) then klog("提参文件不存在: "..path) return false end local raw = file.reads(path) if type(raw) ~= "string" then klog("提参文件读取失败: "..path) return false end raw = string.match(raw, "^%s*(.-)%s*$") if raw == nil or raw == "" then klog("提参文件为空: "..path) return false end local decode_ok, decoded = pcall(json.decode, raw) if not decode_ok or type(decoded) ~= "table" then klog("提参文件JSON解析失败: "..path) return false end tokenjson = raw tokentable = decoded tokenbase64 = string.base64_encode(raw) flagToken来自AccountTxt = true klog("Account.txt明文提参成功,已生成tokenbase64") return true end function main_var_注册() ttdog = os.time() tttap = {ttdog, 0, ttdog, x=-1, y=-1} --初点时刻 重复次数 最近时刻 点击坐标x y ttshot = os.time() ttISO = os.time()-5 runid = -2 vartk = {} flag尝试nickname参数 = 0 flag生日滑轮 = nil c生日确认= 0 tt生日确认=os.time() getphone =nil --取号 初始化 phonecode =nil --取码 初始化 c点continue = 0 --p21_2Usephone界面 点continue次数 c取码 = 0 --取码次数 允许再发送一次短信 Sendcode异常 = 0 --发现 Sendcode异常 次数 达到2次后 就不再Send code 直接弃号 nickname = rndnick() flag当前状态 = {0, nil} --一些特别的当前状态 {时刻, 状态名称} if flag初始化var == nil then flag初始化var = 1 flag异常状态 = { p46 = {0, 0}, --p46出提示 连续3次 就... } end getGG = nil --取邮箱 初始化 if getAPI_keep==nil or getAPI_keep==0 then getAPI_keep = 0 --保持API获取的数据 不初始化 end c打码次数 = 0 --限制打码次数 最多n次 c打码次数max = 8 --限制打码次数 最多 c打码次数max cont打码反馈 = {nil,nil} tt打码加载 = {0, 0, 0} --上一次识别到的时刻,本轮识别到的时刻, 位置 tt点相同不完全 = {0, 0} --上一次识别到的时刻,本轮识别到的时刻 xingwei = {1,0,0,0, rid=0} --浏览 点赞 收藏 关注 rid--控制 delaytime = math.random(3,6) ttp = os.time() ttupload = os.time() - 10 end function main_注册() --【注册】 main_var_注册() while true do if runid ~= nil and runid > 0.9 and runid < 130 and API_gateway_task_control() then runid = 0.9 ttdog = os.time() end klog(" ["..runid.."]") screen.keep() if (runid>=0 and runid<13) or (runid>30 and runid<30.1) then tk屏幕文字ocr() end --【打码】 if ff2(p弹窗验证打码, "弹窗验证打码") and tk验证打码() then txtocr="" end if runid == 80 then klog(" ") klog(" ") --app.close("com.zhiliaoapp.musically") Close_app("com.zhiliaoapp.musically") klog("《关闭tk 重新来》") klog(" ") klog(" ") sys.msleep(5000) tk强制休息() --根据状态标志 强制休息 --VPN关闭() break elseif runid == 79 then klog(" ") --app.close("com.zhiliaoapp.musically") Close_app("com.zhiliaoapp.musically") klog("关闭tk 清理safari 重做此额度") klog(" ") if flag备份做号 then c号 = c号-1 end runid = -2 VPN关闭() main_var_注册() elseif runid == 78 then klog(" ") --app.close("com.zhiliaoapp.musically") Close_app("com.zhiliaoapp.musically") klog("关闭tk 重启tk 重新操作一次") klog(" ") if flag备份做号 then c号 = c号-1 end runid = -0.5 end if runid == 79 then --号码封禁处理 API_phone_unavailable() end if 1>2 and selects['新机软件']=='A' and runid == 28 then --kg提参 AMG 2025-02-11 弃用 if CK提取_kg_12() then tokenbase64 = tkstr64 tokentable = json.decode(tkstr) if API_token() then runid = 80 if flag注册成功备份 then tk备份在本机() end else runid = 80 end else klog("kg提参 异常") sys.toast("kg提参 异常") sys.msleep(5000) end end if runid>=30 and runid<31 then --换绑 if runid>30 and runid<30.1 and os.time()-ttdog >= math.min(t重启-10, 60) then klog("换绑超时 标记失败") ttdog=os.time() runid =30.1 res_换绑 = "failed" elseif flag换绑 and scrp == "GGphone" then if runid== 30 then if API_换绑(nickname) then res_换绑 = "released" else if flagAPI换绑 == "timeout" then flagAPI换绑 = "" end res_换绑 = "failed" end runid=30.1 ttdog = os.time() elseif runid==30.1 then if selects["功能"]=="注册" and API_token(res_换绑) then runid = 80 ttdog = os.time() elseif selects["功能"]=="换绑" and res_换绑 == "released" and API_换绑结果(res_换绑) then runid = 80 ttdog = os.time() elseif selects["功能"]=="换绑" and res_换绑 == "failed" then runid = 80 ttdog = os.time() end end elseif flag换绑 and scrp == "touchios_TK" then if runid== 30 then if API_换绑_Email_touchios(nickname) then runid = 30.01 end elseif runid == 30.01 then if ff2(p30_01右上三, "右上 三", 1) then elseif interv(vartk.t3002, 5) and ff2(p30_02Settings, "Settings and privacy", 1) then vartk.t3002 = os.time() elseif interv(vartk.t3003, 5) and ff2(p30_03Account, "Account", 1) then vartk.t3003 = os.time() elseif interv(vartk.t3004, 5) and ff2(p30_04inform, "Account information", 1) then vartk.t3004 = os.time() elseif interv(vartk.t3005, 5) and ff2(p30_05info_Email, "Account information 点Email") then touch.tap(0.8*w, resocr.y+10) vartk.t3005 = os.time() elseif ff2(p30_06Addemail, "添加邮箱 "..nickname.."@wan."..taskdomain) then runid = 30.02 end elseif runid == 30.02 then if ff2(p30_06填email, "填email "..nickname.."@wan."..taskdomain, 1) then sys.input_text(nickname.."@wan."..taskdomain); sys.msleep(1000) elseif interv(vartk.t3006, 5) and ff2(p30_06Continue, "Continue", 1) then vartk.t3006 = os.time() elseif ff2(p30_07Verifyemail, "Verify email") then runid = 30.03 end elseif runid == 30.03 then if API_换绑_Email验证_touchios(nickname) then runid = 30.04 else runid = 30.1 res_换绑 = "failed" end elseif runid >= 30.04 and runid <=30.06 then if interv(vartk.t3007, 15) and ff2(p30_07Verifyemail, "Verify email 输入"..Emailcode30) then inputDigit(Emailcode30) sys.msleep(2000) vartk.t3007 = os.time() elseif ff2(p30_08Nothanks, "No thanks", 1) then elseif runid == 30.04 and interv(vartk.t3009, 6) and ff2(p30_09Phonenumber, "Account information 点 Phone number") then touch.tap(0.8*w, resocr.y+10) vartk.t3009 = os.time() elseif ff2(p30_10Unlink, "Unlink", 1) then vartk.t3009 = os.time()+10 sys.msleep(800) elseif runid == 30.04 and ff2(p30_11Remove, "Remove 稍等10几秒") then sys.msleep(math.random(7000, 12000)) runid = 30.05 ttdog=os.time() elseif runid == 30.05 and interv(vartk.t3011, 10) and ff2(p30_11Remove, "点 Remove", 1) then vartk.t3011 = os.time() runid = 30.06 elseif ff2(p30_12Unlink成功, "Unlink成功") then runid =30.1 res_换绑 = "released" elseif runid == 30.06 and ff2(p30_09Phonenumber, "返回到 Account information") then if vartk.t3013 == nil then vartk.t3013 = os.time() sys.msleep(500) elseif os.time() - vartk.t3013 >5 then runid =30.1 res_换绑 = "released" else sys.msleep(500) end elseif runid == 30.06 and os.time() - vartk.t3011 >20 then klog("点remove后 超时20秒 没有识别到成功 标记为failed") runid =30.1 res_换绑 = "failed" end elseif runid==30.1 then if selects["功能"]=="注册" and API_token(res_换绑) then runid = 80 ttdog = os.time() elseif selects["功能"]=="换绑" and res_换绑 == "released" and API_换绑结果(res_换绑) then runid = 80 ttdog = os.time() elseif selects["功能"]=="换绑" and res_换绑 == "failed" then runid = 80 ttdog = os.time() end end else runid = 80 end end if runid == 28 then --Account.txt提参 dream if tk读取AccountToken() then klog("Account.txt token 已读取") --if string.match(tokenjson, '"screen_name"') then --"screen_name":"user8725836514891" --"nickname":"dxvBgXdKeM" --if (string.match(tokenjson, '"nickname"') or exec_SelfProfile()) and string.match(tokenjson, '"screen_name"') then --if exec_SelfProfile() and string.match(tokenjson, '"screen_name"') then if exec_SelfProfile() then --nick_name = string.match(tokenjson, '"nickname":"(.-)"') --if nick_name == nil then nick_name = SelfProfile.nickname end nick_name = SelfProfile.nickname klog("nickname对比 自查:"..nick_name.." 注册时:"..nickname) if nick_name ~= nickname then nick_name = nickname; klog("将nick_name修复成 "..nickname) end user_name = string.match(tokenjson, '"screen_name":"(.-)"') if user_name == nil then user_name = nick_name end tokentable = json.decode(tokenjson) if vartk.f已注册过 == "已注册过" then if selects["功能"]=="注册" then runid =30.1 res_换绑 = "failed" elseif selects["功能"]=="换绑" then klog("去执行换绑") runid =30 end else local f1,f2,f3 = 0, 0, 0 local tt12 = os.time() while selects["功能"]=="注册" do if f1 == 0 and API_token() then f1 = 1 end if f2 == 0 and selects['是否上传云控?'] then local _, uploadDone = API_token_云控() if uploadDone then f2 = 1 end elseif f2 == 0 and selects['是否上传云控?'] == false then f2 = 1 end if f1 == 1 and f3 == 0 then if flag注册成功备份 then tk备份在本机() end f3 = 1 end if f1==1 and f2==1 and f3 ==1 then break elseif os.time()-tt12 > 60 then klog("超时放弃") break end sys.msleep(500) end runid = 30 end elseif 1>2 then --一直自查 不重启了 直到超时为止 klog("自查参数失败 重启后再试") flag尝试nickname参数 = flag尝试nickname参数+1 sys.toast("自查参数失败 重启后再试") sys.msleep(5000) runid = 29 end else klog("token base64 异常 重启再提参") sys.toast("token base64 异常 重启再提参") sys.msleep(5000) runid = 29 end end if runid == 29 then Close_app("com.zhiliaoapp.musically") sys.msleep(1000) Check_app("com.zhiliaoapp.musically") runid = 26 end if runid == 26 then --我页 if 1>2 then elseif ff2(p60我页, "我页 提参") then runid = 28 ttdog = os.time() elseif ff2(p102足迹save, "足迹save叉掉102", 1) then elseif ff2(p10main十, "点 Profile 去我页") then touch.tap(zProfile[1], zProfile[2]) ttdog = os.time() end end if runid >= 22 and runid <23 then --上传视频 if 1>2 then elseif runid >= 22.5 and ff2(p60我页, "我页【去提参】") then sys.msleep(10000) runid = 26 elseif runid >=22.5 and ff2(p74上传中, "上传中...") then if runid < 22.7 then ttdog = os.time()+10 end runid = 22.7 sys.msleep(3000) if os.time() - ttdog > 45 then klog("上传卡住了 直接去提参【去提参】") runid = 26 end elseif runid >=22.7 and ff2(p75已上传, "已上传【去提参】") then runid = 26 sys.msleep(3000) elseif runid >= 22.5 and os.time()-ttupload>20 and ff2(p10main十, "【去提参】") then runid = 26 elseif ff2(p73_2Next4ok, "Next4 ok", 1) then runid = 22.6 ttupload = os.time() elseif ff2(p73Next3, "Next3", 1) then runid = 22.6 ttupload = os.time() elseif ff2(p73弹窗PostNow, "弹窗 Post Now", 1) then elseif ff2(p72Next2, "Next2", 1) then runid = 22.5 ttupload = os.time() elseif ff2(p70Recent, "Recent 相册") then if Xin0 < 400 then ff2(p70Photo未, "切换到 Photo", 1) elseif ff2(p71Next1, "Next1", 1) then elseif ff2(p70Grid, "Grid 随机点一张照片") then if runid == 22 then for i=1, math.random(1,2) do touch.on(0.5*w, 0.2*h):move(0.5*w,0.8*h):msleep(math.random(100, 800)):off() sys.msleep(2000) end runid = 22.1 end touch.tap(math.random(60, 780), math.random(345, 1500)); sys.msleep(1000) end elseif runid == 22 and ff2(p60我页, "在我页") then if ff2(p60upload, "upload",1) then elseif os.time() - ttupload > 8 then ttupload = os.time() elseif os.time() - ttupload > 3 then klog("没有upload按钮 放弃视频 去提参") runid = 26 end elseif runid == 22 and ff2(p10main十, "点 Profile 去我页") then touch.tap(zProfile[1], zProfile[2]) end end if runid == 20 and ff2(p10main十, "#主页") then --行为 sys.msleep(1000) if 1>2 then --elseif os.time()-ttp >=delaytime and xingwei.rid==0 then elseif os.time()-ttp >=0 and (xingwei.rid==0 or xingwei.rid==1) then if ff2(p50可关注, "可关注") then if math.random(1,20) > 10 then klog("关注一个") touch.tap(Xin0, Yin0) sys.msleep(300) xingwei[4]=xingwei[4]+1 end if 1>0 and math.random(1,20) > 3 then klog("点赞一个") touch.tap(0.5*w, 0.5*h-10) sys.msleep(100) touch.tap(0.5*w, 0.5*h-10) sys.msleep(300) xingwei[2]=xingwei[2]+1 end if 1>2 and math.random(1,20) > 10 then klog("收藏一个") touch.tap(765, Yin0+360) sys.msleep(1000) xingwei[3]=xingwei[3]+1 end else if 1>0 and math.random(1,20) > 3 then klog("点赞一个") touch.tap(0.5*w, 0.5*h-10) sys.msleep(100) touch.tap(0.5*w, 0.5*h-10) sys.msleep(500) xingwei[2]=xingwei[2]+1 end end xingwei.rid=1 --sys.msleep(math.random(300,1000)) --elseif xingwei.rid==1 then klog("上滑视频") touch.on(0.5*w, 0.8*h):move(0.5*w,0.1*h):off() sys.msleep(500) xingwei[1]=xingwei[1]+1 xingwei.rid=0 delaytime = math.random(2,5) ttp = os.time() ttdog = os.time() else sys.msleep(1000) end --if (xingwei[2]>0 or xingwei[3] >0 or xingwei[4] >0) or xingwei[1] >=3 then if xingwei[2]>0 and xingwei[1] >=3 then klog("浏览:"..xingwei[1].." 点赞:"..xingwei[2].." 收藏:"..xingwei[3].." 关注:"..xingwei[4]) if selects['视频?'] then klog("去上传视频") runid = 22 else klog("去提参") runid = 26 end end end if runid >= 10 and runid < 13 then --密码 nick if 1>2 then elseif ff2(p44粘贴, "粘贴", 1) then elseif ff2(p43密码后异常, "【封禁】Your account was banned") then runid = 79 elseif ff2(p42密码, "--密码--") then zpsw[2] = Yin0 if (tt密码Next==nil or os.time()-tt密码Next>10) and ff2(p43密码已, "password 已完成 Next", 1) then runid = 11.6 tt密码Next = os.time() elseif ff2(p42密码未, "Create password") then if runid < 11 then runid = 11 end --touch.tap(zpsw[1], zpsw[2]); sys.msleep(500); key.send_text("Aa123123.", 200); sys.msleep(500) if runid == 11 then klog("输入 ".."Aa123123.") touch.tap(zpsw[1], zpsw[2]); sys.msleep(1000); sys.input_text("Aa123123."); sys.msleep(1000) runid = 11.5 end end elseif runid==12.3 and ff2(p46出提示, "出提示 左上skip 直接去提参 12.3") then if 1>0 then touch.tap(zskip[1], zskip[2]); sys.msleep(1500); runid = 12.6 elseif 1>2 then klog("此号放弃") runid = 80 end elseif ff2(p44昵称, "--昵称--") then local ynick = Yin0+265 flagocr = 1 if selects['nickname_Skip'] then --and ff2(p44昵称未, "Create nickname Skip") klog("Create nickname Skip") touch.tap(zskip[1], zskip[2]); sys.msleep(500); if runid < 12 then runid = 12 end elseif runid == 12.6 or (runid>=12.3 and ff2(p46出提示, "出提示 左上skip 直接去提参")) then touch.tap(zskip[1], zskip[2]); sys.msleep(1500); runid = 12.6 elseif runid >=12 and ff2(p45昵称已, "nickname 已完成 Confirm",1) then runid = 12.3 elseif not selects['nickname_Skip'] and ff2(p44昵称未, "Create nickname") then if runid < 12 then runid = 12 end if runid <= 12.2 then klog("随机nickname "..nickname) if resocr.kw == "Add your nickname" then ynick = resocr.y+15 elseif resocr.kw == "0/30" then ynick = resocr.y-83 end --touch.tap(znick[1], znick[2]); sys.msleep(500); key.send_text(nickname, 200); sys.msleep(500) touch.tap(znick[1], ynick); sys.msleep(500); sys.input_text(nickname); sys.msleep(1000) runid = runid +0.1 end elseif runid < 12 and ff2(p45昵称已X, "误输入? 先清空", 1) then elseif runid < 12 then ocrlog() end elseif ff2(p49SkipFace, "Skip: Face or Touch", 1) then end end if runid == 5 then --GG if 1>2 then elseif ff2(p30栏头accounts, "accounts.google.com") then flag当前状态 = {os.time(), "accounts.google.com"} if (getGG == nil or getGG.text1 == nil) and (ff2(p30框ZH, "账号框 蓝") or ff2(p30b框ZH灰, "账号框初始 灰")) then API_GG() elseif ff2(p30框ZH, "账号框 蓝") then local zX, zY = Xin0, Yin0 if ff2(p32账号已输入, "账号已输入") then if ff2(p30帐密Next, "Next",1) then sys.msleep(1500) elseif ff2(p32键盘Done, "键盘Done", 1) then end else klog("输入账号 "..getGG.text1) touch.tap(zX, zY); sys.msleep(500); sys.input_text(getGG.text1); sys.msleep(1000) end elseif ff2(p30b框ZH灰, "账号框初始 灰") then local zX, zY = Xin0, Yin0 klog("输入账号 "..getGG.text1) touch.tap(600, zY+50); sys.msleep(500); sys.input_text(getGG.text1); sys.msleep(1000) elseif ff2(p33框ZH灰, "账号框 灰") then local zX, zY = Xin0, Yin0 if ff2(p33账号已输入灰, "账号已输入 灰") then if ff2(p30帐密Next, "Next",1) then sys.msleep(1500) elseif ff2(p32键盘Done, "键盘Done", 1) then end else -- klog("输入账号 "..getGG.text1) -- touch.tap(zX, zY); sys.msleep(500); sys.input_text(getGG.text1); sys.msleep(1000) end elseif ff2(p34框MA, "密码框") then local zX, zY = Xin0, Yin0 if ff2(p35密码已输入, "密码已输入") then if ff2(p30帐密Next, "Next",1) then sys.msleep(1500) elseif ff2(p32键盘Done, "键盘Done", 1) then end else klog("输入密码 "..getGG.text2) touch.tap(zX, zY); sys.msleep(500); sys.input_text(getGG.text2); sys.msleep(1000) end elseif ff2(p36密码已输入灰, "密码已输入 灰") then if ff2(p30帐密Next, "Next",1) then sys.msleep(1500) elseif ff2(p32键盘Done, "键盘Done", 1) then end elseif ff2(p38ZM完成_Continue, "GG账号已填完 Continue", 1) then elseif ff2(p39人机检测, "邮箱不可用 人机检测") then record01(getGG.text1.."----"..getGG.text2) sys.msleep(2500) runid = 79 end elseif ff2(p40生日, "生日") or ff2(p42密码, "Create password") then phonecode = nil runid = 10 end end if runid >= 4 and runid < 5 then --Phone if 1>2 then elseif ff2(p28验证码弃号, "短信验证 红线 弃号") or ff2(p114_3弹窗Safety, "弹窗 Safety Verification 弃号") then runid = 80 elseif runid == 4.8 and (ff2(p28异常Log, "异常 Log 放弃") or ff2(p28_2Verify, "Verify identity 放弃")) then runid = 80 elseif ff2(p43密码后异常, "【封禁】Your account was banned") then runid = 79 elseif ff2(p27inputcode, "Enter 6/4-digit code") then if ff2(p28已输入code, "code 已输入") then getphone.inputcode = 1 sys.msleep(1000) elseif getphone ==nil then klog("左上返回"); touch.tap(zback[1], zback[2]) elseif phonecode ==nil then if API_phonecode() then ttdog = os.time() elseif c取码 == 4 then getphone = nil klog("验证码超时 放弃该号码") runid = 80 elseif c取码 == 1 then getphone = nil klog("两次验证码fail 放弃该号码") runid = 80 elseif c取码 == 0 and ff2(p29再发sms, "再发送一次sms",1) then c取码 = 1 end ttdog = os.time() elseif getphone.input == nil then klog("输入验证码 "..phonecode) runid = 4.8 getphone.input = 1 inputDigit(phonecode) sys.msleep(1000) --app.input_text(phonecode) ttdog = os.time()+36 elseif getphone.input == 1 and getphone.inputcode ==nil then inputDigit(phonecode) sys.msleep(1000) end elseif ff2(p27弹窗Create, "弹窗 Create account", 1) then elseif selects["区号"]=="CA" and ff2(p24选Canada, "选 Canada +1", 1) then elseif selects["区号"]=="UK" and ff2(p24选UK, "选 UK +44", 1) then --elseif ff2(p23点K, "选国家区号 点K", 1) then elseif ff2(p23国家_英, "国家区号列表") then if selects["区号"]=="CA" and ff2(p23字母C, "字母列表 点C") then touch.tap(Xin0+1, Yin0+60) sys.msleep(500) elseif selects["区号"]=="CA" then touch.tap(z字母C[1], z字母C[2]) sys.msleep(500) elseif selects["区号"]=="UK" and ff2(p23字母C, "字母列表 点U") then touch.tap(Xin0+1, Yin0+568) sys.msleep(500) elseif selects["区号"]=="UK" then touch.tap(z字母K[1], z字母K[2]) sys.msleep(500) end elseif ff2(p23国家_马, "选国家区号 马") then ff2(p23马点K, "点字母K", 1) elseif ff2(p23国家_3, "选国家区号3") then touch.tap(z字母C3[1],z字母C3[2]) sys.msleep(500) elseif ff2(p22Phone栏目, "Phone栏目") then if (selects["区号"]=="CA" and ff2(p25CA_1, "CA +1")) or (selects["区号"]=="UK" and ff2(p25UK_44, "UK +44")) then zinputPhone[2] = Yin0 if (getphone == nil or getphone.text1 == nil) then if ff2(p25未phone,"未输 phone number") and ((selects["功能"]=="注册" and API_phone()) or (selects["功能"]=="换绑" and API_待换绑_phone())) then phonecode =nil --取码 初始化 c点continue = 0 c取码 = 0 elseif ff2(p26Sendcode, "清空已输入") then ff2(p26_2clear, "灰叉叉", 1) --touch.tap(zclear[1], zclear[2]) end elseif getphone.text1 then if ff2(p26_2Sendcode异常, "Send code 异常 红线红字") then Sendcode异常 = Sendcode异常+1 end if Sendcode异常 >=2 then klog("弃号") runid = 80 elseif c点continue >= 4 then klog("点Continue连续4次没反应,弃号") runid = 80 elseif ff2(p26Sendcode, "Send code", 1) then c点continue = c点continue+1 sys.msleep(5000) elseif ff2(p25未phone,"输入 "..getphone.text1) then --klog("输入 "..getphone.text1) --touch.tap(zinputPhone[1], zinputPhone[2]); sys.msleep(1000); touch.tap(Xin0, Yin0); sys.msleep(1000); inputDigit(getphone.text1) sys.msleep(500) --app.input_text(getphone.text1); end end elseif ff2(p22Phone栏目r, "Phone栏目ocr") and ff2(p22箭头, "去重选区号", 1) then ocrlog() end elseif ff2(p21_2Usephone, "--Phone number--") then if ff2(p25_2CA_1, "CA_2 +1") then local Yinput = Yin0 if (getphone == nil or getphone.text1 == nil) then if ff2(p25_2未phone,"未输_2 phone number") and API_phone() then phonecode =nil --取码 初始化 c点continue = 0 c取码 = 0 elseif ff2(p26_2clear, "清空已输入", 1) then end elseif getphone.text1 then if ff2(p26_2Sendcode异常, "Send code 异常 红线红字") then Sendcode异常 = Sendcode异常+1 end if Sendcode异常 >=2 then klog("弃号") runid = 80 elseif c点continue >= 4 then klog("点Continue连续4次没反应,弃号") runid = 80 elseif ff2(p26_2clear, "已输入") and ff2(p26_2continue, "Continue", 1) then c点continue = c点continue+1 sys.msleep(5000) elseif ff2(p25未phone,"输入 "..getphone.text1) then --klog("输入 "..getphone.text1) touch.tap(0.6*w, Yinput); sys.msleep(1000); inputDigit(getphone.text1) sys.msleep(500) --app.input_text(getphone.text1); end end elseif ff2(p22箭头, "去重选区号", 1) then end elseif ff2(p22Email栏目, "切换Phone栏目") then touch.tap(zPhone[1],zPhone[2]) elseif ff2(p40生日, "生日") or ff2(p42密码, "Create password") then phonecode = nil runid = 10 end end if runid == 3 then --Sign up if 1>2 then elseif flag备份做号 == false and ff2(p20Signup, "Sign up 去注册",1) then elseif flag备份做号 == false and ff2(p20Signup_r, "Log in to TikTok 页") and ff2(p20Signup_clk, "点 Sign up 去注册", 1) then elseif flag备份做号 and ff2(p20Usephone, "备份做号 Log in Use phone",1) then elseif ff2(p21inSignup, "PAGE Sign up") then if flag注册方式=='GG' and ff2(p21Google, "Continue with Google",1) then elseif flag注册方式=='Phone' and ff2(p21Usephone, "Use phone or email",1) then elseif flag注册方式=='Phone' and ff2(p21_2Usephone, "Use phone 在Sign up") then runid = 4 end elseif ff2(p21GGcontinue, "弹窗google.com continue", 1) then elseif ff2(p30栏头accounts, "accounts.google.com") then ttdog = os.time()+30 runid = 5 elseif ff2(p22Phone栏目, "Phone栏目") or ff2(p22Email栏目, "Email栏目") then runid = 4 end end if runid == 3 or runid == 10 then --生日 if ff2(p40生日, "#生日") then if ff2(p40生日未, "生日未选") then if birthday() then ttdog = os.time() else klog("生日过不去 退出重新来") runid = 80 end elseif c生日确认 >= 8 then klog("点生日确认 超时 退出重新来") runid = 80 elseif os.time()-tt生日确认>4 and ff2(p41生日已, "生日已选好 Next", 1) then c生日确认 = c生日确认+1 tt生日确认 = os.time() end elseif ff2(p40生日暗背, "生日背景暗") then if ff2(p40生日弹窗OK, "生日弹窗OK", 1) then end end end if runid == 2 or runid == 0 then -- Sign up 入口 if 1>2 then elseif ff2(p20Signup, "Log in to TK") or ff2(p20Usephone, "Log_2 in to TK") then if getAPI_keep == 0 then getGG = nil getphone = nil else klog("保留 上次的API数据") getAPI_keep = getAPI_keep-1 end runid = 3 elseif ff2(p21inSignup, "PAGE Sign up") then if getAPI_keep == 0 then getGG = nil getphone = nil else klog("保留 上次的API数据") getAPI_keep = getAPI_keep-1 end runid = 3 end end if runid == 0 or runid == 4.8 or (runid >=12 and runid<13) then --兴趣 tk兴趣() end --主页 视频 弹出 if runid>=0 and (runid <=2 or runid==4 or runid==4.8 or runid==5 or (runid > 10 and runid <=18) or (runid >=20 and runid <=28)) then if runid<20 and ff2(p10main十, "main十") then if runid < 2 then runid = 2 sys.msleep(1.5*1000) elseif runid == 2 then klog("点 Profile") touch.tap(zProfile[1], zProfile[2]) elseif runid == 4.8 or runid==5 then klog("已注册过 直接登录进去了 去提参") runid = 26 vartk.f已注册过 = "已注册过" --klog("已注册过 直接登录进去了 放弃这个号") runid = 80 elseif runid == 12.6 then flag异常状态.p46[1] = flag异常状态.p46[1]+1 klog("直接去提参") runid = 26 elseif runid > 10 and runid < 13 then runid = 18 sys.msleep(1.5*1000) elseif runid == 18 then if (selects['行为?']) then klog("去点赞关注") runid = 20 ttp = os.time() elseif (selects['视频?']) then klog("去上传视频") runid = 22 else klog("去提参") runid = 26 end end elseif ff2(p01_AgreeandContinue_A, "Agree and Continue _A") and ff2(p01_AgreeandContinue_B, "Agree and Continue _B", 1) then sys.msleep(1000) elseif ff2(p01_AgreeandContinue, "Agree and Continue", 1) then sys.msleep(1000) elseif ff2(p51Notnow, "弹出菜单 Not now", 1) then elseif ff2(p53_Faham, "弹出菜单 Faham 弃号") then --if runid > 10 and runid<26 then runid = 26 end runid = 80 elseif ff2(p56弹窗弃号, "弹窗弃号56") then runid = 80 elseif ff2(p弹窗弃号, "弹窗弃号") or ff2(p弹窗选language, "弹窗 选language 放弃") then runid = 80 elseif ff2(p弹窗reconfirm, "弹窗 Reconfirm", 1) then elseif ff2(p102足迹save, "足迹save叉掉102", 1) then elseif ff2(p105弹窗Dont, "弹窗 Don't allow",1) then elseif ff2(p10main暗, "main暗_zc") then if 1>2 then elseif ff2(p旋码2, "弹窗 旋码 叉掉", 1) then elseif ff2(p弹窗Accept_Terima, "弹窗 Accept_Terima", 1) then elseif ff2(p10swipeup, "swipe up 上滑一下 <注>") then tkSwipeUpForMore("swipe up 上滑一下 <注>", true) end elseif ff2(p弹窗Accept_Terima, "弹窗 Accept_Terima", 1) then elseif ff2(p弹窗Update_Accept, "p弹窗Update_Accept", 1) then elseif runid > 10 and ff2(p51Notnow_a, "#弹出菜单 Not now") and ff2(p51Notnow_b, "弹出菜单 Not now", 1) then elseif runid > 10 and ff2(p52OK, "弹出菜单 OK", 1) then elseif runid > 10 and ff2(p54_AD叉, "弹出广告 叉掉", 1) then elseif runid > 10 and ff2(p55_Choose_select, "Choose Generic ads", 1) then elseif runid >= 20 and ff2(p103叉掉菜单, "叉掉菜单103", 1) then elseif ff2(p99tk欢迎页, "tk欢迎页 Agree", 1) then -- elseif runid == 18 and ff2(p60我页, "我页,可能注册成功了!") then -- runid = 26 end end if runid == -0.5 then --简单重启TK入口 if Check_app("com.zhiliaoapp.musically") then sys.msleep(1500) end vartk = {} ttdog = os.time() runid = 0 end if runid == -1 then --备份清机启动 tk备份清机启动() sys.msleep(1000) ttdog = os.time() runid = 0 end if runid == -2 then --清理safari if flag注册方式 == 'GG' then if 清理safari0() then runid = -1 end elseif flag注册方式 == 'Phone' then runid = -1 end end screen.unkeep() sys.msleep(500) ttnow = os.time() if tttap[2]>=10 and ttnow-tttap[1] >30 then klog("重复点击异常 手机卡死? 注册暂停,重来") tttap = {os.time(),0, x=-1,y=-1} runid = 80 end if ttnow-ttdog > t重启 then if 1>2 then elseif ttnow - flag当前状态[1]<5 then --特殊情况 if ttnow-ttdog > 59 then if flag当前状态[2] == '验证弹窗加载中' then klog("Phone注册超时 清空环境 重来") runid = 80 elseif flag当前状态[2] == "accounts.google.com" then klog("加载accounts.google.com 超时 清safari 重来") getAPI_keep = 1 --保持数据 runid = 79 end else sys.msleep(1500) end else klog("超时 清空环境 重来") runid = 80 end end if 1>2 and ttnow-ttdog > t卡停 and ttnow-ttshot > 10 then local choice = sys.alert("【卡停】截屏+日志?", 3, '请选择', '取消', '截屏上传') if choice==0 then --点取消 elseif choice==0.1 then marklog = os.date("!%Y%m%d-%H%M%S", os.time()+seczone) klog("\n【截屏】\n") sys.msleep(300) screen.image():save_to_png_file("/var/mobile/Media/1ferver/res/"..marklog..".png") elseif choice==1 then marklog = os.date("!%Y%m%d-%H%M%S", os.time()+seczone) klog("\n【截屏上传】\n") sys.msleep(300) screen.image():save_to_png_file("/var/mobile/Media/1ferver/res/"..marklog..".png") upload() elseif choice==2 then --超时没选 else --其他不知道的问题 end ttshot = os.time() end if ttnow-ttISO > 15 then sys.toast(ISO) ttISO = ttnow end end end function tk兴趣() if 1>2 then elseif ff2(p01_AgreeandContinue_A, "Agree and Continue _A") and ff2(p01_AgreeandContinue_B, "Agree and Continue _B", 1) then --elseif ff2(p01_AgreeandContinue, "Agree and Continue", 1) then elseif ff2(p02_兴趣悬浮字, "兴趣悬浮白字", 1) then --elseif ff2(p02_兴趣, "兴趣Choose页") and ff2(p01_AgreeandContinue_B, "兴趣已选02", 1) then elseif ff2(p02_Skip未选, "Skip 未选兴趣", 1) then elseif ff2(p03_Swipe_startwatching, "Swipe up to start watching") then touch.on(0.5*w, 0.9*h):step_len(20):step_delay(5):move(0.5*w,0.2*h):off() sys.msleep(3000) ttdog = os.time() elseif ff2(p10main暗, "main暗_<兴>") then local ix = Ix if 1>2 then elseif ix <=2 and ff2(p旋码2, "弹窗 旋码 叉掉", 1) then elseif 1>2 and (ix <=2 or ix ==5) and (ff2(p10swipeup, "swipe up 上滑一下_<兴>") or (runid==116 and os.time()-ttdog>10)) then ocrlog() touch.on(0.5*w, 0.8*h):move(0.5*w,0.2*h):off() sys.msleep(3000) --ttdog = os.time() end elseif ff2(p03_startwatching, "Start watching", 1) then elseif ff2(p02_兴趣, "兴趣Choose页") then if ff2(p04兴趣未, "兴趣 未选 随机点") then touch.tap(math.random(math.floor(0.15*w), math.floor(0.7*w)), math.random(math.floor(0.4*h), math.floor(0.8*h))) if math.random(143, 672) > 400 then klog("上翻一下 继续点") touch.on(0.5*w, 0.8*h):move(0.5*w,0.2*h):msleep(100):off() sys.msleep(1000) touch.tap(math.random(math.floor(0.15*w), math.floor(0.7*w)), math.random(math.floor(0.4*h), math.floor(0.8*h))) end elseif 1>2 and ff2(p02_兴趣未, "兴趣未选 随机点02") then touch.tap(math.random(math.floor(0.15*w), math.floor(0.7*w)), math.random(math.floor(0.4*h), math.floor(0.8*h))) elseif ff2(p05兴趣已, "兴趣已选", 1) then end --elseif ff2(p06兴趣已, "兴趣已选 skip", 1) then end end function testtoken() -- if 1>0 then --kg提参 if CK提取_kg_12() then tokenbase64 = tkstr64 getGG = {["tuid"] = "tuid0001", ["text1"] = "myemail@123.com", ["text2"] = "Aa123123"} screen_name = "usertest8725836514891" ISO = "MY" if 1>2 and API_token() then sys.toast("【注册成功】token上传成功") sys.msleep(2000) runid = 80 else runid = 80 end else sys.toast("kg提参 异常") sys.msleep(5000) end end end function testtoken2() -- if 1>0 then --kg提参 if CK提取_kg_12() then tokenbase64 = tkstr64 getGG = {["tuid"] = "tuid0001", ["text1"] = "myemail@123.com", ["text2"] = "Aa123123"} screen_name = "usertest8725836514891" ISO = "MY" if 1>2 and API_token() then sys.toast("【注册成功】token上传成功") sys.msleep(2000) runid = 80 else runid = 80 end else sys.toast("kg提参 异常") sys.msleep(5000) end end end function tk截屏日志(text) if text == nil then text = "" else text = "_"..text end local filename = "tk报错_"..os.date("!%Y%m%d-%H%M%S", os.time()+seczone)..text klog("\n\n"..filename) screen.image():save_to_png_file("/var/mobile/Media/1ferver/res/"..filename..".png") --os.execute('cp -rf '..logfile..' '.."/var/mobile/Media/1ferver/res/"..filename..".log") os.execute('cp -rf '..syslogfile..' '.."/var/mobile/Media/1ferver/res/"..filename..".log") sys.msleep(1000) end function tk强制休息() local rest原因 = "" if flag异常状态.p46[1] > flag异常状态.p46[2] then if flag异常状态.p46[1] >=3 then rest原因 = "昵称出提示 连续3次" flag异常状态.p46 = {0,0} else flag异常状态.p46[2] = flag异常状态.p46[1] end else flag异常状态.p46 = {0,0} end if rest原因 == "" then --正常运行 else local ttrest = os.time() local tt0, tt1 while true do tt0 = os.time() - ttrest if tt0 >= 20*60 then break end tt1 = math.floor(tt0/60) tt2 = tt0%60 sys.toast("强制休息 20分钟\n原因: "..rest原因.."\n\n已执行 "..tt1.."分"..tt2.."秒",3) sys.msleep(5000) end end end function tk备份清机启动() local runidc = 0 local twait = math.random(tk延迟min, tk延迟max) if flag备份做号 then if c号 == 0 or c号 >= c号max then c号 = 0 runidc = 0 klog("【重新一轮备份做号】第"..tostring(c号+1).."个") sys.alert("【重新一轮备份做号】\n第"..tostring(c号+1).."个", 3) else runidc = 4 klog("【备份做号】第"..tostring(c号+1).."个") sys.alert("【备份做号】\n第"..tostring(c号+1).."个",3) end else runidc = 5.5 end while true do if 1>2 then elseif runidc == 0 then if VPN开启() and Deam.New(string.lower(ISO)) then sys.msleep(1500) runidc = 0.5 else sys.msleep(1500) end elseif runidc == 0.5 then VPN开启() --调用Deam前 先开vpn Deam.DelBackUp() sys.msleep(1500) runidc = 1 elseif runidc == 1 then VPN开启() --重启tk前 先开vpn if Check_app("com.zhiliaoapp.musically") then runidc = 2 klog("随机延迟 "..twait.."秒") local ttend = os.time()+twait while true do local t剩 = ttend-os.time() if t剩 <10 then sys.msleep(t剩*1000) break else toast("随机延迟 "..twait.."秒\n还剩"..t剩.."秒") sys.msleep(10*1000) end end end elseif runidc == 2 then if Close_app("com.zhiliaoapp.musically") then --if tk清后台() then runidc = 3 end elseif runidc == 3 then if Deam.Backup("2019aa") then sys.msleep(2500) runidc = 4 else sys.msleep(1500) end elseif runidc == 4 then if VPN开启() and Deam.New(string.lower(ISO)) then sys.msleep(1500) runidc = 4.5 else sys.msleep(1500) end elseif runidc == 4.5 then VPN开启() if Deam.Restore("2019aa") then sys.msleep(1500) runidc = 5 else sys.msleep(1500) end elseif runidc == 5 then if Check_app("com.zhiliaoapp.musically") then --if flag备份做号 then c号 = c号 + 1 end return true end elseif runidc == 5.5 then if Deam.New(string.lower(ISO)) then --仅用ncitys sys.msleep(1500) runidc = 5 VPN开启() --重启tk前 先开vpn else sys.msleep(1500) end end sys.msleep(500) end end function tk清后台() -- 708,213,0x54f6f1 ptk后台图标 = {{708,213,0x54f6f1},{710,213,0xf8f8f8},{712,213,0xf8f8f8},{714,213,0xf63d62},{714,218,0xf52f57},{714,207,0xf73d62},{720,203,0xfafafa},{723,203,0xf22b54},{708,199,0x55f9f4},{710,192,0x70f8f4},{711,226,0xe7274e},{708,223,0xf5f5f5},{706,221,0x20ede7},{703,218,0x000000},{701,216,0x000000},{698,214,0xf52851},{695,212,0xf8f8f8},{693,210,0x3bf1eb},{690,207,0x000000},{720,195,0x000000}} screen.unkeep() local tthome = os.time()-10 local runide = 0 while true do if runide == 0 then if app.is_running("com.zhiliaoapp.musically") then runide = 1 else klog("已关闭 "..appname) return true end end if runide >= 1 then if 1>2 then elseif ff2(ptk后台图标, "tk后台图标 上划") then tmove(Xin0+38,0.6*h,Xin0+38,0.1*h) sys.msleep(1000) runide = 1.5 elseif runide == 1 and os.time() - tthome > 6 then klog("双击调后台") key.press("HOMEBUTTON") key.press("HOMEBUTTON") sys.msleep(1000) tthome = os.time() elseif runide == 1.5 then if app.is_running("com.zhiliaoapp.musically") then runide = 1 else klog("已关闭 "..appname) return true end end end sys.msleep(500) end end function tk清全部后台() klog("【空闲清理】连续无任务超过10次,双击Home后清理全部后台") screen.unkeep() key.down("HOMEBUTTON") sys.msleep(100) key.up("HOMEBUTTON") sys.msleep(50) key.down("HOMEBUTTON") sys.msleep(100) key.up("HOMEBUTTON") sys.msleep(1200) -- iPhone 6s 750x1334:按录制手势最多连续上滑5张后台卡片。 for i=1,5 do touch.on(0.75*w, 0.77*h):step_len(18):step_delay(4):move(0.86*w, 0.57*h):off() sys.msleep(700) end key.press("HOMEBUTTON") sys.msleep(800) klog("【空闲清理】后台清理完成,返回Home等待任务") return true end function inputDigit(numstr) --828 x 1792 local z = {{413,1583}, {142,1252}, {413,1252}, {693,1252}, {142,1366}, {413,1366}, {693,1366}, {142,1470}, {413,1470}, {693,1470}} --0~9 if w == 750 then z = {{375,1281}, {127,956}, {375,956}, {625,956}, {127,1064}, {375,1064}, {625,1064}, {127,1170}, {375,1170}, {625,1170}} --0~9 elseif w ~= 828 then z = { {math.floor(w*0.499), math.floor(h*0.883)}, {math.floor(w*0.171), math.floor(h*0.699)}, {math.floor(w*0.499), math.floor(h*0.699)}, {math.floor(w*0.837), math.floor(h*0.699)}, {math.floor(w*0.171), math.floor(h*0.762)}, {math.floor(w*0.499), math.floor(h*0.762)}, {math.floor(w*0.837), math.floor(h*0.762)}, {math.floor(w*0.171), math.floor(h*0.820)}, {math.floor(w*0.499), math.floor(h*0.820)}, {math.floor(w*0.837), math.floor(h*0.820)} } end for i=1, #numstr do local p = string.sub(numstr, i,i) p = tonumber(p) + 1 touch.tap(z[p][1],z[p][2]) sys.msleep(150) end end function tkAuth2faPageRecovery() if flag_2fa ~= "Auth" then return false end if runid >= 114 and runid < 120 then return false end local txt = ocrtext or "" local txt_l = string.lower(txt) if not string.match(txt_l, "2%-step verification") then return false end if not string.match(txt_l, "authenticator") then return false end if not string.match(txt_l, "your code was sent") then return false end if not (string.match(txt, "MNO") and string.match(txt, "WXYZ")) then return false end klog("Auth 2FA 页面已出现,切换到 [116]") runid = 116 ttdog = os.time() if type(vartk) == "table" then vartk.skipFaceB_bad = 0 vartk.skipFaceB_ignore_until = os.time() + 10 end return true end function tkSwipeUpForMore(tag, force) if type(vartk) ~= "table" then vartk = {} end if c上滑swipe == nil then c上滑swipe = 0 end if c上滑卡住恢复 == nil then c上滑卡住恢复 = 0 end if not force then local txt = ocrtext or "" local txt_l = string.lower(txt) local has_swipe_prompt = string.match(txt_l, "swipe up for more") or (string.match(txt_l, "swipe") and string.match(txt_l, "for more")) local logged_in_home = string.match(txt_l, "for you") and string.match(txt_l, "profile") and string.match(txt_l, "home") if vartk.logged_home_swipe_attempted and not has_swipe_prompt then vartk.logged_home_swipe_attempted = nil vartk.swipe_up_more_tt = nil c上滑swipe = 0 tt上滑卡住开始 = nil if flag新机登录 then klog((tag or "Swipe up for more").." 新机首次登录引导已消失,继续正常登录流程") ttdog = os.time() return true end klog((tag or "Swipe up for more").." 提示已消失,按登录成功直接提参") flag登录完待提参 = true flag本账号已提参 = false SelfProfile = {status="nil"} runid = 118.8 ttdog = os.time() return true end if vartk.logged_home_swipe_attempted and has_swipe_prompt then if vartk.swipe_up_more_tt ~= nil and os.time() - vartk.swipe_up_more_tt < 5 then return true end if flag新机登录 then klog((tag or "Swipe up for more").." 新机首次登录引导仍存在,重启TK后继续正常登录流程") flagSwipe重启后提参 = nil else klog((tag or "Swipe up for more").." 一次强滑后提示仍存在,重启TK并重新提参") flagSwipe重启后提参 = true end flag本账号已提参 = false Close_app("com.zhiliaoapp.musically") c上滑swipe = 0 tt上滑卡住开始 = nil runid = 102 ttdog = os.time() return true end if logged_in_home and not has_swipe_prompt then return false end if logged_in_home and has_swipe_prompt then if tt上滑卡住开始 == nil then tt上滑卡住开始 = os.time() end vartk.swipe_up_more_tt = os.time() vartk.logged_home_swipe_attempted = true c上滑swipe = 1 klog((tag or "Swipe up for more").." 登录主页引导层,仅执行一次大幅上滑") screen.unkeep() sys.msleep(100) touch.on(0.50*w, 0.86*h):step_len(8):step_delay(2):move(0.50*w, 0.12*h):msleep(100):off() ttdog = os.time() sys.msleep(3000) return true end local hit = has_swipe_prompt if not hit and not ff2(p10swipeup, tag or "Swipe up for more") then return false end end if tt上滑卡住开始 == nil then tt上滑卡住开始 = os.time() end if c上滑swipe >= 6 or os.time() - tt上滑卡住开始 >= 45 then c上滑卡住恢复 = c上滑卡住恢复 + 1 local recover_count = c上滑卡住恢复 local reason = (tag or "Swipe up for more").." 持续未消失,恢复第"..tostring(recover_count).."次" klog(reason) sys.toast("滑动引导卡住,正在恢复 "..tostring(recover_count).."/3", 3) Close_app("com.zhiliaoapp.musically") sys.msleep(1500) c上滑swipe = 0 tt上滑卡住开始 = nil if recover_count == 1 then klog("首次卡住,重启TK继续当前登录") runid = 102 elseif recover_count == 2 then klog("重启后仍卡住,切换IP并新机重登录") flag新机登录 = true flag强制切换IP一次 = true vartk.fg新机重登录 = true runid = 100 else klog("换IP新机后仍卡住,结束当前账号") API_设备log(tostring(uid).." 登录引导页卡住,恢复3次后放弃") API_上传log("登录引导页卡住") runid = 129.9 end ttdog = os.time() return true end if vartk.swipe_up_more_tt ~= nil and os.time() - vartk.swipe_up_more_tt < 6 then return true end vartk.swipe_up_more_tt = os.time() klog((tag or "Swipe up for more").." fast swipe") screen.unkeep() sys.msleep(80) local zsw = { {0.43, 0.48, 0.43, 0.20}, {0.50, 0.52, 0.50, 0.22}, } for i = 1, #zsw do local p = zsw[i] touch.on(p[1]*w, p[2]*h):step_len(10):step_delay(1):move(p[3]*w, p[4]*h):msleep(40):off() sys.msleep(420) end sys.msleep(1800) c上滑swipe = c上滑swipe + 1 ttdog = os.time() return true end function tkLoggedInProfilePage(tag) if not ff2(p60我页, tag or "已登录本人Profile页") then return false end local txt_l = string.lower(ocrtext or "") local has_handle = string.match(txt_l, "@[%w%._]+") ~= nil local has_following = string.match(txt_l, "following") ~= nil local has_followers = string.match(txt_l, "followers") ~= nil local has_profile_action = string.match(txt_l, "edit profile") ~= nil or (string.match(txt_l, "edit") ~= nil and string.match(txt_l, "add bio") ~= nil) if has_handle and has_following and has_followers and (has_profile_action or string.match(txt_l, "like") ~= nil) then klog((tag or "已登录本人Profile页").." 组合特征确认成功") return true end return false end function tkHomeBrightness() local pts = { {0.50, 0.34}, {0.50, 0.46}, {0.50, 0.58}, {0.32, 0.48}, {0.68, 0.48}, {0.50, 0.70}, } local sum, n = 0, 0 for i = 1, #pts do local x = math.floor(w * pts[i][1]) local y = math.floor(h * pts[i][2]) local r, g, b = screen.get_color_rgb(x, y) if r and g and b then sum = sum + (0.299 * r + 0.587 * g + 0.114 * b) n = n + 1 end end if n <= 0 then return 0 end return math.floor(sum / n) end function tkLoginHomeSwipeByBrightness(tag) if type(vartk) ~= "table" then vartk = {} end if vartk.login_home_swipe_done then return false end vartk.login_home_swipe = vartk.login_home_swipe or 0 if vartk.login_home_swipe >= 2 then klog("登录主页亮度滑动已尝试2次,转Profile") return false end local before = tkHomeBrightness() vartk.login_home_swipe = vartk.login_home_swipe + 1 klog((tag or "登录主页亮度滑动").." 前亮度:"..tostring(before).." 次数:"..tostring(vartk.login_home_swipe)) screen.unkeep() sys.msleep(80) local zsw = { {0.43, 0.52, 0.43, 0.18}, {0.50, 0.56, 0.50, 0.20}, } for i = 1, #zsw do local p = zsw[i] touch.on(p[1]*w, p[2]*h):step_len(10):step_delay(1):move(p[3]*w, p[4]*h):msleep(50):off() sys.msleep(250) end sys.msleep(700) screen.keep() local after = tkHomeBrightness() local diff = after - before klog((tag or "登录主页亮度滑动").." 后亮度:"..tostring(after).." 差值:"..tostring(diff)) c上滑swipe = (c上滑swipe or 0) + 1 ttdog = os.time() if diff >= 18 then vartk.login_home_swipe_done = true klog("登录主页遮罩亮度变亮,判断滑过成功") end return true end function tkClearHomeProfileNavigationWatchdog(reason) if type(vartk) ~= "table" then vartk = {} end local had_watchdog = vartk.home_profile_click_tt ~= nil vartk.home_profile_click_tt = nil vartk.home_profile_wait_logged = nil local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end local restart_count = 0 if type(appAccount) == "table" then restart_count = tonumber(appAccount.homeProfileRestartCount or 0) appAccount.homeProfileRestartCount = 0 end if had_watchdog or restart_count > 0 then klog((reason or "已离开主页")..",清除主页转Profile超时计数") end end function tkHomeProfileNavigationWatchdog() if type(vartk) ~= "table" then vartk = {} end local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end if vartk.home_profile_click_tt then local wait_seconds = os.time() - vartk.home_profile_click_tt if wait_seconds >= 10 then local restart_count = 1 if type(appAccount) == "table" then appAccount.homeProfileRestartCount = tonumber(appAccount.homeProfileRestartCount or 0) + 1 restart_count = appAccount.homeProfileRestartCount end vartk.home_profile_click_tt = nil vartk.home_profile_wait_logged = nil if restart_count <= 2 then klog("主页点Profile后10秒未跳转,重启TK继续当前账号 "..tostring(restart_count).."/2") Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 else klog("主页转Profile重启2次后仍未跳转,当前账号加入队列末尾") API_设备log(tostring(uid).." 主页转Profile重启2次后仍未跳转,加入队列末尾") if type(appAccount) == "table" then appAccount.homeProfileRestartCount = 0 end runid = 129.8 end ttdog = os.time() return true end if not vartk.home_profile_wait_logged then klog("主页Profile已点击,等待Profile页跳转,不再重复点击") vartk.home_profile_wait_logged = true end return true end klog("登录已到Home主页且无Swipe,点Profile并等待跳转") screen.unkeep() sys.msleep(300) touch.tap(zProfile[1], zProfile[2]) cp60 = 0 sys.msleep(800) vartk.home_profile_click_tt = os.time() ttdog = os.time() return true end function tk_Auth2fa_loading() if runid < 114 or runid >= 120 or flag_2fa ~= "Auth" then return false end local txt = ocrtext or "" local txt_l = string.lower(txt) if string.match(txt_l, "authenticator") then return false end if not (string.match(txt, "MNO") and string.match(txt, "WXYZ")) then return false end if type(vartk) ~= "table" then vartk = {} end if not interv(vartk.auth2fa_loading_tap, 5) then return true end local x1, y1 = math.floor(w * 0.42), math.floor(h * 0.44) local x2, y2 = math.floor(w * 0.58), math.floor(h * 0.56) local cx, cy = math.floor(w * 0.50), math.floor(h * 0.50) local data = { {cx, cy, 0x7f7f7f}, {cx - 18, cy, 0x7f7f7f}, {cx + 18, cy, 0x7f7f7f}, {cx, cy - 18, 0x7f7f7f}, {cx, cy + 18, 0x7f7f7f}, region = {x1, y1, x2, y2}, sim = 88 } local xx, yy = screen.find_color(data, 88, x1, y1, x2, y2) if xx and xx > 0 then local tx, ty = math.floor(w * 0.50), math.floor(h * 0.42) klog("Auth 2FA loading菊花 点灰色区域继续 "..tx..","..ty) touch.tap(tx, ty) if Verify_Code6 ~= nil then tt输入Verify_Code6 = os.time() - 20 end ttdog = os.time() screen.unkeep() sys.msleep(1200) return true end return false end function tk_Auth2fa_ocr兜底() if runid < 114 or runid >= 120 or flag_2fa ~= "Auth" then return false end if tk_Auth2fa_loading() then return true end local txt = ocrtext or "" local txt_l = string.lower(txt) if not string.match(txt_l, "authenticator") then return false end if not (string.match(txt_l, "authenticator app") or string.match(txt_l, "2%-step verification") or string.match(txt_l, "verification")) then return false end if type(vartk) ~= "table" then vartk = {} end local has_kb = string.match(txt, "MNO") and string.match(txt, "WXYZ") local is_underline_auth = string.match(txt_l, "2%-step verification") and string.match(txt_l, "your code was sent") -- 验证码输入后键盘会收起;必须先点 Continue,不能再落入“点第1格”分支。 if Verify_Code6 ~= nil and os.time()-tt输入Verify_Code6 <= 15 and not has_kb then if interv(vartk.auth2fa_continue, 2) then local clicked_continue = ff2(p140Verify2_Code已_continue, "Auth 2FA OCR兜底 点Continue", 1) if not clicked_continue then for _, item in pairs(ocrinfo or {}) do if type(item) == "table" and item.text and string.match(string.lower(item.text), "continue") and tonumber(item.y) then local tx, ty = math.floor(w*0.5), math.floor(item.y+12) klog("Auth 2FA OCR兜底 OCR点Continue "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() clicked_continue = true break end end end if not clicked_continue and is_underline_auth and string.match(txt_l, "continue") then local tx, ty = math.floor(w*0.5), math.floor(h*0.925) klog("Auth 2FA OCR兜底 坐标点Continue "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() clicked_continue = true end if clicked_continue then vartk.auth2fa_continue = os.time() ttdog = os.time() sys.msleep(800) end end return true end if (not has_kb) and is_underline_auth then if interv(vartk.auth2fa_focus, 2) then if not ff2(p138第1格, "Auth 2FA OCR兜底 点第1格", 1) then local tx, ty = math.floor(w*0.13), math.floor(h*0.265) klog("Auth 2FA OCR兜底 坐标点第1格 "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() end vartk.auth2fa_focus = os.time() sys.msleep(700) end return true end if Verify_Code6 == nil then klog("Auth 2FA OCR兜底 取码") if API_2fa(codeAddress) then tt输入Verify_Code6 = os.time()-20 else return true end end if Verify_Code6 ~= nil and os.time()-tt输入Verify_Code6 > 10 then klog("Auth 2FA OCR兜底 输入验证码 "..Verify_Code6) if has_kb then inputDigit(Verify_Code6) else touch.tap(math.floor(w*0.14), math.floor(h*0.26)) sys.msleep(200) inputDigit(Verify_Code6) end tt输入Verify_Code6 = os.time() vartk.auth2fa_continue = os.time() sys.msleep(400) end return true end function tkTikTokShopSelect() if ff2(p55_Choose_select, "Choose Generic ads", 1) then return true end local txt_l = string.lower(ocrtext or "") local has_shop = string.match(txt_l, "tiktok shop") ~= nil local has_select = string.match(txt_l, "select") ~= nil local has_choice = string.match(txt_l, "personalized") or string.match(txt_l, "generic") or string.match(txt_l, "relevant") if not (has_shop and has_select and has_choice) then return false end local tx = math.floor(w * 0.50) local ty = math.floor(h * 0.76) klog("TikTok Shop Select OCR兜底 "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(700) ttdog = os.time() return true end function tkSignUpPageLogin() if not ff2(p21inSignup, "Sign up For TK 底部Log in页") then return false end local tx = math.floor(w * 0.72) local ty = math.floor(h * 0.94) klog("Sign up For TK 点底部 Log in 兜底 "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(700) ocrtext = "" ttdog = os.time() return true end function tkVerifyEmailMethodFallback() if runid < 114 or runid >= 120 then return false end if flag_2fa ~= "outlook" and flag_2fa ~= "Email" then return false end if type(vartk) ~= "table" then vartk = {} end local txt_l = string.lower(ocrtext or "") if not string.match(txt_l, "verify it's really you") then return false end if not string.match(txt_l, "email") then return false end if vartk.verify_email_method_clicked then return false end if vartk.verify_email_method_click_at and os.time() - vartk.verify_email_method_click_at < 3 then return true end local tx = math.floor(w * 0.50) local ty = h == 1334 and math.floor(h * 0.36) or math.floor(h * 0.27) klog("Verify邮箱选择页 OCR兜底,点击 Email "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(900) ocrtext = "" vartk.verify_email_method_clicked = true vartk.verify_email_method_click_at = os.time() ttdog = os.time() return true end function tkVerifyEmailCodeFallback() if runid < 114 or runid >= 120 then return false end if flag_2fa ~= "outlook" and flag_2fa ~= "Email" then return false end if type(vartk) ~= "table" then vartk = {} end local txt_l = string.lower(ocrtext or "") local is_identity_code_page = string.match(txt_l, "verify identity") and (string.match(txt_l, "code sent to") or string.match(txt_l, "entering the code")) local is_email_code_page = string.match(txt_l, "verify your email") and (string.match(txt_l, "6%-digit code") or string.match(txt_l, "verification code")) if not is_identity_code_page and not is_email_code_page then return false end if is_identity_code_page and not vartk.verify_email_code_page_logged then klog("Verify identity 邮箱验证码页 OCR兜底,进入取码流程") vartk.verify_email_code_page_logged = true end if ff2(p140Verify2_Code已, "新版邮箱验证码已输入") then Verify_Code6 = nil if not ff2(p140Verify2_Code已_continue, "新版邮箱验证码 Continue", 1) then touch.tap(math.floor(w * 0.85), math.floor(h * 0.45)) end ttdog = os.time() return true end if Verify_Code6 == nil then klog("新版邮箱验证码页,开始获取验证码") local ok if flag_2fa == "outlook" then ok = API_mailcode_outlook() else ok = API_mailcode(codeAddress) end if not ok then runid = 129.9 return true end tt输入Verify_Code6 = os.time() - 20 elseif os.time() - tt输入Verify_Code6 > 10 then klog("输入新版邮箱验证码 "..Verify_Code6) inputDigit(Verify_Code6) sys.msleep(1000) tt输入Verify_Code6 = os.time() end return true end function tkClearProfileLoginRecovery(reason) if type(vartk) ~= "table" then vartk = {} end local had_recovery = vartk.profile_login_click_tt ~= nil or vartk.profile_self_expired_tt ~= nil vartk.profile_login_click_tt = nil vartk.profile_login_wait_logged = nil vartk.profile_self_expired_tt = nil local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end local restart_count = 0 if type(appAccount) == "table" then restart_count = tonumber(appAccount.profileLoginRestartCount or 0) appAccount.profileLoginRestartCount = 0 end if had_recovery or restart_count > 0 then klog((reason or "已离开Profile登录失效状态")..",清除Profile登录恢复计数") end end function tkProfileSelfExpiredWatchdog() if type(vartk) ~= "table" then vartk = {} end if not vartk.profile_self_expired_tt then vartk.profile_self_expired_tt = os.time() klog("Profile自查Login expired且无明确Login入口,等待30秒后重启TK") ttdog = os.time() return true end local wait_seconds = os.time() - vartk.profile_self_expired_tt if wait_seconds < 30 then ttdog = os.time() return true end local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end local restart_count = 1 if type(appAccount) == "table" then appAccount.profileLoginRestartCount = tonumber(appAccount.profileLoginRestartCount or 0) + 1 restart_count = appAccount.profileLoginRestartCount end vartk.profile_self_expired_tt = nil if restart_count <= 2 then klog("Profile自查Login expired且30秒无Login入口,重启TK继续当前账号 "..tostring(restart_count).."/2") Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 else klog("Profile自查Login expired重启2次后仍无Login入口,当前账号加入队列末尾") API_设备log(tostring(uid).." Profile自查Login expired重启2次后仍无Login入口,加入队列末尾") if type(appAccount) == "table" then appAccount.profileLoginRestartCount = 0 end runid = 129.8 end ttdog = os.time() return true end function tkProfileLoginExpired() if vartk.profile_login_click_tt then local wait_seconds = os.time() - vartk.profile_login_click_tt if wait_seconds >= 30 then local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end local restart_count = 1 if type(appAccount) == "table" then appAccount.profileLoginRestartCount = tonumber(appAccount.profileLoginRestartCount or 0) + 1 restart_count = appAccount.profileLoginRestartCount end vartk.profile_login_click_tt = nil vartk.profile_login_wait_logged = nil if restart_count <= 2 then klog("Profile Login点击后30秒未跳转,重启TK继续当前账号 "..tostring(restart_count).."/2") Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 else klog("Profile Login重启2次后仍未跳转,当前账号加入队列末尾") API_设备log(tostring(uid).." Profile Login重启2次后仍未跳转,加入队列末尾") if type(appAccount) == "table" then appAccount.profileLoginRestartCount = 0 end runid = 129.8 end ttdog = os.time() return true end if not vartk.profile_login_wait_logged then klog("我页 Login 已点击一次,等待登录页加载,不再重复点击") vartk.profile_login_wait_logged = true end return true end if ff2(p63Login我, "我页 Login") then touch.tap(Xin0, Yin0) screen.unkeep() sys.msleep(800) ocrtext = "" vartk.profile_self_expired_tt = nil vartk.profile_login_click_tt = os.time() ttdog = os.time() return true end if SelfProfile == nil or SelfProfile.status ~= "Login expired" then return false end local txt_l = string.lower(ocrtext or "") local has_login = string.match(txt_l, "login") ~= nil or string.match(txt_l, "log in") ~= nil local has_existing = string.match(txt_l, "existing account") ~= nil or string.match(txt_l, "log into existing") ~= nil if not (has_login and has_existing) then return false end local tx = math.floor(w * 0.50) local ty = math.floor(h * 0.57) klog("Login expired Profile页 点中间Login兜底 "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(800) ocrtext = "" vartk.profile_self_expired_tt = nil vartk.profile_login_click_tt = os.time() ttdog = os.time() return true end function tkTermsAgreePopup() if ff2(p127弹窗Agree, "弹窗Changes our Terms 点Agree", 1) then return true end local txt_l = string.lower(ocrtext or "") local has_terms_title = string.match(txt_l, "changes to our terms") ~= nil local has_agree = string.match(txt_l, "agree") ~= nil local has_terms_body = string.match(txt_l, "terms of service") ~= nil or string.match(txt_l, "25 july") ~= nil if not (has_terms_title and has_agree and has_terms_body) then return false end local tx = math.floor(w * 0.50) local ty = math.floor(h * 0.69) klog("弹窗 Changes to our Terms OCR兜底 点Agree "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(800) ocrtext = "" ttdog = os.time() return true end function tk点Paste浮层(tag, yy_scale) if ff2(p113粘贴, tag.." 点Paste", 1) then return true end if w ~= 750 then klog(tag.." Paste兜底") touch.tap(math.floor(w*0.16), math.floor(h*yy_scale)) screen.unkeep() sys.msleep(700) return true end return false end function tkSkip同步FaceB弹窗() if type(vartk) ~= "table" then vartk = {} end if vartk.skipFaceB_ignore_until and os.time() < vartk.skipFaceB_ignore_until then return false end if not ff2(p92弹窗skip同步, "弹窗 Skip同步FaceB") then return false end local skip_y_min = h*0.06 if runid > 103 and runid < 104 then skip_y_min = h*0.55 end if Xin0 > w*0.05 and Xin0 < w*0.95 and Yin0 > skip_y_min and Yin0 < h*0.92 then vartk.skipFaceB_bad = 0 touch.tap(Xin0, Yin0) screen.unkeep() sys.msleep(500) return true end vartk.skipFaceB_bad = (vartk.skipFaceB_bad or 0) + 1 klog("弹窗 Skip同步FaceB 坐标异常,放行后续识别 "..tostring(Xin0)..","..tostring(Yin0).." c:"..vartk.skipFaceB_bad) if vartk.skipFaceB_bad >= 5 then vartk.skipFaceB_bad = 0 vartk.skipFaceB_ignore_until = os.time()+8 klog("弹窗 Skip同步FaceB 连续异常,临时忽略8秒") end screen.unkeep() sys.msleep(200) return false end function birthday() --XXT if Yin0 < 666 then flag生日OCR = 1 elseif Yin0 > 1200 then flag生日OCR = 2 end flag生日滑轮 = nil if flag生日OCR == 1 then --英马 birthrect1 = {544,1416, 676,1476} birthrect2 = {58,406, 350,467} by1,by2,by3,by4 = 1300-10, 1588+10, 1400, 1405 elseif flag生日OCR == 2 then --20241030 birthrect1 = {544,1193, 676,1249} --滚轮 --birthrect2 = {70,488, 380,533} --日期结果 birthrect2 = {70,488, 380,560} --日期结果 by1,by2,by3,by4 = 1075, 1365, 1200, 1205 end local tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog("滚轮 "..tmp) sys.msleep(1000) tmp = string.gsub(tmp, " ","") if tonumber(tmp) then else tmp="0" end screen.unkeep() local runidC = 0 local cwait = 0 local txt, txtlast = 0,0 local b目标 = math.random(1985,2003) klog("b目标 "..b目标) local ttbirth = os.time() while true do --screen.keep() if flag生日滑轮 == nil then flag生日滑轮 = 0 if math.random(20,80)>50 then touch.on(191, by2):move(191,by1):msleep(math.random(500)):off() sys.msleep(300) klog("日 up") else touch.on(191, by1):move(191,by2):msleep(math.random(500)):off() sys.msleep(300) klog("日 down") end if math.random(20,80)>50 then touch.on(333, by2):move(333,by1):msleep(math.random(500)):off() sys.msleep(500) klog("月 up") else touch.on(333, by1):move(333,by2):msleep(math.random(500)):off() sys.msleep(500) klog("月 down") end --touch.on(595, by1):move(595,by2):msleep(math.random(500)):off() sys.msleep(300) --touch.on(595, by1):move(595,by2):msleep(math.random(500)):off() sys.msleep(1000) --touch.on(595, 1282):move(595,1606):msleep(math.random(400,800)):off() sys.msleep(1000) --touch.on(595, by4):move(595,by3):msleep(500):off() sys.msleep(1500) --反向 if tonumber(tmp)-b目标 >5 then touch.on(595, by1):step_len(3):step_delay(1):move(595,by2):msleep(400):off() sys.msleep(500) touch.on(595, by1):step_len(3):step_delay(2):move(595,by2):msleep(400):off() sys.msleep(500) --touch.on(595, by1):step_len(3):step_delay(3):move(595,by2):msleep(math.random(500)):off() sys.msleep(300) touch.on(595, by4):step_len(3):step_delay(3):move(595,by3):msleep(800):off() sys.msleep(500) --反向 klog("年 down0") end cwait = 0 elseif flag生日滑轮 > 2 then break else if ff2(p41生日已, "#birth 红") then txt = screen.ocr_text(birthrect2[1],birthrect2[2], birthrect2[3],birthrect2[4]) klog("birth "..txt) if string.match(txt, "%d%d%d%d") then txt = tonumber(string.match(txt, "%d%d%d%d")) if txt <= b目标+4 and txt >= b目标-4 and txt <= 2005 then flag生日滑轮 = flag生日滑轮+1 runidC = 1 break elseif txtlast == txt then cwait = cwait+1 if cwait > 3 then --轻微动一下 klog(" A slowly") touch.on(595, by1):step_len(3):step_delay(5):move(595,by1+30):msleep(600):off() sys.msleep(800) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) sys.msleep(1500) cwait=0 end elseif runidC == 1 then flag生日滑轮 = flag生日滑轮+1 break elseif runidC == 0 and txt < b目标 then klog("年 up "..math.ceil((b目标-txt)/4)) for i=1, math.ceil((b目标-txt)/4) do touch.on(595, by2):step_len(2):step_delay(3):move(595,by2-100-20):msleep(500):off() sys.msleep(500) end touch.on(595, by3):step_len(3):step_delay(5):move(595,by4):msleep(500):off() sys.msleep(1000) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) txtlast = txt runidC = 1 elseif runidC == 0 and txt > b目标 then klog("年 down "..math.ceil((txt-b目标)/4)) for i=1, math.ceil((txt-b目标)/4) do touch.on(595, by1):step_len(2):step_delay(3):move(595,by1+100+20):msleep(500):off() sys.msleep(500) end touch.on(595, by4):step_len(3):step_delay(5):move(595,by3):msleep(500):off() sys.msleep(1300) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) txtlast = txt runidC = 0 end else touch.on(595, by1):step_len(3):step_delay(5):move(595,by1+20):msleep(500):off() sys.msleep(2300) cwait=0 --轻轻动一动 tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) end else --未红 等待 cwait = cwait+1 if cwait > 3 then --轻微动一下 klog(" B slowly") touch.on(595, by1):step_len(3):step_delay(5):move(595,by1+math.random(40,80)):msleep(600):off() sys.msleep(800) --轻轻动一动 tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) sys.msleep(1500) cwait=0 end end end if os.time() - ttbirth > 50 then break end screen.unkeep() sys.msleep(200) end if runidC == 1 then return true elseif runidC == 0 then return false end end function birthday_原touchios() if Yin0 < 666 then flag生日OCR = 1 elseif Yin0 > 1200 then flag生日OCR = 2 end flag生日滑轮 = nil if flag生日OCR == 1 then --英马 birthrect1 = {544,1416, 676,1476} birthrect2 = {58,406, 350,467} by1,by2,by3,by4 = 1300, 1588, 1400, 1405 elseif flag生日OCR == 2 then --20241030 birthrect1 = {544,1193, 676,1249} --滚轮 --birthrect2 = {70,488, 380,533} --日期结果 birthrect2 = {70,488, 380,560} --日期结果 by1,by2,by3,by4 = 1075, 1365, 1200, 1205 end local tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog("滚轮 "..tmp) sys.msleep(1000) screen.unkeep() local runidC = 0 local cwait = 0 local txt, txtlast = 0,0 local b目标 = math.random(1985,2004) klog("b目标 "..b目标) local ttbirth = os.time() while true do --screen.keep() if flag生日滑轮 == nil then flag生日滑轮 = 0 if math.random(20,80)>50 then touch.on(191, by2):move(191,by1):msleep(math.random(500)):off() sys.msleep(300) klog("日 up") else touch.on(191, by1):move(191,by2):msleep(math.random(500)):off() sys.msleep(300) klog("日 down") end if math.random(20,80)>50 then touch.on(333, by2):move(333,by1):msleep(math.random(500)):off() sys.msleep(500) klog("月 up") else touch.on(333, by1):move(333,by2):msleep(math.random(500)):off() sys.msleep(500) klog("月 down") end touch.on(595, by1):move(595,by2):msleep(math.random(500)):off() sys.msleep(300) touch.on(595, by1):move(595,by2):msleep(math.random(500)):off() sys.msleep(1000) --touch.on(595, 1282):move(595,1606):msleep(math.random(400,800)):off() sys.msleep(1000) touch.on(595, by4):move(595,by3):msleep(500):off() sys.msleep(1500) --反向 klog("年 down2") cwait = 0 elseif flag生日滑轮 > 2 then break else if ff2(p41生日已, "#birth 红") then txt = screen.ocr_text(birthrect2[1],birthrect2[2], birthrect2[3],birthrect2[4]) klog("birth "..txt) if string.match(txt, "%d%d%d%d") then txt = tonumber(string.match(txt, "%d%d%d%d")) if txt <= b目标+4 and txt >= b目标-4 and txt <= 2005 then flag生日滑轮 = flag生日滑轮+1 runidC = 1 break elseif txtlast == txt then cwait = cwait+1 if cwait > 7 then --轻微动一下 klog(" A slowly") touch.on(595, by1):move(595,by1+30):msleep(600):off() sys.msleep(800) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) sys.msleep(1500) cwait=0 end elseif runidC == 1 then flag生日滑轮 = flag生日滑轮+1 break elseif runidC == 0 and txt < b目标 then klog("年 up "..math.ceil((b目标-txt)/4)) for i=1, math.ceil((b目标-txt)/4) do touch.on(595, by2):move(595,by2-100):msleep(500):off() sys.msleep(200) end touch.on(595, by3):move(595,by4):msleep(500):off() sys.msleep(2300) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) txtlast = txt runidC = 1 elseif runidC == 0 and txt > b目标 then klog("年 down "..math.ceil((txt-b目标)/4)) for i=1, math.ceil((txt-b目标)/4) do touch.on(595, by1):move(595,by1+100):msleep(500):off() sys.msleep(200) end touch.on(595, by4):move(595,by3):msleep(500):off() sys.msleep(2300) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) txtlast = txt runidC = 1 end else touch.on(595, by1):move(595,by1+20):msleep(500):off() sys.msleep(2300) cwait=0 tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) end else --未红 等待 cwait = cwait+1 if cwait > 5 then --轻微动一下 klog(" B slowly") touch.on(595, by1):move(595,by1+math.random(40,80)):msleep(600):off() sys.msleep(800) tmp = screen.ocr_text(birthrect1[1],birthrect1[2], birthrect1[3],birthrect1[4]); klog(" 滚轮 "..tmp) sys.msleep(1500) cwait=0 end end end if os.time() - ttbirth > 36 then break end screen.unkeep() sys.msleep(200) end if runidC == 1 then return true elseif runidC == 0 then return false end end function rndnick() --随机生成nickname --local nick = randomStr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 2) --nick = nick..randomStr("abcdefghijklmnopqrstuvwxyz_.1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", math.random(6,14)) local nick = randomStr("abcdefghijklmnopqrstuvwxyz", 2) --nick = nick..randomStr("abcdefghijklmnopqrstuvwxyz_1234567890", math.random(6,14)) nick = nick..randomStr("abcdefghijklmnopqrstuvwxyz1234567890", math.random(6,14)) return nick; end function randomStr(str, num) local reStr = ''; local getStr math.randomseed(tonumber(tostring(os.time()-math.random(100,1000)):reverse():sub(1,6))); for i = 1, num do getStr = math.random(1, string.len(str)); reStr = reStr .. string.sub(str, getStr, getStr); end return reStr; end function TL_预备(ttg, yyy) if ttg > tt打码加载[2]+15 then --距离上次超过n秒 算是一次新的打码 tt打码加载 = {ttg, ttg, yyy} return false elseif yyy ~= tt打码加载[3] then tt打码加载[1] = ttg tt打码加载[3] = yyy return false --elseif ttg <= tt打码加载[1]+2 and ttg >tt打码加载[2]+1 then elseif ttg >tt打码加载[2]+1 then tt打码加载[1] = ttg tt打码加载 = {0, 0, 0} return true else tt打码加载[1] = ttg return false end end function TL_打码(proj) klog("TL_打码") local ttdm = os.time() ::TL_000:: local username, password = "flydog", "Flydog66" --图灵 --local username, password = "flydog", "Aa123123." local ID local b64 local b64_small local z叉叉 if proj == 1 then ID="17929879" --旋转角度 b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 2 then ID="07216914" --选2个相同 b64 = screen.image(z同截屏[1],z同截屏[2],z同截屏[3],z同截屏[4]):png_data():base64_encode() z叉叉 = z同_关闭 z刷新 = z同_刷新 elseif proj == 3 then ID="37984900" --旋转角度 b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 33 then ID="47839879" --旋转角度 大+小 b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() b64_small = screen.image(z旋截屏_small[1],z旋截屏_small[2],z旋截屏_small[3],z旋截屏_small[4]):png_data():base64_encode() --z旋截屏_small = {z旋截屏2_small[1],Ytl+109, z旋截屏2_small[3], Ytl+320} --z旋截屏2_small = {308, 748, 518, 959} z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 4 then ID="05119180" --滑块 通用类型 普通滑块 ID="48956156" --滑块 通用类型2 带形状滑块 --ID="80678778" --滑块 识别类型27 b64 = screen.image(z滑截屏[1],z滑截屏[2],z滑截屏[3],z滑截屏[4]):png_data():base64_encode() z叉叉 = z滑_关闭 z刷新 = z滑_刷新 elseif proj == 42 then ID="05119180" --滑块 通用类型 普通滑块 ID="48956156" --滑块 通用类型2 带形状滑块 --ID="80678778" --滑块 识别类型27 b64 = screen.image(z滑m截屏[1],z滑m截屏[2],z滑m截屏[3],z滑m截屏[4]):png_data():base64_encode() z叉叉 = z滑m_关闭 z刷新 = z滑m_刷新 end --ID="07216914"--选2个相同 --ID="17929879" --旋转角度 --ID="68421761" --旋转角度2 --local ID="04897896" --英数通用型 3厘 --ID="95741416" --图片识别类型70 5厘 --填写你自己的截图范围,或直接指定本地图片文件。 --local path = "/var/mobile/Media/1ferver/res/TL01.png" --screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):save_to_png_file(path) --local b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() local request_table = { username = username, password = password, ID=ID, version = "3.1.1", b64 = b64, developer = "watergz", } local request_body=json.encode(params) local request_data = "username="..username.."&password="..password.."&ID="..ID.."&version=3.1.1".."&b64="..b64.."&developer=watergz" if ID=="47839879" then --旋转角度 大+小 request_data = "username="..username.."&password="..password.."&ID="..ID.."&version=3.1.1".."&b64_small="..b64_small.."&b64_large="..b64.."&developer=watergz" end local res local restable for i=1,3 do --local c, h, r = http.post("http://tulingtech.xyz/tuling/predict", 50, {}, request_data) local c, h, r = http.post("http://www.fdyscloud.com.cn/tuling/predict", 50, {}, request_data) if c==200 then res = r klog(res) break else klog(c.." "..tostring(r)) sys.msleep(3000) end if i==3 then return false end end --{"code": 1, "message": "", "data": {"点击1": {"X坐标值": 271, "Y坐标值": 203}, "点击2": {"X坐标值": 298, "Y坐标值": 257}}} --{ "code": -1, "message": "错误原因:账户余额不足,请充值!", "data": {} } --{ "code": -1, "message": "错误原因:该图未检测到关键要素,未扣积分,请您重新刷图上传。", "data": {} } --{ "code": 1, "message": "", "data": { "小圆顺时针旋转度数": 60 } } --{"code": 1, "message": "", "data": {"小圆顺时针旋转度数": 240, "说明": "该度数为当外圈静止不动时小圆的旋转度数,如果外圈同时在旋转,则小圆旋转度数应当减半。拖动滑块的长度也可根据该度数自行计算得出。", "温馨提示": "旋转类图像上传需严格保持与示例图像一致,否则容易导致识别效果不佳。该项目要求上传宽度在420至500像素之间,高度在250至310像素之间的图像。"}} --{ "code": 1, "message": "", "data": { "result": "MF49" } } --{ "code": 1, "message": "", "data": { "result": "WVKW" } } --滑块 --{ "code": 1, "message": "", "data": { "滑块": { "X坐标值": 53, "Y坐标值": 224 }, "缺口": { "X坐标值": 240, "Y坐标值": 228 } } } ---------------------------------- TL_result = nil c打码次数 = c打码次数+1 if res~="" and string.match(res, "code\":%s1") then --说明打码成功 restable = json.decode(res) if ID == "04897896" then --英数通用型 TL_result = string.match(res, "result.-(%w+)") elseif ID == "17929879" or ID =="37984900" then --旋转角度 TL_result = string.match(res, "顺时针旋转度数.-(%d+)") if TL_result then TL_result = tonumber(TL_result) end elseif ID == "07216914" then --找相同 TL_result = res elseif proj == 4 then --滑块 if string.match(res, "缺口") and string.match(res, "滑块") then --if restable.data.缺口.X坐标值 and restable.data.滑块.X坐标值 then --TL_result = restable.data.缺口.X坐标值 - restable.data.滑块.X坐标值 if w==750 and h==1334 then TL_result = {restable.data.缺口.X坐标值 - 51, restable.data.缺口.Y坐标值} else TL_result = {restable.data.缺口.X坐标值 - restable.data.滑块.X坐标值, restable.data.缺口.Y坐标值} end elseif string.match(res, "滑块") and restable.data.滑块.X坐标值 > 100 then if w==750 and h==1334 then TL_result = {restable.data.滑块.X坐标值 - 51, restable.data.滑块.Y坐标值} else TL_result = {restable.data.滑块.X坐标值 - (z滑_A箭[1]-z滑截屏[1]), restable.data.滑块.Y坐标值} end end elseif proj == 42 then --滑块 main if string.match(res, "缺口") and string.match(res, "滑块") then --if restable.data.缺口.X坐标值 and restable.data.滑块.X坐标值 then --TL_result = restable.data.缺口.X坐标值 - restable.data.滑块.X坐标值 if w==750 and h==1334 then TL_result = {restable.data.缺口.X坐标值 - 53, restable.data.缺口.Y坐标值} else TL_result = {restable.data.缺口.X坐标值 - restable.data.滑块.X坐标值, restable.data.缺口.Y坐标值} end elseif string.match(res, "滑块") and restable.data.滑块.X坐标值 > 100 then if w==750 and h==1334 then TL_result = {restable.data.滑块.X坐标值 - 53, restable.data.滑块.Y坐标值} else TL_result = {restable.data.滑块.X坐标值 - (z滑m_A箭[1]-z滑m截屏[1]), restable.data.滑块.Y坐标值} end end end if TL_result then if type(TL_result) == "table" then --滑块 klog(TL_result[1]) else klog(TL_result) end return true else klog("打码失败, 关闭验证") touch.tap(z叉叉[1], z叉叉[2]) sys.msleep(3000) return false end elseif string.match(res, "重新刷图") then klog("点刷新") touch.tap(z刷新[1], z刷新[2]) sys.msleep(3000) return false else klog("打码失败, 关闭验证") touch.tap(z叉叉[1], z叉叉[2]) sys.msleep(3000) return false end end function BT_打码(proj) klog("BT_打码") local ttdm = os.time() ::TL_000:: local username, password = "flydog", "Aa123123." --冰拓 --local username, password = "along00110", "Aa147258" --冰拓 local ID local b64 local z叉叉 if proj == 1 then ID="17929879" --旋转角度 xx b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 2 then ID="2301" --选2个相同 b64 = screen.image(z同截屏[1],z同截屏[2],z同截屏[3],z同截屏[4]):png_data():base64_encode() z叉叉 = z同_关闭 z刷新 = z同_刷新 elseif proj == 3 then ID="1121" --旋转角度 双旋转 b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 33 then ID="1122" --旋转角度 双旋转 两张图 b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() b64_small = screen.image(z旋截屏_small[1],z旋截屏_small[2],z旋截屏_small[3],z旋截屏_small[4]):png_data():base64_encode() --z旋截屏_small = {z旋截屏2_small[1],Ytl+109, z旋截屏2_small[3], Ytl+320} --z旋截屏2_small = {308, 748, 518, 959} z叉叉 = z旋_关闭 z刷新 = z旋_刷新 elseif proj == 4 then ID="1318" --滑块式图像,返回缺口位置 x 轴坐标值 b64 = screen.image(z滑截屏[1],z滑截屏[2],z滑截屏[3],z滑截屏[4]):png_data():base64_encode() z叉叉 = z滑_关闭 z刷新 = z滑_刷新 elseif proj == 42 then ID="1318" --滑块式图像,返回缺口位置 x 轴坐标值 b64 = screen.image(z滑m截屏[1],z滑m截屏[2],z滑m截屏[3],z滑m截屏[4]):png_data():base64_encode() z叉叉 = z滑m_关闭 z刷新 = z滑m_刷新 end --填写你自己的截图范围,或直接指定本地图片文件。 --local path = "/var/mobile/Media/1ferver/res/TL01.png" --screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):save_to_png_file(path) --local b64 = screen.image(z旋截屏[1],z旋截屏[2],z旋截屏[3],z旋截屏[4]):png_data():base64_encode() local request_table = { username = username, password = password, captchaType=ID, captchaData = b64, --developer = "watergz", } local request_body=json.encode(params) local request_data = "username="..username.."&password="..password.."&captchaType="..ID.."&version=3.1.1".."&captchaData="..b64 if ID=="1122" then --旋转角度 大+小 request_data = "username="..username.."&password="..password.."&captchaType="..ID.."&version=3.1.1".."&captchaData="..b64.."&subCaptchaData="..b64_small end local res for i=1,3 do local c, h, r = http.post("https://www.bingtop.com/ocr/upload/", 50, {}, request_data) if c==200 then res = r klog(res) break else klog(c) sys.msleep(3000) end if i==3 then return false end end --[[ { "code":0, "message":"", "data":{ "captchaId":"1000-158201918112812", "recognition":"RESULT" } } ]] ---------------------------------- TL_result = nil c打码次数 = c打码次数+1 if res~="" and string.match(res, "code\":%s0") then --说明打码成功 restable = json.decode(res) if ID == "04897896" then --英数通用型 xx TL_result = string.match(res, "result.-(%w+)") elseif ID == "1121" or ID == "1122" then --双旋转 TL_result = string.match(res, "recognition.-(%d+)") captchaId = restable.data.captchaId if TL_result and captchaId then TL_result = tonumber(TL_result) cont打码反馈 = {captchaId, ID} end elseif ID == "2301" then --找相同 local b1,b2,b3,b4 = string.match(restable.data.recognition, "(%d+).-(%d+).-(%d+).-(%d+)") if b4 then TL_result = {{tonumber(b1),tonumber(b2)},{tonumber(b3),tonumber(b4)}} else return false end elseif ID == "1318" then --滑块 local tmp = string.match(restable.data.recognition, "(%d+)") if tmp then TL_result = {tmp,0} end end if TL_result then klog(tostring(TL_result)) return true else klog("打码失败, 关闭验证") touch.tap(z叉叉[1], z叉叉[2]) sys.msleep(3000) return false end elseif string.match(res, "重新刷图") then klog("点刷新") touch.tap(z刷新[1], z刷新[2]) sys.msleep(3000) return false else klog("打码失败, 关闭验证") touch.tap(z叉叉[1], z叉叉[2]) sys.msleep(3000) return false end end function BT_打码报错() klog("BT_打码_报错反馈: "..cont打码反馈[1].." "..cont打码反馈[2]) local ttdm = os.time() local username, password = "flydog", "Aa123123." --冰拓 local request_table = { username = username, password = password, captchaId = cont打码反馈[1], captchaType = cont打码反馈[2], } local request_body=json.encode(params) --cont打码反馈 = [nil,nil] local request_data = "username="..username.."&password="..password.."&captchaId="..cont打码反馈[1].."&captchaType="..cont打码反馈[2] local res for i=1,3 do local c, h, r = http.post("http://www.bingtop.com/ocr/report/", 50, {}, request_data) if c==200 then res = r klog(res) return true else klog(c.." "..tostring(r)) sys.msleep(3000) end if i==3 then return false end end end function tk本地滑块识别(Ytl, proj) c打码次数 = (c打码次数 or 0) + 1 if type(vartk) ~= "table" then vartk = {} end if Ytl == nil or Ytl <= 0 then Ytl = math.floor(h * 0.27) end local left, top, right, bottom, arrow_x, arrow_y if proj == 42 then left, top, right, bottom = math.floor(w * 0.120), Ytl + (459 - 398), math.floor(w * 0.785), Ytl + (802 - 398) arrow_x, arrow_y = math.floor(w * 0.181), Ytl + (850 - 398) else left, top, right, bottom = math.floor(w * 0.106), Ytl + (360 - 294), math.floor(w * 0.797), Ytl + (680 - 294) arrow_x, arrow_y = math.floor(w * 0.181), Ytl + (749 - 294) end -- The original matcher first binarizes the screenshot. Recreate that step -- from live RGB samples so gradients in the captcha image do not break it. local patterns = { { {0, 0, 0xffffff}, {0, -2, 0xffffff}, {0, -4, 0xffffff}, {0, -6, 0xffffff}, {0, -8, 0xffffff}, {0, -10, 0xffffff}, {0, -12, 0xffffff}, {0, -14, 0xffffff}, {0, -16, 0xffffff}, {1, 0, 0x000000}, {1, -2, 0x000000}, {1, -4, 0x000000}, {1, -6, 0x000000}, {1, -8, 0x000000}, {1, -10, 0x000000}, {1, -12, 0x000000}, {1, -14, 0x000000} }, { {0, 0, 0xffffff}, {0, 2, 0xffffff}, {0, 4, 0xffffff}, {0, 6, 0xffffff}, {0, 8, 0xffffff}, {0, 10, 0xffffff}, {0, 12, 0xffffff}, {0, 14, 0xffffff}, {0, 16, 0xffffff}, {1, 0, 0x000000}, {1, 2, 0x000000}, {1, 4, 0x000000}, {1, 6, 0x000000}, {1, 8, 0x000000}, {1, 10, 0x000000}, {1, 12, 0x000000}, {1, 14, 0x000000} }, { {0, 0, 0xffffff}, {-2, 0, 0xffffff}, {-4, 0, 0xffffff}, {-6, 0, 0xffffff}, {-8, 0, 0xffffff}, {-10, 0, 0xffffff}, {-12, 0, 0xffffff}, {-14, 0, 0xffffff}, {-16, 0, 0xffffff}, {0, 2, 0xffffff}, {0, 4, 0xffffff}, {0, 6, 0xffffff}, {0, 8, 0xffffff}, {0, 10, 0xffffff}, {0, 12, 0xffffff}, {0, 14, 0xffffff}, {-1, 0, 0x000000}, {-3, 0, 0x000000}, {-5, 0, 0x000000}, {-7, 0, 0x000000}, {-9, 0, 0x000000}, {-11, 0, 0x000000}, {-13, 0, 0x000000}, {-15, 0, 0x000000} }, { {0, 0, 0xffffff}, {0, -2, 0xffffff}, {0, -4, 0xffffff}, {0, -6, 0xffffff}, {0, -8, 0xffffff}, {0, -10, 0xffffff}, {0, -12, 0xffffff}, {0, -14, 0xffffff}, {0, -16, 0xffffff}, {0, -18, 0xffffff}, {-1, -1, 0x000000}, {-1, -3, 0x000000}, {-1, -5, 0x000000}, {-1, -7, 0x000000}, {-1, -9, 0x000000}, {-1, -11, 0x000000}, {-1, -13, 0x000000}, {-1, -15, 0x000000}, {-2, 0, 0xffffff}, {-4, 0, 0xffffff}, {-6, 0, 0xffffff}, {-8, 0, 0xffffff}, {-10, 0, 0xffffff}, {-12, 0, 0xffffff} } } local scan_top = top + 70 local scan_bottom = math.min(bottom - 70, top + 230) local found_x, found_y local scan_left = math.max(left + math.floor(w * 0.24), arrow_x + math.floor(w * 0.16)) for i = 1, #patterns do local find_pattern = {} for j = 1, #patterns[i] do local p = patterns[i][j] if p[3] == 0xffffff then find_pattern[#find_pattern + 1] = {p[1], p[2], 0xffffff, 70} else find_pattern[#find_pattern + 1] = {p[1], p[2], 0xffffff, -60} end end local x, y = screen.find_color(find_pattern, 70, scan_left, scan_top, right - 20, scan_bottom) if x and y and x >= scan_left and y >= scan_top then found_x, found_y = x, y break end end if found_x then local target_x = found_x + math.floor(w * 0.052) local raw_drag_len = math.floor(target_x - arrow_x) local drag_scale = tonumber(S滑块系数) or 0.78 local drag_len = math.floor(raw_drag_len * drag_scale) if drag_len >= 20 and drag_len <= math.floor(w * 0.82) then klog("本地滑块识别 proj="..tostring(proj).." 缺口边缘="..tostring(found_x)..","..tostring(found_y).." 目标中心="..tostring(target_x).." 起点="..tostring(arrow_x).." 原始距离="..tostring(raw_drag_len).." 系数="..tostring(drag_scale).." 实拖="..tostring(drag_len)) vartk.local_slider_failures = 0 screen.unkeep() local yy = arrow_y + math.random(-8, 8) touch.show_pose(true) touch.on(arrow_x + math.random(-8, 8), yy):step_len(2):step_delay(5):move(arrow_x + drag_len, yy + math.random(-2, 2)):msleep(math.random(700, 1100)):off() touch.show_pose(false) ttdog = os.time() sys.msleep(3000) return true end end klog("本地滑块未找到缺口 proj="..tostring(proj).." 区域="..left..","..top..","..right..","..bottom) vartk.local_slider_failures = (vartk.local_slider_failures or 0) + 1 if vartk.local_slider_failures >= 3 then klog("本地滑块连续失败3次,结束当前验证码状态,避免[116]死循环") runid = 80 ttdog = os.time() vartk.local_slider_failures = 0 end return false end function tk验证打码() local ocr_captcha_text = ocrtext or "" local ocr_captcha_y = -1 if resocr and resocr.y then ocr_captcha_y = resocr.y end if 1>2 then elseif 1>2 and os.time()-ttdog <= 2 then --隔离 tk登录(tISO, tuid, tusername, tpw) 上下半区 return false elseif 1>2 and ff2(p旋码, "验证码 旋转角度") then if c打码次数 >= c打码次数max then klog("异常 打码次数达到"..c打码次数max.."次") if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then local Ytl = Yin0 z旋_A箭 = {z旋_A箭1[1],Ytl} --1167 z旋截屏 = {z旋截屏1[1], Ytl-467, z旋截屏1[3], Ytl-84} z旋_路程full = z旋_路程full1 z旋_刷新 = {z旋_刷新1[1],Ytl+89} z旋_关闭 = {z旋_关闭1[1],Ytl-642} if TL_打码(1) then klog("拉动滑杆 对准角度") local xx = z旋_A箭[1]+math.random(-20,20) local yy = z旋_A箭[2]+math.random(-15,15) touch.on(xx, yy):move(xx+z旋_路程full*TL_result/360, yy):msleep(math.random(1000,1500)):off() sys.msleep(3000) ttdog = os.time() else end end --ttdog = os.time() elseif w==828 and ff2(p旋码2, "验证码2 旋转角度") then if c打码次数 >= c打码次数max then if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end local Ytl = Yin0 z旋_A箭 = {z旋_A箭2[1],Ytl+445} z旋截屏 = {z旋截屏2[1],Ytl+31, z旋截屏2[3], Ytl+397} z旋截屏_small = {z旋截屏2_small[1],Ytl+109, z旋截屏2_small[3], Ytl+320} --z旋截屏2_small = {308, 748, 518, 959} z旋_路程full = z旋_路程full2 z旋_刷新 = {z旋_刷新2[1],Ytl+518} z旋_关闭 = {z旋_关闭2[1],Ytl} screen.unkeep() sys.msleep(1000) --if TL_打码(33) then if BT_打码(33) then klog("拉动滑杆 对准角度") sys.toast("拉动滑杆 角度: "..TL_result) sys.msleep(200) local xx = z旋_A箭[1]+math.random(-10,10) local yy = z旋_A箭[2]+math.random(-10,0) touch.show_pose(true) --touch.on(xx, yy):press(2000):msleep(math.random(300,500)):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/180, yy):msleep(math.random(300,800)):off() sys.msleep(3000) --touch.on(xx, yy):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/360, yy):msleep(math.random(300,800)):off() sys.msleep(5000) touch.on(xx, yy):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/180, yy):msleep(math.random(300,800)):off() sys.msleep(3000) touch.show_pose(false) ttdog = os.time() else end end --ttdog = os.time() elseif ff2(p旋码3, "验证码3 旋转角度") then if c打码次数 >= c打码次数max then if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end local Ytl = Yin0 local Y调准 = Yin0 - p旋码3[1][1][2] -- z旋_A箭 = {z旋_A箭2[1],Ytl+445} -- z旋截屏 = {z旋截屏2[1],Ytl+31, z旋截屏2[3], Ytl+397} -- z旋截屏_small = {z旋截屏2_small[1],Ytl+109, z旋截屏2_small[3], Ytl+320} --z旋截屏2_small = {308, 748, 518, 959} -- z旋_路程full = z旋_路程full2 -- z旋_刷新 = {z旋_刷新2[1],Ytl+518} -- z旋_关闭 = {z旋_关闭2[1],Ytl} z旋_A箭 = {z旋_A箭3[1],z旋_A箭3[2]+Y调准} z旋截屏 = {z旋截屏3[1],z旋截屏3[2]+Y调准, z旋截屏3[3], z旋截屏3[4]+Y调准} z旋截屏_small = {z旋截屏3_small[1],z旋截屏3_small[2]+Y调准, z旋截屏3_small[3], z旋截屏3_small[4]+Y调准} --z旋截屏2_small = {308, 748, 518, 959} z旋_路程full = z旋_路程full3 z旋_刷新 = {z旋_刷新3[1],z旋_刷新3[2]+Y调准} z旋_关闭 = {z旋_关闭3[1],z旋_关闭3[2]+Y调准} screen.unkeep() sys.msleep(1000) --if TL_打码(33) then if BT_打码(33) then klog("拉动滑杆 对准角度") sys.toast("拉动滑杆 角度: "..TL_result) sys.msleep(200) local xx = z旋_A箭[1]+math.random(-10,10) local yy = z旋_A箭[2]+math.random(-10,0) touch.show_pose(true) --touch.on(xx, yy):press(2000):msleep(math.random(300,500)):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/180, yy):msleep(math.random(300,800)):off() sys.msleep(3000) --touch.on(xx, yy):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/360, yy):msleep(math.random(300,800)):off() sys.msleep(5000) touch.on(xx, yy):step_len(2):step_delay(5):move(xx+z旋_路程full*TL_result/180, yy):msleep(math.random(300,800)):off() sys.msleep(3000) touch.show_pose(false) ttdog = os.time() else end end --ttdog = os.time() elseif ff2(p滑块, "验证码4 滑块") then if c打码次数 >= c打码次数max then --if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then --if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end z滑_A箭[2] = Yin0+(749-294) z滑截屏[2] = Yin0+(360-294) z滑截屏[4] = Yin0+(680-294) z滑_刷新[2]= Yin0+(824-294) z滑_关闭[2]= Yin0 screen.unkeep() sys.msleep(1000) tk本地滑块识别(Yin0, 4) end --ttdog = os.time() elseif ff2(p滑块main, "验证码42 滑块") then if c打码次数 >= c打码次数max then --if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then --if c打码次数 >0 and cont打码反馈[1] then BT_打码报错() end z滑m_A箭[2] = Yin0+(850-398) z滑m截屏[2] = Yin0+(459-398) z滑m截屏[4] = Yin0+(802-398) z滑m_刷新[2]= Yin0+(926-398) z滑m_关闭[2]= Yin0 screen.unkeep() sys.msleep(1000) tk本地滑块识别(Yin0, 42) end --ttdog = os.time() elseif ff2(p相同码, "验证码 点相同") then --应该已弃 tt点相同不完全 = {0, 0} if c打码次数 >= c打码次数max then klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then local Ytl = Yin0 --703,574 z同截屏 = {113, Ytl+126, 713, Ytl+496} z同_刷新 = {191,Ytl+539} z同_关闭 = {703,Ytl} if TL_打码(2) then TL = json.decode(TL_result) local xx1 = TL.data["点击1"]["X坐标值"]+z同截屏[1] local yy1 = TL.data["点击1"]["Y坐标值"]+z同截屏[2] local xx2 = TL.data["点击2"]["X坐标值"]+z同截屏[1] local yy2 = TL.data["点击2"]["Y坐标值"]+z同截屏[2] klog("点坐标 "..xx1..","..yy1.." "..xx2..","..yy2) touch.tap(xx1,yy1) sys.msleep(800) touch.tap(xx2,yy2) sys.msleep(800) touch.tap(363, Ytl+630) sys.msleep(4000) ttdog = os.time() elseif 1>2 and BT_打码(2) then klog("点坐标 "..TL_result[1][1]..","..TL_result[1][2].." "..TL_result[2][1]..","..TL_result[2][2]) touch.tap(TL_result[1][1]+z同截屏[1],TL_result[1][2]+z同截屏[2]) sys.msleep(800) touch.tap(TL_result[2][1]+z同截屏[1],TL_result[2][2]+z同截屏[2]) sys.msleep(800) touch.tap(363, Ytl+630) sys.msleep(4000) ttdog = os.time() end end --ttdog = os.time() elseif ff2(p相同码2, "验证码 点相同2") then tt点相同不完全 = {0, 0} if c打码次数 >= c打码次数max then klog("异常 打码次数达到"..c打码次数max.."次") --runid = 80 if runid>100 then runid = 129.8 else runid = 80 end elseif TL_预备(os.time(), Yin0) then local Ytl = Yin0 --685,624 z同截屏 = {z同截屏2[1], Ytl+z同截屏2[2], z同截屏2[3], Ytl+z同截屏2[4]} z同_刷新 = {z同_刷新2[1],Ytl+z同_刷新2[2]} z同_关闭 = {z同_关闭2[1],Ytl} if TL_打码(2) then TL = json.decode(TL_result) local xx1 = TL.data["点击1"]["X坐标值"]+z同截屏[1] local yy1 = TL.data["点击1"]["Y坐标值"]+z同截屏[2] local xx2 = TL.data["点击2"]["X坐标值"]+z同截屏[1] local yy2 = TL.data["点击2"]["Y坐标值"]+z同截屏[2] klog("点坐标 "..xx1..","..yy1.." "..xx2..","..yy2) touch.tap(xx1,yy1) sys.msleep(800) touch.tap(xx2,yy2) sys.msleep(800) touch.tap(z同_确认2[1], Ytl+z同_确认2[2]) sys.msleep(4000) ttdog = os.time() elseif 1>2 and BT_打码(2) then klog("点坐标 "..TL_result[1][1]..","..TL_result[1][2].." "..TL_result[2][1]..","..TL_result[2][2]) touch.tap(TL_result[1][1]+z同截屏[1],TL_result[1][2]+z同截屏[2]) sys.msleep(800) touch.tap(TL_result[2][1]+z同截屏[1],TL_result[2][2]+z同截屏[2]) sys.msleep(800) touch.tap(z同_确认2[1], Ytl+z同_确认2[2]) sys.msleep(4000) ttdog = os.time() end end --ttdog = os.time() elseif ff2(p点相同不完全1, "验证码 点相同 不完全操作1") or ff2(p点相同不完全2, "验证码 点相同 不完全操作2") then if os.time() - tt点相同不完全[1] > 5 then tt点相同不完全[1] = os.time() tt点相同不完全[2] = os.time() elseif os.time() - tt点相同不完全[2] > 3 then touch.tap(Xin0,Yin0) else tt点相同不完全[1] = os.time() end elseif string.match(ocr_captcha_text, "Drag the puzzle piece into place") then klog("验证码 OCR兜底 滑块4") return tk本地滑块识别(ocr_captcha_y, 4) elseif string.match(ocr_captcha_text, "Verify to continue") then klog("验证码 OCR兜底 滑块42") return tk本地滑块识别(ocr_captcha_y, 42) elseif ff2(p旋码验证中, "验证中...") then sys.msleep(1500) elseif ff2(p验证加载中, "验证弹窗 加载中...?") then flag当前状态 = {os.time(), "验证弹窗加载中"} else end return false end function API_phone() local url = "http://"..ipdomain..":23121/omfnapi/account-pool/byType/phone" for i=1,20 do local c, h, r = http.get(url) if c==200 then klog(r) -- {"tuid":55226,"text1":"6833184540","text2":"https://www.mysms.one/api/send?token=e4d85460-484d-11ef-a89c-fbd0cc7e674f"} getphone = json.decode(r) if getphone.text1 == nil then sys.alert("取号异常!\n\n"..r, 5); sys.msleep(1000) --os.exit(); else return true end elseif i==20 then klog("取号异常!") sys.alert("取号异常!", 5); sys.msleep(1000) --os.exit(); else sys.msleep(3000) end end return false end function API_phonecode() local url = getphone.text2 klog("【API_phonecode】"..url) local ttphonecode = os.time() local i=0 while true do screen.keep() local c, h, r = http.get(url, 30) i=i+1 if c取码 == 0 and ff2(p29再发sms, "可发送一次sms") then phonecode = nil return false elseif c==200 then klog(r) -- [TikTok] 416894 is your verification code, valid for 5 minutes. To keep your account safe, never forward this code. -- [TikTok] 280916 is your verification code, valid for 5 minutes. To keep your account safe, never forward this code. -- [TikTok] 216093 is your verification code, valid for 5 minutes. To keep your account safe, never forward this code. -- yes|[TikTok] 475954 is your verification code, valid for 5 minutes. To keep your account safe, never forward this code.|(TikTok) -- yes| 872328 is your verification code, valid for 5 minutes. To keep your account safe, never forward this code.|(TikTok) -- yes|[TikTok] 262578 ialah kod pengesahan anda|(TikTok) -- Your verification code is 658806 if string.match(r, "TikTok") and string.match(r, "%d%d%d%d+") then phonecode = string.match(r, "%d%d%d%d+") return true elseif string.match(r, "Your verification code is %d%d%d%d+") then phonecode = string.match(r, "Your verification code is (%d%d%d%d+)") return true end end if os.time()-ttphonecode>125 then klog("验证码超时!"..i) --sys.alert("验证码超时!",4); sys.msleep(1000); phonecode = nil c取码 = 4 return false else sys.msleep(4000) end screen.unkeep() sys.msleep(400) end phonecode = nil return false end function API_GG() local url = "http://"..ipdomain..":23121/omfnapi/account-pool/byType/email" for i=1,20 do local c, h, r = http.get(url) if c==200 then klog(r) -- {"tuid": 57780, "text1": "VFvorfCjH@koouji.vip", "text2": "pXpwWFHMpajkO", "text3": "EEvOdSSIXQdhe@outlook.com"} getGG = json.decode(r) if getGG.text1 == nil then sys.alert("取号异常!\n\n"..r, 5); sys.msleep(1000); --os.exit(); else return true end elseif i==20 then klog("取号异常!") sys.alert("取号异常!", 5); sys.msleep(1000); else sys.msleep(3000) end end return false end function API_token(flag换绑标识) --local url = "http://"..ipdomain..":23121/omfnapi/apidocs#/%E8%B4%A6%E5%8F%B7/AccountPoolController_registerDone" local url = "http://"..ipdomain..":23121/omfnapi/account-pool/register/done" local data local data2 --缺这个参数 --if screen_name == nil then screen_name = "screen_name" end if nick_name == nil then nick_name = "nickname" end if flag注册方式 == "Phone" then data = "tuid="..getphone.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password=Aa123123.".."&deviceJson="..tokenbase64.."&email="..getphone.text1.."&others=" if flag换绑标识 then data = "tuid="..getphone.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password=Aa123123.".."&deviceJson="..tokenbase64.."&email="..getphone.text1.."&releaseStatus="..flag换绑标识.."&others=" end data2 = "tuid="..getphone.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password=Aa123123.".."&email="..getphone.text2 elseif flag注册方式 == "GG" then data = "tuid="..getGG.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password="..getGG.text2.."&deviceJson="..tokenbase64.."&email="..getGG.text1.."&others=" if flag换绑标识 then data = "tuid="..getGG.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password="..getGG.text2.."&deviceJson="..tokenbase64.."&email="..getGG.text1.."&releaseStatus="..flag换绑标识.."&others=" end data2 = "tuid="..getGG.tuid.."®ion="..ISO.."&status=".."&userlogin="..nick_name.."&password="..getGG.text2.."&email="..getGG.text1 end for i=1,4 do local c, h, r = http.post(url, 10, {}, data) if c==200 or c==201 then --klog(c.." " ..r) if flag换绑标识 then klog("【注册成功】token上传成功 "..flag换绑标识) sys.toast("【注册成功】token上传成功 "..flag换绑标识) sys.msleep(2000) else klog("【注册成功】token上传成功") sys.toast("【注册成功】token上传成功") sys.msleep(2000) end return true else klog(c) sys.msleep(3000) end if i==4 then klog("token 上传fail") klog(" ") klog("【记录fail环境】") klog(tokenbase64) klog(data2) sys.toast("token 上传fail!"); sys.msleep(5000) return false end end end function tk处理云控Token上传响应(r, logPrefix) logPrefix = logPrefix or "【云控】" local ok, restable = pcall(json.decode, r) if not ok or type(restable) ~= "table" then klog(logPrefix.."返回JSON异常,无法确认token是否入库") return false, false end if restable.code ~= 1 then klog(logPrefix.."后台未受理token,code="..tostring(restable.code)) return false, true end if type(restable.data) == "table" and restable.data.paramsRejected == true then flag本账号已提参 = false klog(logPrefix.."后台拒绝全参:UID不一致或无法确认") sys.toast(logPrefix.."后台拒绝全参") API_设备log(tostring(uid or "").." 后台拒绝全参:UID不一致或无法确认") sys.msleep(2000) return false, true end klog(logPrefix.."token上传成功") sys.toast(logPrefix.."token上传成功") sys.msleep(2000) return true, true end function API_token_云控() --local url = "http://"..ipdomain..":23121/omfnapi/apidocs#/%E8%B4%A6%E5%8F%B7/AccountPoolController_registerDone" local url = taskdomain.."/ykopenapi/app-account/register/tiktok" local data local data2 local uploadParams = tokenjson if flagToken来自AccountTxt and type(tokentable) == "table" then uploadParams = tokentable end local currentAppAccountId = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then local currentAppAccount = tasktable.data.appAccounts[sq_appAccounts] if type(currentAppAccount) == "table" and type(currentAppAccount.id) == "string" and currentAppAccount.id ~= "" then currentAppAccountId = currentAppAccount.id end end if selects["功能"] == "注册" then data = { ["uuid"] = uuid, ["username"] = user_name, ["uid"] = SelfProfile.userID, ["appType"] = "tiktok", ["nickname"] = nick_name, ["country"] = ISO, ["signature"] = "", --["params"] = tokenbase64, --["params"] = json.decode(tokenjson), ["params"] = uploadParams, -- ["followersCount"] = 0, -- ["followingCount"] = 0, -- ["likeCount"] = 0 ["followersCount"] = SelfProfile.follower_count, ["followingCount"] = SelfProfile.following_count, ["likeCount"] = SelfProfile.total_favorited } elseif selects["功能"] == "任务" then data = { ["uuid"] = uuid, ["username"] = username, ["uid"] = SelfProfile.userID, ["appType"] = "tiktok", ["nickname"] = SelfProfile.nickname, --以前 任务不能传这个参数 ["country"] = ISO, ["signature"] = "", --["params"] = tokenbase64, --["params"] = json.decode(tokenjson), ["params"] = uploadParams, ["followersCount"] = SelfProfile.follower_count, ["followingCount"] = SelfProfile.following_count, ["likeCount"] = SelfProfile.total_favorited, ["videoCount"] = SelfProfile.aweme_count, } end if data and currentAppAccountId then data["appAccountId"] = currentAppAccountId end --data2 = "uuid="..uuid.."&username="..user_name.."&uid=".. tokentable.user.userID.."&appType=tiktok".."&nickname="..nick_name.."&country="..ISO.."¶ms=".. tokenbase64 for i=1,3 do local c, h, r = http.post(url, 10, {['Content-Type']='application/json'}, json.encode(data)) if c==200 or c==201 then local uploadOk, requestDone = tk处理云控Token上传响应(r, "【云控】") if requestDone then return uploadOk, true end else klog(c.." "..tostring(r)) sys.msleep(3000) end if i==3 then klog("【云控】token 上传fail") sys.toast("【云控】token 上传fail!"); sys.msleep(5000) return false, false end end end function API_token_云控_test() --local url = "http://"..ipdomain..":23121/omfnapi/apidocs#/%E8%B4%A6%E5%8F%B7/AccountPoolController_registerDone" local url = taskdomain.."/ykopenapi/app-account/register/tiktok" local data local data2 data = { ["uuid"] = "00008020-000E39963E51002E", ["username"] = "111", ["uid"] = "1111", ["appType"] = "tiktok", ["nickname"] = "111", ["country"] = "PY", ["signature"] = "", ["params"] = '{"bootSessionUuid":"DC3BCA35-616D-4B83-B2C6-CAC45A536686","cdid":"0A63B96B-1AA4-41FD-A95B-34BFAB5B44DE","commonParams":{"access":"WIFI","aid":"1233","app_language":"en","app_name":"musical_ly","app_region":"MY","app_version":"38.2.0","auth_status":2,"carrier":"Telekom Malaysia Bhd","carrier_region":"my","cdid":"0A63B96B-1AA4-41FD-A95B-34BFAB5B44DE","channel":"App Store","custom":"{\n \"app_language\" = en;\n \"app_region\" = MY;\n \"build_number\" = 382020;\n \"earphone_status\" = off;\n \"filter_warn\" = 0;\n \"is_kids_mode\" = 0;\n \"is_pad\" = 0;\n \"priority_region\" = MY;\n \"user_mode\" = 1;\n \"user_period\" = 0;\n \"web_ua\" = \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148\";\n}","device_id":"7463160496749823489","device_model":"iPhone11,8","device_token":"","display_name":"TikTok","idfa":"00000000-0000-0000-0000-000000000000","install_id":"7463161035505239824","is_jailbroken":0,"is_upgrade_user":0,"language":"en-MY","mcc_mnc":"50201","model_display_name":"iPhone11,8","os":"iOS","os_version":"16.2","package":"com.zhiliaoapp.musically","region":"MY","resolution":"828*1792","scene":0,"sdk_version":272,"timezone":8,"tz_name":"Asia/Kuching","tz_offset":28800,"user_agent":"TikTok 38.2.0 rv:382020 (iPhone; iOS 16.2; en_MY) Cronet","vendor_id":"32BA410D-142C-497E-AAD2-0964A95DBAE1"},"cookies":"odin_tt=a4b207136a4668920122e6d05333e2db769be5cbdacd0c7c93168ad2be0f332eb5e5cd4023e0e7f4889b3d30c8e61cbf2638ce50fa086b853958b03978d5da66ae0243dbfdec1e133d215933daf3a26d;store-idc=alisg;store-country-code=my;store-country-code-src=uid;install_id=7463161035505239824;ttreq=1$41ce2a7b99ac08a2b526c499642af2c347b8d6b4;passport_csrf_token=016c1f0b7c0807296ab8398b4784c0c3;passport_csrf_token_default=016c1f0b7c0807296ab8398b4784c0c3;tt-target-idc=alisg;msToken=iIRkXl7JQAol6EYbov6FsN1NFJqROvPWMf6lypF59Y4US8eS7tSb0XOaXNhAcAD9tKWgG5QPj7mpcQOyjJ4JKudCjzUOxzaUBtVudhsUWw==;d_ticket=4622884352175bb713c62ae495741662c0fc6;multi_sids=7463161120015352833%3A031c3a2738aa78da552129c3bf1f9464;cmpl_token=AgQQAPO0F-RPsLesl9jMN104_fPh3Ykff4M_YNpwmg;sid_guard=031c3a2738aa78da552129c3bf1f9464%7C1737652733%7C15551999%7CTue%2C+22-Jul-2025+17%3A18%3A52+GMT;uid_tt=06c087e78e6080329a24c4271a96fc7d2876e5292c73a4ee14a03bff0e9e0365;uid_tt_ss=06c087e78e6080329a24c4271a96fc7d2876e5292c73a4ee14a03bff0e9e0365;sid_tt=031c3a2738aa78da552129c3bf1f9464;sessionid=031c3a2738aa78da552129c3bf1f9464;sessionid_ss=031c3a2738aa78da552129c3bf1f9464;tt_ticket_guard_has_set_public_key=1;user_oec_info=0a5370fdf6ed1ee23866ab272bf4fd2f82ea073b66a0f18fd4fae96def3c8ea320deced891aac243a02021204cb7c9b994eb0a0d2d466d4e181ccc15887632c653bac7ab09b6c88dd1f50b95f070e274b7ae127a031a490a3c9f64386b72e0d9ef2f04bfaee88b09b3c20bcfd27bd3a270098d7767de2c1c1e0ed5b9612ecae4c8425b8200eba1500a779a8324aee3e5f7c6c3acb810bccee70d1886d2f6f20d2201049bfb7bd0;","device":{"ac":"WIFI","account_region":"my","aid":"1233","app_language":"en","app_name":"musical_ly","app_version":"38.2.0","build_number":"382020","carrier_region":"MY","carrier_region1":"MY","cdid":"0A63B96B-1AA4-41FD-A95B-34BFAB5B44DE","channel":"App Store","content_language":"","current_region":"MY","device_id":"7463160496749823489","device_platform":"iphone","device_token":"","device_type":"iPhone11,8","idfa":"00000000-0000-0000-0000-000000000000","idfv":"32BA410D-142C-497E-AAD2-0964A95DBAE1","iid":"7463161035505239824","is_upgrade_user":0,"language":"en","locale":"en-GB","mcc_mnc":"50201","op_region":"MY","openudid":"09db95a05cee3f93ea063d435ca480b4dd91537a","os_api":"18","os_version":"16.2","residence":"MY","screen_width":828,"sys_region":"MY","timezone":8,"tz_name":"Asia/Kuching","tz_offset":28800,"uoo":"1","version_code":"38.2.0","vid":"32BA410D-142C-497E-AAD2-0964A95DBAE1"},"idfv":"32BA410D-142C-497E-AAD2-0964A95DBAE1","ipv6":"fe80::11c7:e881:628e:44b1","kern_boottime":1735404034,"mntfromname":"com.apple.os.update-755DD68DC2D7EE9635A4EEA0FB1661BB37D23969EA11BACBCF6ADE6CF86F8BD58B170F7E18E94A552605EF079B1ACBB6@/dev/disk0s1s1","mssdk":{".msp_092fde7a53a0274594af0984c7830fc0c13dc8bd":"cLN6ZCJg312yh5VpI0U6MsmGuduVK1idlnL9yqIkYJR+OZTEo5lSAtS+r6dIHWW8Yf7XnBkZnhfukriGoDvZD5tpTCt5atgNGl6upf92Bwpyk/IN7UC7UGEV2KvoB9Fj4peEjuUgxvK9iCzg0Prb+l6UcSvcfrpeQ9w14FOiMVVg17M2QLf6TugpgmlyIXWM1AhuDixlTb0yKe+eLuFTiDIgpaxW4K+O+2ZjC4bTVpK+wdDXe1Sm0Non9MfHwD3HJA==",".msp_589c22335a381f122d129225f5c0ba3056ed5811":"+GPYL4Wf+JdJjaUZu9CXeXezgP2XWcpd0wIRhWJ32am9DKqyVsjdlMEhIQd1iQPyd8IPdIGHgpvzYpd//82sWYrWHlhhknxc3j9qt7+nKvN5v0oVLL/wLLhxle945t86kSye2Z81s20M/1hs+tzbch0G3XDtq18DZTdXlZ1VCLHDpCvGQCYjYmz4de0sKW/Jrsot8zB1/GkilbA3J2+qKVCqGGKahDgdWQlsKqnPKLLd0/OlJKBIQAUpzsGilISWulr8rxRcJEk4cdHvSNkDbD/fuGtdbgq0yGrJ9XhFc/+czdJgnP8tINUN7KEIIkydXIoXc3VpZORM0Tyd2w621kwUjaiIXqOhHg==","dyn_seed":"MDGnHpvVr3AAJzx/yWtlldLlmeF6HyB1UDd9qvZeG07dKR/WF2I5RQJ4Rx61NQSm2ekEIQbDwBqeuw7PUKajVQOVwWWMVrUOfdBnmhVF5DQyqsQcFrvo83hBZniN7NKcU/E=","dyn_version":"5","sdiToken":"ANZ7SDeDKeCbyTqAb2tDS9pou","sdiToken_Time":"1737652628440"},"openudid":"f2221888b5075d0208272eba6b0965d362f8b485","privateVarAtimespec":1709144217,"privateVarBirthtimespec":1709144217,"privateVarCtimespec":1709144228,"privateVarMtimespec":1709144228,"system_startuptime":1735404935073,"tiktok_birthtime":1737569817,"tt_net_config":{"store_region":"my","store_region_src":"uid","store_sec_uid":"MS4wLjABAAAAcBTfdBUx5_8FTkmz8ZQp26Hf2Ik9vbOxAmtjX4hbzztsmr2czhOsE2H3wdUy6R4J","tnc_etag":"78b4be64-93b46404-98122d18-b0d35d2d","tnc_version":"20250123164918"},"user":{"avatar_url":"https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1594805258216454~c5_300x300.webp?lk3s=a5d48078&nonce=29807&refresh_token=9ea03a5054a15eca5088c465d4eec6c6&x-expires=1737824400&x-signature=%2Bnfj04gf4PqW4stbxCuabVmxS1o%3D&shp=a5d48078&shcp=52683f54","awemeCount":0,"customID":"pt6qc0dj","email":"","followerCount":0,"followingCount":0,"id_token":"","nickname":"pT6qc0DJ","oidc_device_secret":"","registerTime":"2025-01-23 5:18:52 PM +0000","screen_name":"user8501669599752","secUserID":"MS4wLjABAAAAcBTfdBUx5_8FTkmz8ZQp26Hf2Ik9vbOxAmtjX4hbzztsmr2czhOsE2H3wdUy6R4J","sessionKey":"031c3a2738aa78da552129c3bf1f9464","shortID":"0","signature":"","userID":"7463161120015352833","userMode":1,"userPeriod":0},"x_tt_token":"03031c3a2738aa78da552129c3bf1f94640040d81e39b06c596f2a5edafcd0436dbd920c075d4d1bb3217448ba1c42d959de22d6b3df724a80b325c26fd98cc9c8782c827533bb65cbe671d97a6a93a5697b15233eac5f4eebf3350a04e5d52620f5a-CkBiMzU5YjQ4MGQ5YzdjZDM3N2E5ODc1M2I5MzcxMDRhYjY0ODE0ZTg4NmU4MTEyMDg0MzgxYzdkNDFlZDdiZWE0-2.0.0"}', ["followersCount"] = 0, ["followingCount"] = 0, ["likeCount"] = 0 } --data2 = "uuid="..uuid.."&username="..user_name.."&uid=".. tokentable.user.userID.."&appType=tiktok".."&nickname="..nick_name.."&country="..ISO.."¶ms=".. tokenbase64 for i=1,3 do local c, h, r = http.post(url, 10, {['Content-Type']='application/json'}, json.encode(data)) if c==200 or c==201 then --klog(c.." " ..r) --klog("【云控】token上传成功") sys.toast("【云控】token上传成功") sys.msleep(2000) return true else --klog(c) sys.msleep(3000) end if i==3 then --klog("【云控】token 上传fail") sys.toast("【云控】token 上传fail!"); sys.msleep(5000) return false end end end function API_token_云控_task后() --local url = "http://"..ipdomain..":23121/omfnapi/apidocs#/%E8%B4%A6%E5%8F%B7/AccountPoolController_registerDone" local url = taskdomain.."/ykopenapi/app-account/register/tiktok" local data local data2 local currentAppAccountId = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then local currentAppAccount = tasktable.data.appAccounts[sq_appAccounts] if type(currentAppAccount) == "table" and type(currentAppAccount.id) == "string" and currentAppAccount.id ~= "" then currentAppAccountId = currentAppAccount.id end end data = { ["uuid"] = uuid, --["username"] = user_name, --["username"] = SelfProfile.username, --自查没有这个参数 ["uid"] = SelfProfile.userID or uid, --["uid"] = uid, ["appType"] = "tiktok", ["nickname"] = SelfProfile.nickname, --["country"] = ISO, ["signature"] = SelfProfile.signature, ["status"] = status_running, --normal 在线 offline 离线 forbidden 封禁 --["params"] = tokenbase64, --["params"] = json.decode(tokenjson), --["params"] = tokenjson, ["followersCount"] = SelfProfile.follower_count, ["followingCount"] = SelfProfile.following_count, ["likeCount"] = SelfProfile.total_favorited, ["videoCount"] = SelfProfile.aweme_count, } if currentAppAccountId then data["appAccountId"] = currentAppAccountId end if flag本账号已提参 and type(tokenjson) == "string" and tokenjson ~= "" then if flagToken来自AccountTxt and type(tokentable) == "table" then data["params"] = tokentable else data["params"] = tokenjson end elseif type(tokenjson) == "string" and tokenjson ~= "" then klog("【云控_task后】当前账号没有完成新提参,仅上报状态,不携带旧params") end --data2 = "uuid="..uuid.."&username="..user_name.."&uid=".. tokentable.user.userID.."&appType=tiktok".."&nickname="..nick_name.."&country="..ISO.."¶ms=".. tokenbase64 klog("【云控_task后】待上传 uid="..tostring(data.uid).." uuid="..tostring(data.uuid).." 携带params="..tostring(data.params ~= nil)) for i=1,3 do local c, h, r = http.post(url, 10, {['Content-Type']='application/json'}, json.encode(data)) if c==200 or c==201 then local uploadOk, requestDone = tk处理云控Token上传响应(r, "【云控_task后】") if requestDone then return uploadOk, true end else klog(c) sys.msleep(3000) end if i==3 then klog("【云控】token 上传fail") sys.toast("【云控】token 上传fail!"); sys.msleep(5000) return false, false end end end function API_mailcode(mail) klog("codeAddress: "..mail) local uts = os.time() local url = 'https://domain-open-api.cuiqiu.com/v1/message/list' local data = { ["token"] = "228c6f1cf7e7459d98beb67beba2d842", ["folder"] = "Inbox", ["mail_id"] = "1721980571079604073", ["start_time"] = os.date("%Y-%m-%d", os.time()-600), ["end_time"] = os.date("%Y-%m-%d", os.time()+36*3600), ["page"] = 1, ["limit"] = 10, ["to"] = mail, } local request_data = "token="..selects['脆球tk'].."&folder=Inbox".."&mail_id="..selects['mail_id'].."&start_time="..os.date("!%Y-%m-%d", os.time()).."&end_time="..os.date("!%Y-%m-%d", os.time()+36*3600).."&page=1".."&limit=10".."&to="..mail for i=1,50 do --local c, h, r = http.post(url, 50, {['Content-Type']='application/json'}, json.encode(data)) local c, h, r = http.post(url, 50, {}, request_data) if 1>2 then elseif c==200 then klog(r) local restable = json.decode(r) local subject --[[ { "code": 200, "msg": "成功", "data": { "total": 1, "list": [{ "id": "18395", "time": "2025-06-19 14:31:14 +0000 +0000", "timestamp": 1750343474, "subject": "605738 is your verification code", "from": [{ "name": "TikTok", "address": "register@account.tiktok.com" }], "to": [{ "name": "", "address": "ls163@jin-weng.com" }] }] } } ]]-- if restable.code == 200 and restable.msg == "成功" then --if #restable.data.list >0 and string.match(r,mail) then if #restable.data.list >0 then for jj=1, #restable.data.list do --if restable.data.list[jj].to.address == mail and restable.data.list[jj].timestamp >uts-60 then if restable.data.list[jj].timestamp >uts-60 then subject = restable.data.list[jj].subject if subject then Verify_Code6 = string.match(subject, "%d%d%d%d+") klog("获取结果 "..tostring(Verify_Code6)) ttdog = os.time() return true end end end elseif 1>2 and #restable.data.list >0 then subject = restable.data.list[1].subject if subject then Verify_Code6 = string.match(subject, "%d%d%d%d+") klog("获取结果 "..tostring(Verify_Code6)) ttdog = os.time() return true end else toast("没有邮件") end end if i>=3 then runid = 129.9 API_上传log("脆球邮箱错误") return false end end if i>=10 then klog("验证码超时!") sys.toast("验证码超时!"); sys.msleep(2000); Verify_Code6 = nil runid = 129.9 API_上传log("脆球邮箱超时") --ttdog = os.time() --任其超时重加队列 return false else sys.msleep(6000) end end Verify_Code6 = nil --ttdog = os.time() return false end function API_2fa(token) klog("2fa codeAddress: "..token) local uts = os.time() --local url = 'https://2fa.run/2fa/'..token --local url = 'https://www.browserscan.net/2fa/'..token --看不到 --local url = 'https://2fa.show/2fa/'..token --HQ6KBMKBJ3IOLTBW --local url = 'http://2fa.show/2fa/'..token --HQ6KBMKBJ3IOLTBW local url = "https://my-2fa-tool-zeta.vercel.app/api/totp?secret="..token --https://2fa.show/2fa/KXPMMATHYG5COV32B6M6GZBZV7IQ6BTT- for i=1,20 do local c, h, r = http.get(url, 30) if 1>2 then elseif c==200 then Verify_Code6 = nil local expires_in = nil local near_expiry = false --klog(r) if string.match(url, "vercel") then klog(r) Verify_Code6 = string.match(r, "code.-(%d%d%d%d%d%d)") expires_in = tonumber(string.match(r, '"expiresIn"%s*:%s*(%d+)')) else if string.match(r, "copyfun") then --Verify_Code6 = string.match(r, "codetxt.-(%d%d%d%d%d%d)") --https://2fa.run/2fa/ Verify_Code6 = string.match(r, "copyfun.-(%d%d%d%d%d%d)") --https://2fa.show/2fa/ klog("获取结果 "..tostring(Verify_Code6)) else klog("无 copyfun") end end if Verify_Code6 and expires_in and expires_in < 8 then near_expiry = true klog("2fa验证码剩余"..expires_in.."秒,等待下一周期重新获取") Verify_Code6 = nil sys.msleep((expires_in + 2) * 1000) elseif Verify_Code6 then ttdog = os.time() return true elseif not near_expiry and i>=3 then runid = 129.9 API_上传log("2fa错误") return false else sys.msleep(3000) end else klog("API_2fa异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) end if i>=10 then klog("验证码超时!") sys.toast("验证码超时!"); sys.msleep(2000); Verify_Code6 = nil --ttdog = os.time() --任其超时重加队列 API_上传log("2fa超时") return false else sys.msleep(2000) end end Verify_Code6 = nil --ttdog = os.time() return false end function API_2fa_sms(token) --20260222 换这个api获取验证码 klog("2fa_sms codeAddress: "..token) local uts = os.time() --local url = 'https://2fa.run/2fa/'..token --local url = 'https://www.browserscan.net/2fa/'..token --看不到 --local url = 'https://2fa.show/2fa/'..token --HQ6KBMKBJ3IOLTBW --https://2fa.show/2fa/KXPMMATHYG5COV32B6M6GZBZV7IQ6BTT- local url = token local header_send = { ["Content-Type"] = "", ["Content-Length"] = "0", ["X-Original-Url"] = "/Home/Other/getHeader", ["Upgrade-Insecure-Requests"] = "1", ["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36", ["Host"] = "www.example.com", ["Cookie"] = "PHPSESSID=7rjh2uomb8477dggmr85bg9067", ["Accept-Language"] = "zh-CN,zh;q=0.9", ["Accept-Encoding"] = "gzip, deflate", ["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", ["Connection"] = "keep-alive", ["Cache-Control"] = "max-age=0", } for i=1,20 do if i>1 then --可能会弹出验证码弹窗 screen.keep() tk屏幕文字ocr() if ff2(p弹窗验证打码, "弹窗验证打码") then ttdog = os.time() return true end end --local c, h, r = http.get(url, 30, header_send) local c, h, r = http000.get(url) if 1>2 then elseif c==200 then klog(r) if string.match(r, "is your verification code") then --Verify_Code6 = string.match(r, "(%d%d%d%d%d%d) is your verification code") Verify_Code6 = string.match(r, "%d%d%d%d%d%d") klog("获取结果 "..tostring(Verify_Code6)) if Verify_Code6 then ttdog = os.time() return true elseif i>=3 then runid = 129.9 API_上传log("2fa_sms错误") return false end else klog("无 code") end else klog("API_2fa_sms异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) end if i>=10 then klog("验证码超时!") sys.toast("验证码超时!"); sys.msleep(2000); Verify_Code6 = nil --ttdog = os.time() --任其超时重加队列 API_上传log("2fa_sms 超时") return false else sys.msleep(6000) screen.unkeep() end end Verify_Code6 = nil --ttdog = os.time() return false end function extract_code(mail) -- 提取 6 位数字验证码 if not mail then return nil end local sources = { mail.subject or "", mail.text or "", mail.html or "" } for _, s in ipairs(sources) do -- Lua 模式匹配 6 位数字 local code = string.match(s, "%f[%d]%d%d%d%d%d%f[%D]") if code then return code end end return nil end function API_mailcode_outlook() --https://mail-eosin-nine.vercel.app/api/mail-new?email=NicholasRusso4229%40outlook.com&client_id=dbc8e03a-b00c-46bd-ae65-b683e7707cb0&refresh_token=M.C505_BAY.0.U.-Cp7hWuMy0Bz4ncP0IxA4v2Acg!5rGvaL!mFafouR2OKOLpJ8w9IDenm6YiOeQPIwaSFtDi9elhvj58Zja8x!t2IIGRkHaFvVN6zRkD0!BBWCb2EEQRkMtqcAJ!roD2is1P*nmo74kFBdsQ2olwYVymjv9Vu!WyU1!ro9Z643hhcTCcPYJgHZPE1eU3C5Sf6OtK2bHlhI4nayzSKiijejrDInmsqCSL9mu49MQAi!hcIolxdn1BhJWsA*f8PJE6Gd23eloFBHoDrMBfqS!sbfm0OV149P0liBXHdBz*b031NMqp9WDnKbLHewDYYPJ08Q2bvxWgSLdixs1Ec!TjtmrpAiM*g9d9CtnN5quGeFWLA60J4kvNnBmJLRUH!N8epQb8RINXMtSCOSZ7m4Y!IPDeY$&mailbox=INBOX&response_type=json local url = "https://mail-eosin-nine.vercel.app/api/mail-new".."?email="..phone.."&client_id="..clientId.."&refresh_token="..refreshToken.."&mailbox=INBOX&response_type=json" klog("url_outlook "..url) local hs = { ["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", -- 模拟 IE8 的请求 ["Cookie"] = "34terwx7asfh", -- 顺带 Cookie 提交 } for i=1,50 do local c,h,r = http.get(url, 15, hs) if c == 200 then --[[{ "send":"\"TikTok\" ", "subject":"812265 is your verification code", "text":"[http://p16-tiktokcdn-com.akamaized.net/obj/tiktok-obj/f70f9d0dc867d6c71ce2cd684a0ffff0]\nVerification Code\n\nTo verify your account, enter this code in TikTok:\n\n812265\n\nVerification codes expire after 48 hours.\n\nIf you didn't request this code, you can ignore this message.\n\nTikTok Support Team\n\nTikTok Help Center: https://support.tiktok.com/ [https://support.tiktok.com/]\n\nHave a question?\nCheck out our help center or contact us in the app using Settings > Report a\nProblem.\nThis is an automatically generated email. Replies to this email address aren't\nmonitored.\n\nThis email was generated for eyecwzqz26.\nPrivacy Policy [https://www.tiktok.com/en/privacy-policy?lang=en]\nTikTok, 10100 Venice Bivd, Culver City, CA 90232\n[http://url7709.account.tiktok.com/wf/open?upn=u001.gOE9ZgSvWQrzqRAVUH1DAqJTz0XOGXNYTmY6lh4vly-2FKSDDRLZloqqUkXehR1V28H6-2Bn-2FGmZpYvhZ6TXJXxUq-2BW1Hmp8i4VOXoXory-2FpC1t9ASsHHMODj6YnVeP3pSLKDgCq-2F4f0F1nEL2WNtmtIe7p0L2sQnWTtjFPflzRZh3sfuQnDWmt3rNNk2Hs3EJ-2FP4I0-2BvsN6CrkkCL-2BddKT-2BrtNbnVAKNPuh0ZhEod2FfGEfqRQ945t-2Bu32R9CLduRGxYhphXaL1TZEAULnnP6KFpNQri1BfUERqwiqmls60kvjrGU2J-2FvArt7YSH9fOp0-2FH3rqxmeJe1UGnLGBFy0aNNgvG1JZKJfchcVnIbtEoLosDnhm-2BiogCoHT2FLyXLnOkEBjdXQcTB8N3zL9pzNHqWA-3D-3D]", "html":"\n\n \n \n\n\n\n
\n
\n \n
\n
\n Verification Code\n
\n
\n

To verify your account, enter this code in TikTok:

\n

812265

\n

Verification codes expire after 48 hours.

\n

If you didn't request this code, you can ignore this message.

\n\n

TikTok Support Team

\n

\n TikTok Help Center: \n https://support.tiktok.com/\n

\n
\n \n
\n
Have a question?
\n
Check out our help center or contact us in the app using\n Settings > Report a Problem.
\n
This is an automatically generated email. Replies to this email address aren't monitored.
\n
\n
\n
\n
\n This email was generated for eyecwzqz26.\n
\n
\n Privacy Policy\n \n
\n
TikTok, 10100 Venice Bivd, Culver City, CA 90232
\n
\n
\n \n\"\"\n\n\n", "date":"2025-12-16T15:36:14.000Z" } ]] klog(r) local restable = json.decode(r) --if restable.date and vartk.mail_outlook and vartk.mail_outlook <= restable.date and string.match(r, "%D(%d%d%d%d%d%d)%D") then if string.match(r, "%D(%d%d%d%d%d%d)%D") then Verify_Code6 = string.match(r, "%D(%d%d%d%d%d%d)%D") klog("获取结果 "..Verify_Code6) ttdog = os.time() return true elseif i>=3 then runid = 129.9 API_上传log("outlook错误") return false else klog("提取验证码失败") end else klog("API_outlook异常 "..c) end if i>=12 then klog("验证码超时!") sys.toast("验证码超时!"); sys.msleep(2000); Verify_Code6 = nil runid = 129.9 API_上传log("outlook超时") return false else sys.msleep(6000) end end return false end function API_换绑(uname) local tt换绑 = os.time() local url = "http://127.0.0.1:8182/unbindPhoneAction?loginType=email&email="..uname.."@wan.ztik.cc&username_password=123456" klog("API换绑 "..url) local runidC = 0 local ttchk换绑 = os.time() local i=0 while true do screen.keep() if runidC == 0 then i=i+1 local c, h, r = http.get(url, 160) screen.unkeep() if c==200 then klog(string.gsub(r, "\n","")) if string.match(r, "success") then return true end --if string.match(r, "timeout") then return "timeout" end else klog("API换绑 异常!".." c:"..tostring(c).." r:"..tostring(r)) end if ff2(p79_2感叹号, "换绑界面 Account Infomation 有感叹号", 1) then return true elseif ff2(p102足迹save点, "Viewer history 点Save", 1) then ttchk换绑 = os.time() elseif c==200 and string.match(r, "timeout") then if selects["功能"] == "注册" then runidC = 1 ttchk换绑 = os.time() elseif selects["功能"] == "换绑" then flagAPI换绑 = "timeout" return false end end if i>=10 or os.time()-ttchk换绑 > 120 then klog("API换绑 超时!") if selects["功能"] == "注册" then runidC = 1 ttchk换绑 = os.time() elseif selects["功能"] == "换绑" then flagAPI换绑 = "timeout" return false end else sys.msleep(3000) end elseif runidC >= 1 and runidC <=2 then if runidC == 2 then if ff2(p79有字未成功, "有字 未成功") then sys.msleep(300) else klog("无字 换绑成功") return true end end if ff2(p79_2感叹号, "换绑界面 Account Infomation 有感叹号", 1) then return true elseif ff2(p79换绑, "换绑界面 Account Infomation", 1) then runidC = 2 end if os.time()-ttchk换绑 >10 then sys.toast("API换绑 超时!"); sys.msleep(3000); return false end end screen.unkeep() sys.msleep(500) end end function API_换绑_Email_touchios(uname) --touchios_TK local tt换绑 = os.time() local url = "http://43.133.7.201/admin/api/email_api.php?action=add_email&api_key=0b0628a28f817f11ff818f92e3d64b189a3a330a7743943018c63ba7c99e269c&email="..uname.."@wan."..taskdomain.."&password=112233&domain=wan."..taskdomain klog("API换绑Email "..url) local runidC = 0 local ttchk换绑 = os.time() local i=0 while true do screen.keep() if runidC == 0 then i=i+1 local c, h, r = http.get(url, 60) screen.unkeep() if c==200 then klog(string.gsub(r, "\n","")) ttdog = os.time() if string.match(r, "success") then return true end --runidC = 1 ttchk换绑 = os.time() else klog("API换绑 异常!".." c:"..tostring(c).." r:"..tostring(r)) end if i>=10 or os.time()-ttchk换绑 > 120 then klog("API换绑 超时!") ttdog = os.time() return false else sys.msleep(3000) end end screen.unkeep() sys.msleep(500) end end function API_换绑_Email验证_touchios(uname) --touchios_TK local tt换绑 = os.time() local url = "http://43.133.7.201/api/sj.php?email="..uname.."@wan."..taskdomain klog("API换绑Email验证 "..url) local runidC = 0 local ttchk换绑 = os.time() local i=0 while true do screen.keep() if runidC == 0 then i=i+1 local c, h, r = http.get(url, 60) screen.unkeep() if c==200 then r = string.gsub(r, "\n","") --klog(r) if string.match(r, "404 Not Found") then klog("404 Not Found") end ttdog = os.time() Emailcode30 = string.match(r, "(%d+) is your TikTok code") if Emailcode30 then klog("Emailcode: "..Emailcode30) return true end else klog("API换绑 异常!".." c:"..tostring(c).." r:"..tostring(r)) end if i>=40 or os.time()-ttchk换绑 > 130 then klog("API换绑 超时!") return false else sys.msleep(3000) end end screen.unkeep() sys.msleep(500) end end function API_换绑结果(updata) local url = "http://"..ipdomain..":23121/omfnapi/account-pool/released/account/"..SelfProfile.userID local data = {["releaseStatus"]= updata} klog("【API_换绑结果】"..url.."\n"..json.encode(data)) for i=1,20 do local c, h, r = http.post(url, 20, {['Content-Type']='application/json'}, json.encode(data)) if c==200 or c==201 then klog("【API_换绑结果】上传成功 "..c.." " ..r) return true else klog("API换绑结果上传 异常!".." c:"..tostring(c).." r:"..tostring(r)) sys.msleep(3000) end if i==5 then klog("【API_换绑结果】上传fail") sys.toast("【API_换绑结果】 上传fail!"); sys.msleep(5000) return false end end end function API_待换绑_phone() --换绑功能 local url = "http://"..ipdomain..":23121/omfnapi/account-pool/try/release/phone" klog("【API_待换绑】"..url) for i=1,20 do local c, h, r = http.get(url, 20) if c==200 then klog(r) -- {"code":1,"data":{"tuid":213868,"text1":"2894838241","text2":"https://api668.com/sms/get?key=94020046a77642c3886b911e306a47af"}} -- {"code":0,"msg":"没有待换绑的账号"} local res = json.decode(r) if res.code == 1 then getphone = res.data ttdog=os.time() return true else klog("取号异常") sys.toast("取号异常!\n\n"..r); sys.msleep(5000) --os.exit(); end elseif i==20 then klog("取号异常!已尝试20次") sys.alert("取号异常!", 5); sys.msleep(1000) --os.exit(); else sys.msleep(3000) end end ttdog=os.time() return false end function API_phone_unavailable() --封禁 local url = "http://"..ipdomain..":23121/omfnapi/account-pool/phone/unavailable/"..getphone.tuid klog("【API_phone_unavailable】"..url) for i=1,20 do local c, h, r = http.post(url, 20) if c==200 or c==201 then klog("【API_phone_unavailable】上传成功 "..c.." " ..r) return true else klog(c) sys.msleep(3000) end if i==5 then klog("【API_phone_unavailable】上传fail") sys.toast("【API_phone_unavailable】 上传fail!"); sys.msleep(5000) return false end end end function CK提取_kg_12() --20241028 tk_cg=1 local filefail = "文件缺失 " local flag_Cookies = "" local err = "" --local DataPath = appDataPath("com.zhiliaoapp.musically"); --DataPath = appBundlePath("com.zhiliaoapp.musically"); local DataPath = app.data_path("com.zhiliaoapp.musically"); --local pf01 = DataPath .. "/Library/Preferences/apm.heimdallr.userdefaults.plist" local pf02 = DataPath .. "/Library/Preferences/com.zhiliaoapp.musically.plist" local pf03 = DataPath .. "/Library/Cookies/Cookies.plist" local pf03b= DataPath .. "/Library/Cookies/Cookies.binarycookies" local pf04 = DataPath .. "/Documents/tt_net_config.config" if not file.exists(pf02) then filefail = filefail.."com.zhiliaoapp.musically.plist " end if 1>2 and file.exists(pf03) then flag_Cookies = "Cookies.plist" elseif file.exists(pf03b) then flag_Cookies = "Cookies.binarycookies" else filefail = filefail.."Cookies_file " end if not file.exists(pf04) then filefail = filefail.."tt_net_config.config " end if filefail == "文件缺失 " then --3个文件都存在 else klog(filefail) sys.alert(filefail) return false end local ckg1 = { ["dumper-version"] = "3.1", ["app_ver"] = "", ["x-tt-token"] = "", ["cookie_str"] = { {"user_oec_info", "",}, {"msToken", "",}, {"install_id", "",}, {"store-country-code", "",}, {"store-country-code-src", "",}, {"store-idc", "alisg",}, {"tt-target-idc", "",}, {"ttreq", "",}, {"tt-target-idc-sign", "",}, {"cmpl_token", "",}, {"d_ticket", "",}, {"multi_sids", "",}, {"odin_tt", "",}, {"sessionid", "",}, {"sessionid_ss", "",}, {"sid_guard", "",}, {"sid_tt", "",}, {"uid_tt", "",}, {"uid_tt_ss", "",}, {"passport_csrf_token", "",}, {"passport_csrf_token_default", "",}, }, ["common-params"] = { {"version_code", "",}, {"language", "",}, {"app_name", "",}, {"app_version", "",}, {"carrier_region", "",}, {"op_region", "",}, {"residence", "",}, {"channel", "",}, {"mcc_mnc", "",}, {"tz_offset", "",}, {"device_id", "",}, {"account_region", "",}, {"sys_region", "",}, {"aid", "",}, {"locale", "",}, {"screen_width", "",}, {"uoo", "",}, {"openudid", "",}, {"cdid", "",}, {"os_api", "",}, {"idfv", "",}, {"ac", "",}, {"os_version", "",}, {"app_language", "",}, {"content_language", "",}, {"tz_name", "",}, {"current_region", "",}, {"device_platform", "",}, {"build_number", "",}, {"iid", "",}, {"device_type", "",}, {"idfa", "",}, }, ["bundleId"] = "com.zhiliaoapp.musically", ["timestamp"] = "", ["user"] = { --com.zhiliaoapp.musically ["nickname"] = "", ["uid"] = "", ["unique_id"] = "", ["short_id"] = "0", ["sec_uid"] = "", } } local ckg2 = { ["client_key"] = "", ["dumper-version"] = "3.1", ["app_ver"] = "", ["x-tt-token"] = "", ["cookie_str"] = "", ["common-params"] = "", ["bundleId"] = "com.zhiliaoapp.musically", ["timestamp"] = "", ["user"] = { ["nickname"] = "", ["uid"] = "", ["unique_id"] = "", ["short_id"] = "0", ["sec_uid"] = "", } } --pf01 apm.heimdallr.userdefaults.plist --local strpf01 = file.reads(pf01) if 1>2 and strpf01 then ckg2["timestamp"] = string.match(strpf01, "%a(16%d%d%d%d%d%d%d%d)%a") or string.match(strpf01, "%a(17%d%d%d%d%d%d%d%d)%a") if ckg2["timestamp"] then else ckg2["timestamp"] = '' err = err.." timestamp" end end --pf02 com.zhiliaoapp.musically.plist local strpf02 = file.reads(pf02) local userstr if strpf02 then ckg2["x-tt-token"] = string.match(strpf02, "([%w%-]+%-2%.0%.0)") ckg2["user"]["uid"] = string.match(strpf02, "share_author_id=(%d+)") ckg2["user"]["nickname"] = string.match(strpf02, "ttps://www.tiktok.com/@(.-)?") ckg2["user"]["unique_id"] = string.match(strpf02, "ttps://www.tiktok.com/@(.-)?") ckg2["user"]["sec_uid"] = string.match(strpf02, "&sec_uid=(.-)&share_author") if ckg2["x-tt-token"] then else ckg2["x-tt-token"] = '' err = err.." x-tt-token" end if ckg2["user"]["uid"] then else ckg2["user"]["uid"] = '' err = err.." uid" end if ckg2["user"]["nickname"] then else ckg2["user"]["nickname"]='' err = err.." nickname" end if ckg2["user"]["unique_id"]then else ckg2["user"]["unique_id"]='' err = err.." unique_id" end if ckg2["user"]["sec_uid"] then else ckg2["user"]["sec_uid"]='' err = err.." sec_uid" end userstr = "{" userstr = userstr .. "\"nickname\""..":".."\""..ckg2["user"]["nickname"].."\"".."," userstr = userstr .. "\"uid\""..":".."\""..ckg2["user"]["uid"].."\"".."," userstr = userstr .. "\"unique_id\""..":".."\""..ckg2["user"]["unique_id"].."\"".."," userstr = userstr .. "\"short_id\""..":".."\""..ckg2["user"]["short_id"].."\"".."," userstr = userstr .. "\"sec_uid\""..":".."\""..ckg2["user"]["sec_uid"].."\"".."}" screen_name = ckg2["user"]["nickname"] else return false end --pf03 Cookies.plist ["cookie_str"] --pf03b Cookies.binarycookies ["cookie_str"] if flag_Cookies == "Cookies.plist" then local strpf03 = file.reads(pf03) --klog("cookie_str") for i=1, #ckg1["cookie_str"] do if ckg1["cookie_str"][i][2] == "" then local kk = string.gsub(ckg1["cookie_str"][i][1], "-", "%%-") ckg1["cookie_str"][i][2] = string.match(strpf03, kk..".-(.-)") if ckg1["cookie_str"][i][2] then else err = err.." ck_"..ckg1["cookie_str"][i][1] ckg1["cookie_str"][i][2] = "" end --klog(ckg1["cookie_str"][i][1].." "..ckg1["cookie_str"][i][2]) end if i<#ckg1["cookie_str"] then ckg2["cookie_str"] = ckg2["cookie_str"].. ckg1["cookie_str"][i][1].."="..ckg1["cookie_str"][i][2].."; " else ckg2["cookie_str"] = ckg2["cookie_str"].. ckg1["cookie_str"][i][1].."="..ckg1["cookie_str"][i][2] end end elseif flag_Cookies == "Cookies.binarycookies" then local strpf03 = file.reads(pf03b) for i=1, #ckg1["cookie_str"] do if ckg1["cookie_str"][i][2] == "" then local kk = string.gsub(ckg1["cookie_str"][i][1], "-", "%%-") ckg1["cookie_str"][i][2] = string.match(strpf03, kk..".-(%w[%w$%_%+%-%%%=]+)") if ckg1["cookie_str"][i][2] then else err = err.." ck_"..ckg1["cookie_str"][i][1] ckg1["cookie_str"][i][2] = "" end --klog(ckg1["cookie_str"][i][1].." "..ckg1["cookie_str"][i][2]) end if i<#ckg1["cookie_str"] then ckg2["cookie_str"] = ckg2["cookie_str"].. ckg1["cookie_str"][i][1].."="..ckg1["cookie_str"][i][2].."; " else ckg2["cookie_str"] = ckg2["cookie_str"].. ckg1["cookie_str"][i][1].."="..ckg1["cookie_str"][i][2] end end else return false end --pf04 tt_net_config.config ["common-params"] local strpf04 = file.reads(pf04) if strpf04 then ckg2["client_key"] = string.match(strpf04, "client_key&#%*(.-)@$*") if ckg2["client_key"] then else ckg2["client_key"] = '' err = err.." client_key" end ckg2["app_ver"] = string.match(strpf04, "version_code=(.-)&") --klog("common-params") for i=1, #ckg1["common-params"] do if ckg1["common-params"][i][2] == "" then ckg1["common-params"][i][2] = string.match(strpf04, "("..ckg1["common-params"][i][1].."=.-)&") --if ckg1["common-params"][i][2] == nil then ckg1["common-params"][i][2] = "" end if ckg1["common-params"][i][2] then else err = err.." cmp_"..ckg1["common-params"][i][1] ckg1["common-params"][i][2] = "" end --klog(ckg1["common-params"][i][1].." "..ckg1["common-params"][i][2]) end if i==1 then ckg2["common-params"] = ckg2["common-params"].. ckg1["common-params"][i][2] else ckg2["common-params"] = ckg2["common-params"].. "&"..ckg1["common-params"][i][2] end end else return false end --mssdk local msp1 = "/private/var/mobile/Media/1ferver/lua/scripts/.msp_589c22335a381f122d129225f5c0ba3056ed5811" msp1 = DataPath .. "/Library/.iphonems/mssdk/ov/.msp_589c22335a381f122d129225f5c0ba3056ed5811" local strpf05 = string.base64_encode(file.reads(msp1)) local msp2 = "/private/var/mobile/Media/1ferver/lua/scripts/.msp_092fde7a53a0274594af0984c7830fc0c13dc8bd" msp2 = DataPath .. "/Library/.iphonems/mssdk/ov/.msp_092fde7a53a0274594af0984c7830fc0c13dc8bd" local strpf06 = string.base64_encode(file.reads(msp2)) local mssdkstr = "{\".msp_589c22335a381f122d129225f5c0ba3056ed5811\":\""..strpf05.."\",\".msp_092fde7a53a0274594af0984c7830fc0c13dc8bd\":\""..strpf06.."\"}" local content = "{" content = content .. "\"client_key\""..":".."\""..ckg2["client_key"].."\""..", " content = content .. "\"dumper-version\""..":".."\""..ckg2["dumper-version"].."\""..", " content = content .. "\"app_ver\""..":".."\""..ckg2["app_ver"].."\""..", " content = content .. "\"x-tt-token\""..":".."\""..ckg2["x-tt-token"].."\""..", " content = content .. "\"cookie_str\""..":".."\""..ckg2["cookie_str"].."\""..", " content = content .. "\"common-params\""..":".."\""..ckg2["common-params"].."\""..", " content = content .. "\"bundleId\""..":".."\""..ckg2["bundleId"].."\""..", " content = content .. "\"timestamp\""..":".."\""..ckg2["timestamp"].."\""..", " content = content .. "\"user\""..":"..userstr..", " content = content .. "\"mssdk\""..":"..mssdkstr content = content .. "}" tkstr = content tkstr64 = string.base64_encode(tkstr) --save local savefile = "/var/mobile/Media/1ferver/res/"..os.date("%Y%m%d").."_ck成功.txt" local savefile2 = "/var/mobile/Media/1ferver/res/"..os.date("%Y%m%d").."_ck加密.txt" file.appends(savefile, tkstr.."\r\n\r\n\r\n") file.appends(savefile2, tkstr64.."\r\n\r\n\r\n") if err == "" then --dialog("【成功】") return true else klog("提参err "..err) --dialog("【提参err】\n\n"..err) return true end end function backupslim(cuid) klog("backup slim start "..tostring(cuid)) local BASE_DIR = "/var/mobile/Documents/HttpService/com.zhiliaoapp.musically" local UID = tostring(cuid or "") local LOG_FILE = BASE_DIR .. "/sys.log" -- HttpServiceApp 对 TikTok 会调用 BackUpTk,本身已经按白名单瘦身。 -- 这里暂时不再做第二轮删除,用于排除 Lua 清理造成的启动闪退。 local CLEAN_PATHS = {} local REQUIRED_DIRS = { "Documents", "Library", } local stats = { file_ok = 0, dir_ok = 0, bytes_removed = 0, remove_fail = 0, list_fail = 0 } local function slim_log(msg) local line = os.date("%Y-%m-%d %H:%M:%S") .. " " .. msg if sys and sys.log then pcall(sys.log, line) end if file and file.appends then pcall(file.appends, LOG_FILE, line .. "\n") end klog(msg) end local function slim_fail(msg) klog("slim failed: " .. tostring(msg)) if sys and sys.toast then pcall(sys.toast, "slim failed: " .. tostring(msg), 3) end end local ok_lfs, lfs = pcall(require, "lfs") if not ok_lfs then slim_fail("require lfs failed") return false end local function attr(path) local ok, ret = pcall(lfs.attributes, path) if ok then return ret end return nil end local function required_structure_ready(root) local root_attr = attr(root) if not root_attr or root_attr.mode ~= "directory" then return false, "backup root" end for _, rel in ipairs(REQUIRED_DIRS) do local a = attr(root .. "/" .. rel) if not a or a.mode ~= "directory" then return false, rel end end return true, nil end local function remove_file(path, size) local ok, ret = pcall(os.remove, path) if ok and ret then stats.file_ok = stats.file_ok + 1 stats.bytes_removed = stats.bytes_removed + (tonumber(size) or 0) return true end stats.remove_fail = stats.remove_fail + 1 klog("FILE_FAIL " .. path) return false end local function remove_dir(path) local ok, ret = pcall(lfs.rmdir, path) if ok and ret then stats.dir_ok = stats.dir_ok + 1 return true end ok, ret = pcall(os.remove, path) if ok and ret then stats.dir_ok = stats.dir_ok + 1 return true end stats.remove_fail = stats.remove_fail + 1 klog("DIR_FAIL " .. path) return false end local function recursive_remove(path, depth) depth = depth or 0 if depth > 40 then stats.remove_fail = stats.remove_fail + 1 slim_log("REMOVE_FAIL max_depth " .. path) return false end local a = attr(path) if not a then return true end if a.mode == "directory" then local ok = pcall(function() for name in lfs.dir(path) do if name ~= "." and name ~= ".." then recursive_remove(path .. "/" .. name, depth + 1) end end end) if not ok then stats.list_fail = stats.list_fail + 1 klog("LIST_FAIL " .. path) end return remove_dir(path) end return remove_file(path, a.size) end local function slim_one(root, rel) local path = root .. "/" .. rel if path:sub(1, #root + 1) ~= root .. "/" then slim_fail("unsafe path: " .. path) return end if not attr(path) then slim_log("SKIP_NOT_FOUND " .. rel) return end klog("CLEAN_BEGIN " .. rel) recursive_remove(path, 0) if not attr(path) then slim_log("CLEAN_OK_REMOVED " .. rel) return end slim_log("WARN_NOT_EMPTY " .. rel) end if not UID:match("^%d+$") then slim_fail("uid invalid: " .. UID) return false end local root = BASE_DIR .. "/" .. UID klog("START slim uid=" .. UID) klog("TARGET " .. root) local structure_ok, missing = required_structure_ready(root) if not structure_ok then slim_fail("backup folder not ready: " .. tostring(missing)) return false end if sys and sys.toast then pcall(sys.toast, "slim backup: " .. UID, 2) end for _, rel in ipairs(CLEAN_PATHS) do slim_one(root, rel) end structure_ok, missing = required_structure_ready(root) if not structure_ok then slim_fail("backup invalid after slim: " .. tostring(missing)) return false end klog("SIZE saved=" .. tostring(stats.bytes_removed)) klog("SUMMARY file_ok=" .. stats.file_ok .. " dir_ok=" .. stats.dir_ok .. " remove_fail=" .. stats.remove_fail .. " list_fail=" .. stats.list_fail) if stats.remove_fail > 0 or stats.list_fail > 0 then slim_fail("cleanup incomplete") return false end klog("SLIM_DONE uid=" .. UID .. " backup_folder_kept=true") if sys and sys.toast then pcall(sys.toast, "slim done: " .. UID, 3) end return true end function tk备份在本机() if 1>0 then --if Deam.Backup(tokentable.user.userID.."_"..tokentable.commonParams.app_region) then --if Deam.Backup(tokentable.user.userID) then if Deam.Backup(SelfProfile.userID) then klog("备份完成") kloghead("备份完成") return true end end return false end function main_var_任务() ttdog = os.time() ttshot = os.time() tttap = {ttdog, 0, ttdog, x=-1, y=-1} --最初时刻 重复次数 最近时刻 点击坐标 ttwifi = os.time() flag当前状态 = {0, nil} --一些特别的当前状态 {时刻, 状态名称} flag休眠 = false flag新机登录 = false flag任务失败 = false 任务失败原因 = nil flag账号任务失败 = false 账号任务失败原因 = nil flag登录失败 = false flag登录频繁 = false flag任务有账号失败 = false flagSwipe重启后提参 = nil c登录网络重试 = 0 flag强制切换IP一次 = nil runid = -1 vartk = {} c上滑swipe = 0 c上滑卡住恢复 = 0 tt上滑卡住开始 = nil gateway_script_heartbeat_interval = DEFAULT_SCRIPT_HEARTBEAT_INTERVAL gateway_last_script_heartbeat_at = nil end function main_任务() --【任务】 main_var_任务() while true do if gateway_script_heartbeat_tick(false, "running") then runid = 0.9 tdog = os.time() end klog(" ["..runid.."]") screen.keep() if runid>=100 and runid<129.8 then tk屏幕文字ocr() else ocrtext = "" end if runid>=100 and runid<129.8 then if ff2(p弹窗验证打码, "弹窗验证打码") and tk验证打码() then txtocr="" ocrtext = "" vartk.pswNext = 0 vartk.V2pswNext = 0 elseif ff2(p141验证码错, "Verification code is expired or incorrect 验证码错误 放弃任务") then API_上传log("验证码错误") runid = 129.9 txtocr="" ocrtext = "" elseif ff2(p401封禁banned, "封禁_401") then ocrlog() status_running = "forbidden" runid = 129.9 txtocr="" ocrtext = "" elseif ff2(p102足迹save点, "Viewer history 点Save/Confirm", 1) then elseif ff2(p124Notnow_savelogin, "弹窗 savelogin_124 点 Not now", 1) then elseif ff2(p301弹窗Reconfirmemail, "弹窗 Reconfirm email_301 点Confirm", 1) then elseif ff2(p302弹窗FinishSettingUpiPhone, "弹窗 Finish Setting Up iPhone_302 点Not now", 1) then elseif ff2(p303弹窗Viewerhistory, "弹窗 Viewer history_303 点Confirm", 1) then elseif ff2(p304弹窗ChangestoourService, "弹窗 Changes to our Service_304 点Continue", 1) then elseif ff2(p305弹窗TermsofService, "弹窗 Terms of Service_305 点Continue") then if interD("C305", 5) then click(Xin0,Yin0) end elseif ff2(p306弹窗Agreeandcontinue, "弹窗 Agree and continue", 1) then ttdog = os.time()+60 elseif ff2(p307弹窗Servicesnotavailable, "弹窗 Services not available 点Close app", 1) then --API_上传log("无服务") --runid = 129.9 elseif ff2(p308弹窗PrivacyPolicyUpdate, "弹窗 Privacy Policy Update 点OK/Got it", 1) then elseif ff2(p309弹窗Accountstatus, "弹窗 Account status 点OK", 1) then sys.msleep(3000) tt重登 = os.time() SelfProfile = {status = "Login expired" } elseif runid>=116 and runid<120 and ff2(p310意外_Managetheadsyousee, "意外点错 p310意外_Manage the ads you see") then for _, item in pairs(ocrinfo) do if type(item) == "table" and item.text and (item.text=="(" or item.text=="<") then klog("左上返回 (<") touch.tap(item.x+10, item.y+15) break end end elseif ff2(p311弹窗TermsandConditions, "弹窗 Terms and Conditions") then if ff2(p311弹窗TermsandConditions_C, "点 Continue", 1) then elseif ff2(p311弹窗TermsandConditions_A, "点 Agree to all", 1) then end elseif ff2(p313弹窗Allow_personalised_ads, "弹窗 Allow personalised ads? 点Accept", 1) then elseif ff2(p314弹窗Allow_trending_content, "弹窗 Allow trending content 点Allow", 1) then elseif ff2(p315弹窗Remote_access, "弹窗 Remote-access 点Got it", 1) then elseif ff2(p316弹窗Community, "弹窗 Community 点Got it", 1) then elseif ff2(p319弹窗adsettings, "弹窗 ad settings 点Got it", 1) then elseif ff2(p317弹窗Saveloginfornexttime, "弹窗 Save login for next time 点 Not now", 1) then elseif ff2(p318弹窗Getnotifiedof, "弹窗 Get notified of 点 Not now", 1) then elseif ff2(p318_2弹窗notifications, "弹窗 Turn on notifications 点 Not now", 1) then elseif ff2(p320弹窗Letothersseeyou, "弹窗 Let others see you 点 Not now", 1) then elseif ff2(p321弹窗PrivacyHighlights, "弹窗 Privacy Highlights 点 Dismiss", 1) then elseif ff2(p322弹窗SafetyVerification, "弹窗 Safety Verification 叉掉") and ff2(p322弹窗X, "X", 1) then elseif ff2(p323弹窗Verification, "弹窗 Safety Verification 叉掉 并重启环境") then sys.msleep(2000) ff2(p323弹窗X, "X", 1) sys.msleep(2000) Close_app("com.zhiliaoapp.musically") sys.msleep(3000) runid = 100 vartk.fg新机重登录 = true elseif ff2(p324弹窗Findcontacts, "弹窗 Find contacts 点Don't allow", 1) then elseif ff2(p328弹窗Youonlyhave, "弹窗 You only have 点 OK", 1) then elseif ff2(p330弹窗Verifyrobot, "弹窗 Verify robot 重启环境") then Close_app("com.zhiliaoapp.musically") sys.msleep(3000) runid = 100 vartk.fg新机重登录 = true elseif ff2(p331弹窗iPhoneStorageFull, "弹窗 iPhone Storage Full 点 Not Now", 1) then elseif ff2(p501小火箭弹窗Dismiss, "小火箭弹窗 点Dismiss", 1) then end end if runid == 129.9 then --封禁账号 或 其他原因 退出该备份账号的任务流程 if not tk有效TikTokUID(uid) then flag账号任务失败 = true flag任务有账号失败 = true 账号任务失败原因 = 账号任务失败原因 or "登录失败,缺少有效UID" end if status_running == "forbidden" then flag账号任务失败 = true 账号任务失败原因 = 账号任务失败原因 or "账号被封禁" flag任务失败 = true 任务失败原因 = 任务失败原因 or 账号任务失败原因 end if 1>2 then elseif tasktable.type == "update-app-account-task" then if flag任务失败 or flag账号任务失败 or not tk有效TikTokUID(uid) then local fail_reason = 账号任务失败原因 or 任务失败原因 or "登录失败,缺少有效UID" API_gateway_task_report("failed", true, fail_reason, fail_reason, {loginFailed = flag登录失败 == true, loginFrequent = flag登录频繁 == true}) else API_update_app_account_task_done() --标记账号更新任务完成 end elseif tasktable.type == "follow-stock-app-account-task" then API_followstockappaccounttask_mark_completed() --标记应用账号完成任务 elseif tasktable.type == "follow-stock-app-account-task-with-update" then if flag任务失败 or flag账号任务失败 or not tk有效TikTokUID(uid) then local fail_reason = 账号任务失败原因 or 任务失败原因 or "登录失败,缺少有效UID" API_gateway_task_report("failed", true, fail_reason, fail_reason, {loginFailed = flag登录失败 == true, loginFrequent = flag登录频繁 == true}) else API_update_app_account_task_done() API_followstockappaccounttask_mark_completed() --标记应用账号完成任务 end elseif tasktable.type == "dm-task" then API_dmtask_mark_completed() --标记私信任务完成 end if not flag新机登录 or status_running == "forbidden" then API_token_云控_task后() end if status_running == "forbidden" then API_上传log("封禁") end if flag休眠 then runid = 0.9 else runid = 130 end end if runid == 129.8 then --加回队列 事后再来 if tasktable.data.appAccounts[sq_appAccounts].retry ==nil then klog("retry 参数异常 放弃") runid = 129.9 elseif tasktable.data.appAccounts[sq_appAccounts].retry >= 2 then klog("【本uid已经重试过3次,放弃】uid:"..uid) local retry_reason = "队列重试3次仍未完成" if type(账号任务失败原因) == "string" and 账号任务失败原因 ~= "" then retry_reason = retry_reason..":"..账号任务失败原因 end if not tk有效TikTokUID(uid) then retry_reason = retry_reason..",未获取有效UID" end 账号任务失败原因 = retry_reason API_上传log(retry_reason) runid = 129.9 ttdog = os.time() else tasktable.data.appAccounts[sq_appAccounts].retry = tasktable.data.appAccounts[sq_appAccounts].retry+1 table.insert(tasktable.data.appAccounts, tasktable.data.appAccounts[sq_appAccounts]) klog("本uid 任务暂放弃 添加到队列最后 uid:"..uid) runid = 130 ttdog = os.time() end end if runid == 130 then sq_appAccounts = sq_appAccounts + 1 if sq_appAccounts <= #tasktable.data.appAccounts then runid = 2 ttdog = os.time() elseif tasktable.type == "update-app-account-task" then if not flag任务失败 and not flag任务有账号失败 then API_gateway_task_report("done", false) end runid = 0.9 ttdog = os.time() elseif tasktable.type == "increase-follower-task" then for pt = 1, #tasktable.data.stockAppAccounts do if exec_OtherProfile(tasktable.data.stockAppAccounts[pt].uid, tasktable.data.stockAppAccounts[pt].secUid) then --OtherProfile if API_increase_follower_task_update_uid(taskId, tasktable.data.stockAppAccounts[pt].uid, OtherProfile.follower_count) then end end end API_gateway_task_report("done", false) runid = 0.9 ttdog = os.time() elseif tasktable.type == "follow-stock-app-account-task" then API_gateway_task_report("done", false) runid = 0.9 ttdog = os.time() elseif tasktable.type == "follow-stock-app-account-task-with-update" then if not flag任务失败 then API_gateway_task_report("done", false) end runid = 0.9 ttdog = os.time() elseif tasktable.type == "dm-task" then API_gateway_task_report("done", false) runid = 0.9 ttdog = os.time() elseif tasktable.type == "delete-app-account-task" then API_gateway_task_report("done", false) runid = 0.9 ttdog = os.time() end end if runid >= 126 and runid < 127 then --执行 delete 备份 for i=1, #tasktable.data.uids do Deam.DelBackUp(tasktable.data.uids[i]) end API_delete_mark_completed(tasktable.data.uids) runid = 0.9 ttdog = os.time() end if runid >= 125 and runid < 126 then --执行 dm-task 私信 if 1>0 then if ff2(p166Done大红按钮, "弹出菜单 Done大红按钮", 1) then elseif ff2(p102足迹save, "足迹save叉掉102", 1) then elseif ff2(p103叉掉菜单, "叉掉菜单103", 1) then elseif ff2(p167叉掉Marksafe, "叉掉167 Mark safe", 1) then elseif ff2(p168_StickersGotit, "Stickers Got it", 1) then elseif ff2(p169_Followyfrs, "叉掉169 Follow your friends", 1) then --elseif ff2(p124Notnow_savelogin, "Notnow_savelogin", 1) then --if runid == 125.3 then ttsent=os.time() end elseif ff2(p51Notnow_a, "#弹出菜单 Not now") and ff2(p51Notnow_b, "弹出菜单 Not now", 1) then elseif ff2(p弹窗Gotit, "弹窗 Gotit", 1) then end end if runid == 125 then if 1>2 then elseif (1>0 or ff2(p160已Inbox, "已在Inbox")) and API_dmtask_已发送粉丝uids() then fans_success = {} --成功的fans uis fans_fail = {} --失败的fans uis sp说说 = {1,1,1,1,1,1,1,1} --本次的说说指针 --tasktable.data.dms runid = 125.1 elseif ff2(p10main十, "视频主页 点Inbox") then touch.tap(580, 1672) sys.msleep(500) end elseif runid == 125.1 and exec_获取好友列表() then uids_remove = "" c_uids_remove = 0 for i= #customlist.friends,1,-1 do if string.match(get_fans_uids, customlist.friends[i].user_id) then uids_remove = uids_remove.." "..customlist.friends[i].user_id c_uids_remove = c_uids_remove+1 table.remove(customlist.friends, i) end end if c_uids_remove>0 then klog("fans_uids_remove: ["..c_uids_remove.."] "..uids_remove) end if #customlist.friends > 0 then runid = 125.2 ip好友 = 1 ip话术 = 1 c失败用户 = 0 c尝试次数 = 0 c云控指定num = tasktable.data.num if type(c云控指定num) == "number" then if c云控指定num == 0 then c云控指定num = #customlist.friends end elseif type(c云控指定num) == "userdata" or c云控指定num == nil then c云控指定num = #customlist.friends end else klog("好友列表 都remove了") runid = 125.9 end ttdog = os.time() elseif runid == 125.2 then --if exec_私信(customlist.friends[ip好友].user_id, tasktable.data.dms[ip话术][sp说说[ip话术]]) then --私信 if exec_私信(customlist.friends[ip好友].user_id, tasktable.data.dms[ip话术][math.random(1, #tasktable.data.dms[ip话术])]) then --私信 --flag私信status if flag私信status == "timeout" then --timeout + Login expired 失败 Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 else --成功 或 7195 runid = 125.3 ttsent=os.time() end else if vartk.c私信timeout and vartk.c私信timeout >=5 then klog("当前uid 私信timeout过多 强制任务完成") runid = 125.9 API_上传log("私信timeout") elseif vartk.c私信异常 and vartk.c私信异常 >=3 then klog("当前uid 私信异常过多 强制任务完成") runid = 125.9 API_上传log("私信异常") elseif ip好友 >= #customlist.friends then klog("好友都私信完了") runid = 125.9 elseif ip好友 >= c云控指定num then klog("好友私信已达数量 "..c云控指定num) runid = 125.9 else ip好友 = ip好友 +1 ip话术 = 1 c尝试次数 = 0 runid = 125.2 end end elseif runid == 125.3 then --成功后 下一个或结束 if 1>0 or (1>2 and ff3(p160消息蓝, "消息_蓝")) then if 1>2 then Yin0 = result[#result][2] p161sent成功.region[2] = Yin0 p162Notsent失败[1].region[2] = Yin0 p162Notsent失败[2].region[4] = Yin0 p162Notsent失败[2].region[2] = Yin0-180 p162Notsent失败[3].region[2] = Yin0 --文字提示 p162Notsent失败[4].region[2] = Yin0 --文字提示 end if flag私信status == "7195" or flag私信status == "7289" or (1>2 and ff2(p162Notsent失败, "Not sent 失败")) then if flag私信status == "7195" or flag私信status == "7289" or c尝试次数 >=6 or Ix == 1 or Ix == 2 then table.insert(fans_fail, customlist.friends[ip好友].user_id) if API_dmtask_上报已成功发送的粉丝uid() then fans_success={} fans_fail={} end --if c失败用户 >=2 and Ix >2 then if c失败用户 >=4 then klog("累计5个好友私信失败7195/7289 去切换备份") runid = 125.9 API_上传log("私信失败7195/7289") else klog("更换好友私信") if Ix > 2 or flag私信status == "7195" or flag私信status == "7289" then c失败用户 = c失败用户+1 end --文字提示 才累计失败用户 if ip好友 >= #customlist.friends then klog("好友都私信完了 去切换备份") runid = 125.9 elseif ip好友 >= c云控指定num then klog("好友私信已达数量 "..c云控指定num..", 去切换备份") runid = 125.9 else ip好友 = ip好友 +1 ip话术 = 1 c尝试次数 = 0 runid = 125.2 end end else c尝试次数 = c尝试次数+1 runid = 125.2 end elseif 1>0 or ff2(p161sent成功, "sent 成功") or os.time()-ttsent>1 then --发送成功 --sp说说[ip话术] = sp说说[ip话术]+1 --if sp说说[ip话术] > #tasktable.data.dms[ip话术] then sp说说[ip话术]=1 end --话术指针调整 if ip话术 >= #tasktable.data.dms then table.insert(fans_success, customlist.friends[ip好友].user_id) if API_dmtask_上报已成功发送的粉丝uid() then fans_success={} fans_fail={} end if ip好友 >= #customlist.friends then klog("好友都私信完了") runid = 125.9 elseif ip好友 >= c云控指定num then klog("好友私信已达数量 "..c云控指定num) runid = 125.9 else ip好友 = ip好友 +1 ip话术 = 1 c尝试次数 = 0 runid = 125.2 end else ip话术 = ip话术+1 runid = 125.2 ttdog = os.time() end end elseif 1>2 and os.time()-ttsent>1 then klog("没有识别到最新消息 左上返回后 重发") touch.tap(38, 152) sys.msleep(1000) runid = 125.2 end elseif runid == 125.9 then API_dmtask_mark_completed() --标记私信任务完成 if exec_SelfProfile() then API_token_云控_task后() end runid =130 end if flag休眠 then runid = 0.9 end end if runid == 124 and (selects["方式"] == "By1" or selects["方式"] == "By2") then --执行 follow-stock-app-account-task ByJson方式 Check_app("com.zhiliaoapp.musically") local runidC = 0 flagres = -1 local flag首次关注 = 0 while true do if gateway_script_heartbeat_tick(false, "running") or API_gateway_task_control() then runid = 0.9 break end if runidC == 0 then --批量获取uids if API_followstockappaccounttask_follow_uid() then --批量获取关注uid runidC = 1 else --API_followstockappaccounttask_mark_completed() --标记任务完成 break end end if runidC == 1 then --做json文件 local c计f = 0 fwuid = {} strJson = "" for pt = 1, #get_follow_uid_table.data do table.insert(fwuid, {user_id=get_follow_uid_table.data[pt].uid, sec_uid=get_follow_uid_table.data[pt].secUid}) local stmp = string.gsub(get_follow_uid_table.data[pt].secUid, "\r", "") if pt == #get_follow_uid_table.data then strJson = strJson.." {\r\n \"user_id\": \""..get_follow_uid_table.data[pt].uid.."\",\r\n \"sec_uid\": \""..stmp.."\",\r\n }\r\n" else strJson = strJson.." {\r\n \"user_id\": \""..get_follow_uid_table.data[pt].uid.."\",\r\n \"sec_uid\": \""..stmp.."\",\r\n },\r\n" end end fwtable = {task_list=fwuid} strJson = "{ \"task_list\":[\r\n"..strJson.."]\r\n}" local filetask = app.data_path("com.zhiliaoapp.musically").."/tmp/backup/taskList.Json" file.writes(filetask, strJson) runidC = 2 end ::runidC_2_exec_followbyJson:: if runidC == 2 then --执行关注 if exec_followbyJson() then runidC = 3 else klog("【followbyJson 失败】") API_上传log("关注异常_followbyJson失败") sys.toast("followbyJson 失败",2) sys.msleep(2000) break end end if runidC == 3 then local numall = #get_follow_uid_table.data -- 批量关注 10 秒首次自查;至少保留 15 秒让本地 followBatch 落地。 local tt_all = math.max(15, 5+numall*1) klog("关注批量启动,共"..tostring(numall).."个,10秒首次自查,最短等待"..tostring(tt_all).."秒") local tt_followbyJson000 = os.time() local tt_lasting = tt_followbyJson000 local tt_followbyJson = os.time()+tt_all local tt_follow_check = tt_followbyJson000+10 local last = SelfProfile.following_count local lasting = last local last0 = last --local flagres = -1 local flagres00 = -1 --有成功增长标识 while true do local now_follow = os.time() if now_follow >= tt_followbyJson then klog("关注 followbyJson 时间已够 正常退出") sys.toast("关注 followbyJson 时间已够 正常退出") exec_followbyJson_stop() flagres = 1 break else local wait_until = tt_follow_check if wait_until > tt_followbyJson then wait_until = tt_followbyJson end if now_follow < wait_until then sys.msleep((wait_until-now_follow)*1000) end if os.time() >= tt_followbyJson then klog("关注 followbyJson 时间已够 正常退出") sys.toast("关注 followbyJson 时间已够 正常退出") exec_followbyJson_stop() flagres = 1 break end end flagres = -1 for itry= 1,3 do --SelfProfile 自查判断 if exec_SelfProfile() then if SelfProfile.following_count and last then lasting = SelfProfile.following_count if lasting - last > 5 then klog("关注 正常增长 继续") ttdog = os.time() ocrlast[4] = 0 sys.toast("当前关注量:"..lasting.." 前次量:"..last.." 初始值:"..last0.."\n\n关注 正常增长 继续") flagres = 1 flagres00 = 1 tt_lasting = os.time() last = lasting tt_follow_check = os.time()+10 break elseif os.time()-tt_followbyJson000 < 15 then if flag首次关注 == 0 then klog("初始关注 增长异常 再试一次") exec_followbyJson_stop() sys.msleep(1500) flag首次关注 = 1 runidC = 2 break --退出重来一次 else klog("初始关注 增长异常 退出") sys.toast("当前关注量:"..lasting.." 前次量:"..last.." 初始值:"..last0.."\n\n初始关注 增长异常 退出") flagres = -2 break end else klog("关注 不增长 退出") sys.toast("当前关注量:"..lasting.." 前次量:"..last.." 初始值:"..last0.."\n\n关注 不增长 退出") flagres = 0 break end else klog("SelfProfile 参数异常 再试一次") sys.msleep(1500) end elseif SelfProfile.status == "Login expired" or SelfProfile.status == "空" or vartk.flag闪退还原 then break elseif itry >=2 then if flagres00 == -1 then flagres = -2 klog("关注任务 故障 放弃") break end elseif 1>2 and itry <=1 then --SelfProfile fail timeout 2025-11-04 掉登录了 也不切IP重启了 尝试2次失败 就去结束任务 klog("【重试】关闭TK 切换IP 重开TK") Close_app("com.zhiliaoapp.musically") sys.msleep(1500) if Config_IP(ISO) then sys.msleep(math.random(10,12)*1000) end Check_app("com.zhiliaoapp.musically") sys.msleep(500) end end if runidC==2 then break end --退出重来一次 if flagres <=0 then exec_followbyJson_stop() if (flagres == 0 or flagres == -1) then local v估算 = #get_follow_uid_table.data-(tt_lasting-tt_followbyJson000) if v估算 >0 then klog("剩余未用的uids 估算 "..v估算) report_failed_uids = {} for i=tt_lasting-tt_followbyJson000+1, #get_follow_uid_table.data do table.insert(report_failed_uids, {uid=get_follow_uid_table.data[i].uid, secUid=get_follow_uid_table.data[i].secUid}) end API_followstockappaccounttask_report_failed() --回传 未用剩余的关注uid end elseif flagres == -2 then klog("关注异常 uid全部回传 #"..#get_follow_uid_table.data) API_上传log("关注异常_uid全部回传") report_failed_uids = {} for i=1, #get_follow_uid_table.data do table.insert(report_failed_uids, {uid=get_follow_uid_table.data[i].uid, secUid=get_follow_uid_table.data[i].secUid}) end API_followstockappaccounttask_report_failed() --回传 未用剩余的关注uid end --API_followstockappaccounttask_mark_completed() --虽然不正常 还是标记任务完成 不然任务一直下发 break end end if runidC == 2 then --退出重来一次 klog("重新去 exec_followbyJson") else break end end end if flag休眠 then runid = 0.9 elseif SelfProfile.status == "Login expired" then klog("去重走登录流程") vartk.flag重登录 = true Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 elseif vartk.flag闪退还原 then vartk.flag闪退还原 = false if tasktable.data.appAccounts[sq_appAccounts].re闪退还原 > 1 then klog("闪退还原 超过1次了 任务完成算了") API_上传log("关注异常_闪退") API_followstockappaccounttask_mark_completed() runid = 130 ttdog = os.time() elseif tasktable.data.appAccounts[sq_appAccounts].re闪退还原 == 1 then klog("还原备份重来") runid = 100 ttdog = os.time() end elseif 1>2 and flagres < 0 then -- 没有正常增长过的 才加入队列 2025-11-04 放弃加入队列 重试一次不正常 就直接结束任务 klog("关注增长异常 加入队列 下次再试") runid = 129.8 else if exec_SelfProfile() then if (1>0 or selects['是否上传云控?']) and API_token_云控_task后() then end end API_followstockappaccounttask_mark_completed() runid = 130 ttdog = os.time() end end if runid == 124 and (selects["方式"] == "API" or selects["方式"] == "Sch") then --执行 follow-stock-app-account-task 127.0.0.1 方式 --执行 follow-stock-app-account-task Scheme 方式 Check_app("com.zhiliaoapp.musically") pt = 0 local runidC = 0 local tt_follow_selfcheck = nil while true do if gateway_script_heartbeat_tick(false, "running") or API_gateway_task_control() then runid = 0.9 break end if runidC == 0 then if API_followstockappaccounttask_follow_uid() then --批量获取关注uid tt_follow_selfcheck = os.time() runidC = 1 else break end end if runidC == 1 then if ipuid > #get_follow_uid_table.data then --关注uid 用完 break else if selects["方式"] == "API" then exec_follow(get_follow_uid_table.data[ipuid].uid, get_follow_uid_table.data[ipuid].secUid) --逐一关注 elseif selects["方式"] == "Sch" then exec_follow_scheme(get_follow_uid_table.data[ipuid].uid) --sys.msleep(Scheme关注间隔) end sys.msleep(Scheme关注间隔) if ipuid==1 or ipuid%5 == 0 then sys.toast("关注中..总"..#get_follow_uid_table.data.." 第"..ipuid) end if ipuid >= tasktable.data.num then klog("任务数量已达成 共"..tasktable.data.num) break else -- 按时间自查,不再按 UID 数量自查;未满 20 秒的短批次仍会在结束后做最终自查。 if os.time()-tt_follow_selfcheck >= 20 then klog("关注运行满20秒,开始 Self Profile 自查") local last = SelfProfile.following_count local flagres = -1 for i=1,2 do if exec_SelfProfile() then if SelfProfile.following_count and last then if SelfProfile.following_count > last then klog("关注 正常增长 继续") ttdog = os.time() ocrlast[4] = 0 flagres = 1 tt_follow_selfcheck = os.time() break else klog("关注 不增长 退出") API_上传log("关注异常_不增长") flagres = 0 break end else klog("SelfProfile 参数异常 再试一次") sys.msleep(1500) end elseif vartk.flag闪退还原 then break end end if flagres <=0 then if #get_follow_uid_table.data - ipuid >= 0 then klog("剩余未用的uids有 "..(#get_follow_uid_table.data - ipuid+1)) report_failed_uids = {} for i=ipuid, #get_follow_uid_table.data do table.insert(report_failed_uids, {uid=get_follow_uid_table.data[i].uid, secUid=get_follow_uid_table.data[i].secUid}) end API_followstockappaccounttask_report_failed() --回传 未用剩余的关注uid end --API_followstockappaccounttask_mark_completed() --虽然不正常 还是标记任务完成 不然任务一直下发 break end end ipuid = ipuid+1 end end end end if flag休眠 then runid = 0.9 elseif vartk.flag闪退还原 then vartk.flag闪退还原 = false if tasktable.data.appAccounts[sq_appAccounts].re闪退还原 > 1 then klog("闪退还原 超过1次了 任务完成算了") API_上传log("关注异常_闪退") API_followstockappaccounttask_mark_completed() runid = 130 ttdog = os.time() elseif tasktable.data.appAccounts[sq_appAccounts].re闪退还原 == 1 then klog("还原备份重来") runid = 100 ttdog = os.time() end else if exec_SelfProfile() then if (1>0 or selects['是否上传云控?']) and API_token_云控_task后() then end end API_followstockappaccounttask_mark_completed() runid = 130 ttdog = os.time() end end if runid == 123 and selects["方式"] == "Sch" then --执行 increase-follower-task 通过 scheme Check_app("com.zhiliaoapp.musically") for pt = 1, #tasktable.data.stockAppAccounts do if exec_follow_scheme(tasktable.data.stockAppAccounts[pt].uid) then if pt%5 == 0 then klog("increase-follower-task 共"..#tasktable.data.stockAppAccounts.."\n\n当前 第"..pt) sys.toast("increase-follower-task 共"..#tasktable.data.stockAppAccounts.."\n\n当前 第"..pt) sys.msleep(2000) end end end if exec_SelfProfile() then if (1>0 or selects['是否上传云控?']) and API_token_云控_task后() then end end runid = 130 ttdog = os.time() end if runid == 123 and (selects["方式"] == "By1" or selects["方式"] == "By2") then --执行 increase-follower-task 旧 exec_followbyJson() Check_app("com.zhiliaoapp.musically") --exec_followAutoClick() --20250606 暂取消 local c计f = 0 if 20250222 > 0 then fwuid = {} strJson = "" end for pt = 1, #tasktable.data.stockAppAccounts do if 1>0 then table.insert(fwuid, {user_id=tasktable.data.stockAppAccounts[pt].uid, sec_uid=tasktable.data.stockAppAccounts[pt].secUid}) local stmp = string.gsub(tasktable.data.stockAppAccounts[pt].secUid, "\r", "") if pt == #tasktable.data.stockAppAccounts then strJson = strJson.." {\r\n \"user_id\": \""..tasktable.data.stockAppAccounts[pt].uid.."\",\r\n \"sec_uid\": \""..stmp.."\",\r\n }\r\n" else strJson = strJson.." {\r\n \"user_id\": \""..tasktable.data.stockAppAccounts[pt].uid.."\",\r\n \"sec_uid\": \""..stmp.."\",\r\n },\r\n" end end end if 20250222 > 0 then fwtable = {task_list=fwuid} strJson = "{ \"task_list\":[\r\n"..strJson.."]\r\n}" -- strJson = json.encode(fwtable) -- string.gsub(strJson, "{\"u", "\r\n {\r\n \"u") -- string.gsub(strJson, "\",", "\",\r\n ") -- string.gsub(strJson, "},", "},\r\n ") -- string.gsub(strJson, "]", "\r\n]\r\n") local filetask = app.data_path("com.zhiliaoapp.musically").."/tmp/backup/taskList.Json" file.writes(filetask, strJson) if exec_followbyJson() then numall = #tasktable.data.stockAppAccounts tt_all = 5+numall*1 tt_followbyJson = os.time()+tt_all while os.time() < tt_followbyJson do sys.toast("关注任务 共"..numall.."\n\n预计"..tt_all.."秒 还剩"..(tt_followbyJson-os.time()).."秒") sys.msleep(5000) end else sys.alert("followbyJson 失败", 5) API_上传log("关注失败_followbyJson") end end if exec_SelfProfile() then if (1>0 or selects['是否上传云控?']) and API_token_云控_task后() then end end runid = 130 ttdog = os.time() end if runid == 122 then --执行 update-app-account-task flag头像 = false flag签名 = false flag昵称 = false flag视频 = false runid = 122.1 elseif runid == 122.1 then if flag头像 == false and type(updatetasktable.data.avatarUrl) == "string" and updatetasktable.data.avatarUrl ~= "" then if type(updatetasktable.data.avatarUrl) == "string" then if API_avatarUrl() then if exec_ava("222.jpg") then flag头像=true end end else klog("type avatarUrl: "..type(updatetasktable.data.avatarUrl).." "..tostring(updatetasktable.data.avatarUrl)) flag头像=true end end runid = 122.2 elseif runid == 122.2 then if flag签名 == false and type(updatetasktable.data.signature) == "string" and updatetasktable.data.signature ~= "" then if type(updatetasktable.data.signature) == "string" then if exec_Signature(updatetasktable.data.signature) then flag签名 = true end else klog("type signature: "..type(updatetasktable.data.signature).." "..tostring(updatetasktable.data.signature)) flag签名 = true end end runid = 122.3 elseif runid == 122.3 then if flag昵称 == false and type(updatetasktable.data.nickname) == "string" and updatetasktable.data.nickname ~= "" then if type(updatetasktable.data.nickname) == "string" then exec_nickname(updatetasktable.data.nickname) flag昵称 = true else klog("type nickname: "..type(updatetasktable.data.nickname).." "..tostring(updatetasktable.data.nickname)) flag昵称 = true end end runid = 122.4 elseif runid == 122.4 then if flag视频 == false and updatetasktable.data.videoUrl then if type(updatetasktable.data.videoUrl) == "string" and type(updatetasktable.data.videoTitle) == "string" then --[[{ "code": 1, "data": { "uid": "6967335544901075973", "avatarUrl": null, "nickname": null, "signature": null, "videoUrl": "cmkb7jz2w1kaan70120k67i6y/ffvk1zric06qss693dmcszb6.mp4", "videoTitle": "1222", "stockVideos": [ { "title": "omg", "url": "/skvideo/cmkb7jz2w1kaan70120k67i6y/c1uud3642614itxfzroq4eip.mp4" }, { "title": "1222", "url": "/skvideo/cmkb7jz2w1kaan70120k67i6y/ffvk1zric06qss693dmcszb6.mp4" } ] } } ]] local flag视频成功 = false if type(updatetasktable.data.stockVideos) == "table" then flag视频成功 = true for i=1, #updatetasktable.data.stockVideos do if exec_video(updatetasktable.data.stockVideos[i]["url"], updatetasktable.data.stockVideos[i]["title"]) then ttdog = os.time() else flag视频成功 = false klog("视频上传失败 stockVideos["..i.."]") break end end else flag视频成功 = exec_video(updatetasktable.data.videoUrl, updatetasktable.data.videoTitle) end if flag视频成功 then flag视频 = true ttdog = os.time() klog("视频上传成功,进入提交完成") else klog("视频上传失败,结束该更新任务") flag任务失败 = true 任务失败原因 = "视频上传失败" runid = 129.9 end else klog("type videoUrl: "..type(updatetasktable.data.videoUrl).." "..tostring(updatetasktable.data.videoUrl)) klog("type videoTitle: "..type(updatetasktable.data.videoTitle).." "..tostring(updatetasktable.data.videoTitle)) flag昵称 = true end end if runid ~= 129.9 then runid = 122.5 end elseif runid == 122.5 then if (flag头像 or flag签名 or flag视频 or tasktable.type == "follow-stock-app-account-task-with-update") and API_update_app_account_task_done() then if tasktable.type == "follow-stock-app-account-task-with-update" then tasktable.step = 2 ttdog = os.time() runid = 121 else runid = 130 ttdog = os.time() end elseif flag休眠 then runid = 0.9 elseif tasktable.type == "follow-stock-app-account-task-with-update" then --即便API_update_app_account_task_done() 失败也继续 tasktable.step = 2 ttdog = os.time() runid = 121 elseif tasktable.type == "update-app-account-task" then screen.unkeep() sys.msleep(5000) screen.keep() if API_update_app_account_task_done() then runid = 130 --klog("强制 返回去重登录") --runid = 103 cp60 = -10 elseif flag休眠 then runid = 0.9 end ttdog = os.time() end end if runid == 121 then if 1>2 then elseif 1>2 and vartk.flag重登录 then klog("重登录过来的 不再执行任务 直接完成任务") runid = 129.9 vartk.flag重登录 = false elseif tasktable.type == "update-app-account-task" then if tasktable.data.status == "running" or taskId == "_AAA_" then API_设备log( uid.." 养号结束") klog("养号任务 可以结束了") runid = 129.9 elseif API_update_app_account_task_resource() then SelfProfile_bf = table.deep_copy(SelfProfile) API_设备log( uid.." "..tasktable.type) runid = 122 ttdog = os.time() else ttdog = os.time() end elseif tasktable.type == "increase-follower-task" then if #tasktable.data.stockAppAccounts >0 then API_设备log( uid.." "..tasktable.type) klog("共有 "..#tasktable.data.stockAppAccounts.."个增粉目标") tablesec = {} for i=1, #tasktable.data.stockAppAccounts do tablesec[tasktable.data.stockAppAccounts[i].uid] = tasktable.data.stockAppAccounts[i].secUid end tk增粉前初始化() runid = 123 ttdog = os.time() else klog("stockAppAccounts 数据异常!") sys.toast("stockAppAccounts 数据异常!", 5) sys.msleep(6000) end elseif tasktable.type == "follow-stock-app-account-task" then API_设备log( uid.." "..tasktable.type) runid = 124 ttdog = os.time() elseif tasktable.type == "follow-stock-app-account-task-with-update" then API_设备log( uid.." "..tasktable.type) if tasktable.step == 1 then if API_update_app_account_task_resource() then SelfProfile_bf = table.deep_copy(SelfProfile) runid = 122 ttdog = os.time() else ttdog = os.time() end elseif tasktable.step == 2 then runid = 124 ttdog = os.time() end elseif tasktable.type == "dm-task" then API_设备log( uid.." "..tasktable.type) --tasktable.data.dms 话术 runid = 125 ttdog = os.time() end if flag休眠 then runid = 0.9 end end if runid == 120 then Check_app("com.zhiliaoapp.musically") ttdog = os.time() runid = 121 cerror = 0 Verify_Code6 = nil end if runid >=100 and runid < 120 then --登录 tk登录(ISO, uid, username, pw) end if runid == 2 then if os.time()-ttwifi > 3600*4 then Watchwifi() ttwifi = os.time() end if tasktable.type == "delete-app-account-task" then runid = 126 elseif #tasktable.data.appAccounts == 0 then klog("没有下发备份账号信息,结束任务") runid = 0.9 ttdog=os.time() else taskId = tasktable.data.id klog(" ") ISO = tasktable.data.appAccounts[sq_appAccounts].country if type(ISO)=="userdata" then klog("ISO -> nil") ISO="" end uid = tasktable.data.appAccounts[sq_appAccounts].uid --klog("checkuid "..type(uid).." "..tostring(uid)) --checkuid userdata userdata: 0x0 if type(uid) ~= "string" then klog("uid -> nil") uid="nil" end klog("uid [第"..sq_appAccounts.."] "..uid) flag账号任务失败 = false 账号任务失败原因 = nil flag登录失败 = false flag登录频繁 = false -- 后台 status 是账号历史状态,不能直接作为本轮运行结果。 -- 本轮只有实际识别到封禁页面或接口返回封禁时才设置 forbidden。 status_backend = tasktable.data.appAccounts[sq_appAccounts].status status_running = "normal" -- 每个账号独立结算,禁止继承上一账号的任务失败状态。 flag任务失败 = false 任务失败原因 = nil if status_backend == "forbidden" then klog("后台账号历史状态为 forbidden,本轮先按 normal 重新检测") end API_gateway_task_report("running", true) vartk = {} --池 tokenbase64 = nil tokenjson = nil tokentable = nil flagToken来自AccountTxt = nil flag本账号已提参 = false c登录网络重试 = 0 flag强制切换IP一次 = nil c上滑swipe = 0 c上滑卡住恢复 = 0 tt上滑卡住开始 = nil username = tasktable.data.appAccounts[sq_appAccounts].username if type(username) == "string" then username = string.lower(username) elseif type(tasktable.data.appAccounts[sq_appAccounts].nickname) =="string" then klog("username -> nickname") username = tasktable.data.appAccounts[sq_appAccounts].nickname username = string.lower(username) end loginDate = tasktable.data.appAccounts[sq_appAccounts].loginDate password = tasktable.data.appAccounts[sq_appAccounts].password phone = tasktable.data.appAccounts[sq_appAccounts].phone flag_2fa = "" if type(phone) == "string" then if string.match(phone, "@") then clientId = tasktable.data.appAccounts[sq_appAccounts].clientId refreshToken = tasktable.data.appAccounts[sq_appAccounts].refreshToken if type(clientId)=="string" and type(refreshToken)=="string" then flag_2fa = "outlook" end end end codeAddress = tasktable.data.appAccounts[sq_appAccounts].codeAddress if flag_2fa == "" and type(codeAddress) == "string" then if string.match(codeAddress, "@") then --phone = string.gsub(phone, "@", "%%40") flag_2fa = "Email" elseif string.match(codeAddress, "https") then flag_2fa = "sms" elseif string.len(codeAddress)>=32 then flag_2fa = "Auth" end end klog("flag_2fa "..flag_2fa) if flag_2fa == "outlook" then klog("clientId: "..clientId.." refreshToken: "..refreshToken) end if 1>2 then elseif (tostring(loginDate) == "userdata: 0x0" and tostring(password) == "userdata: 0x0") or (type(loginDate) == "string" and string.len(loginDate)>20) then flag新机登录 = false klog("【还原登录】uid:"..uid) if tostring(password) == "userdata: 0x0" then pw = "Aa123123." else pw = password end elseif tostring(loginDate) == "userdata: 0x0" then flag新机登录 = true klog("【新机登录】uid:"..uid) pw = password end --rnd_selectnickname() --配合 exec_followAutoClick() 暂取消 SelfProfile = { ["userID"] = uid or "", ["signature"] = "", ["followersCount"] = 0, ["followingCount"] = 0, ["likeCount"] = 0 } runid = 100 Close_app("com.zhiliaoapp.musically") sys.msleep(1000) if type(username) ~= "string" then runid = 129.9 API_上传log("账号异常无username") end --没有用户名 传账号异常 退出该账号任务 if ISO == "" then runid = 129.9 API_上传log("账号异常无ISO") end --没有用户名 传账号异常 退出该账号任务 end if tasktable.type == "follow-stock-app-account-task-with-update" then --tasktable.data.updateAppAccountTaskId tasktable.step = 1 end if runid == 100 then API_设备log( uid.." 登录中") end end if runid == 1 then --申请任务 if acquire_task() then --VPN关闭() --VPN开启(1) flag任务失败 = false 任务失败原因 = nil flag任务有账号失败 = false runid = 2 sq_appAccounts = 1 else ttdog = os.time() if flag重检wifi_vpn then flag重检wifi_vpn = nil Redo重检wifi_vpn() elseif os.time()-ttwifi > 3600*4 then Watchwifi() ttwifi = os.time() end end end if runid == 0.9 then flag休眠 = false Close_app("com.zhiliaoapp.musically") runid = 1 ttdog = os.time() if vartk.re日志 == nil then vartk.re日志 = os.time() else --更换日志 logfile = string.gsub(logfile0, "xxxx", os.date("!%Y%m%d-%H%M%S", os.time()+seczone)) --os.execute('cp -rf '..syslogfile.." "..logfile) --file.writes(syslogfile, " \n") clean日志文件(24) klog(loghead) ttdog=os.time() --head() --canshu() end end if runid == 0 and API心跳() then --心跳注册 runid = 1 end if runid == -1 then Close_app("com.zhiliaoapp.musically") VPN开启(1) flagrun0 = false --登录前 VPN检查 Checkwifi() runid = 0 end screen.unkeep() sys.msleep(500) ttnow = os.time() if tttap[2]>=10 and ttnow-tttap[1] > 30 then klog("重复点击异常 手机卡死? 任务暂停,账号加入重试队列") tttap = {os.time(),0, x=-1,y=-1} runid = 129.8 end if ttnow-ttdog > t重启 then if 1>2 then elseif 1>2 and ttnow - flag当前状态[1]<5 then --注册 特殊情况 if ttnow-ttdog > 59 then if flag当前状态[2] == '验证弹窗加载中' then klog("Phone注册超时 清空环境 重来") runid = 80 elseif flag当前状态[2] == "accounts.google.com" then klog("加载accounts.google.com 超时 清safari 重来") getAPI_keep = 1 --保持数据 runid = 79 end else sys.msleep(1500) end else if type(tasktable) ~= "table" or type(tasktable.data) ~= "table" then klog("【空闲等待】暂无任务,跳过超时放弃") runid = 1 ttdog = os.time() else klog("【超时放弃】加入队列 切换下一个备份\n") ocrlog() tk截屏日志("超时放弃") runid = 129.8 ttdog=os.time() end end end if 1>2 and ttnow-ttdog > t卡停 and ttnow-ttshot > 15 then local choice = sys.alert("【卡停】截屏+日志?", 3, '请选择', '取消', '截屏上传') if choice==0 then --点取消 elseif choice==0.1 then marklog = os.date("!%Y%m%d-%H%M%S", os.time()+seczone) klog("\n【截屏】\n") sys.msleep(300) screen.image():save_to_png_file("/var/mobile/Media/1ferver/res/"..marklog..".png") elseif choice==1 then marklog = os.date("!%Y%m%d-%H%M%S", os.time()+seczone) klog("\n【截屏上传】\n") sys.msleep(300) screen.image():save_to_png_file("/var/mobile/Media/1ferver/res/"..marklog..".png") upload() elseif choice==2 then --超时没选 else --其他不知道的问题 end ttshot = os.time() end end end function rnd_selectnickname() --配合 exec_followAutoClick() 暂取消 --uid = tasktable.data.appAccounts[sq_appAccounts].uid --username = tasktable.data.appAccounts[sq_appAccounts].nickname -- while true do -- local a = math.random(1, #tasktable.data.appAccounts) -- if a ~= sq_appAccounts then -- FAC_nickname = tasktable.data.appAccounts[a].nickname -- break -- end -- end local a = sq_appAccounts + 1 if a > #tasktable.data.appAccounts then a = 1 end FAC_nickname = tasktable.data.appAccounts[a].nickname klog("FAC_nickname: "..a.." "..FAC_nickname) end function tk登录(tISO, tuid, tusername, tpw) if runid >= 110 and runid < 120 then tkClearHomeProfileNavigationWatchdog("已进入账号、密码或2FA流程") tkClearProfileLoginRecovery("已进入账号、密码或2FA流程") end if 1>2 then --elseif runid == 100 and ((sq_appAccounts==1 and Config_IP(tISO)) or sq_appAccounts>1) then elseif runid == 100 then if flagrun0 then VPN快速检测() else flagrun0 = os.time() end if Config_IP(tISO) then runid = 101 ttdog=os.time() flag登录完待提参 = false flag删备份新机重启 = nil if tasktable.type == "update-app-account-task" and tasktable.data.status == "running" then flag养号任务 = true else flag养号任务 = false end else end elseif runid == 101 and vartk.fg还原错号新机登录 and Deam.New(string.lower(ISO)) then vartk.fg还原错号新机登录 = false flag新机登录 = true runid = 102 ttdog=os.time() elseif runid == 101 and vartk.fg新机重登录 and Deam.New(string.lower(ISO)) then --登录异常后 重新新机登录 100-101-101.2-102 runid = 101.2 ttdog=os.time() elseif runid == 101 and flag新机登录 and Deam.New(string.lower(ISO)) then runid = 102 ttdog=os.time() elseif runid == 101 and not flag新机登录 and Deam.Restore(tuid) then runid = 102 ttdog=os.time() elseif runid == 101.2 then Deam.DelBackUp(tuid) sys.msleep(2000) Deam.New(string.lower(ISO)) sys.msleep(2000) runid = 102 ttdog=os.time() elseif runid == 102 and Check_app("com.zhiliaoapp.musically") then local flag重启后直接提参 = flagSwipe重启后提参 == true and flag新机登录 ~= true if flagSwipe重启后提参 == true and flag新机登录 == true then klog("新机首次登录禁止Swipe重启后直接提参,继续正常登录流程") flagSwipe重启后提参 = nil end cp60 = 0 flag尝试nickname参数 = 0 flag登录完待提参 = false c闪退重启tk = {0,0,0} --2次闪退 -> 还原 -> 2次闪退 ->删备份 -> 新机登录 -> 2次闪退 -> 结束任务 c打码次数 = 0 --限制打码次数 最多n次 c打码次数max = 8 --限制打码次数 最多次数 cont打码反馈 = {nil,nil} Verify_Code6 = nil tt打码加载 = {0, 0, 0} --上一次识别到的时刻,本轮识别到的时刻, 位置 tt点相同不完全 = {0, 0} --上一次识别到的时刻,本轮识别到的时刻 runid = 103 ttdog=os.time() tt重登 = os.time()+99999 c上滑swipe = 0 tt上滑卡住开始 = nil vartk = {} --池 vartk.login_wait_start_tt = os.time() vartk.confirmed_tk_page_for_selfcheck = false if flag重启后直接提参 then flagSwipe重启后提参 = nil flag登录完待提参 = true flag本账号已提参 = false SelfProfile = {status="nil"} runid = 118.8 klog("Swipe引导层强滑失败,TK已重启,直接重新提参") end elseif runid >= 103 and runid<104 then if 1>2 then elseif tkTikTokShopSelect() then elseif vartk.profile_login_click_tt then tkProfileLoginExpired() elseif ff2(p60我页, "登录已到Profile页") then tkClearHomeProfileNavigationWatchdog("已到Profile页") vartk.confirmed_tk_page_for_selfcheck = true if vartk.profile_self_expired_tt then if tkProfileLoginExpired() then if runid >= 103 and runid < 104 then runid = 103 end else tkProfileSelfExpiredWatchdog() end else klog("已到Profile页,调用Self Profile确认当前登录账号") if exec_SelfProfile() and tostring(SelfProfile.userID) == tostring(uid) then tkClearProfileLoginRecovery("Profile自查成功") if flag新机登录 then flag登录完待提参 = true runid = 118.8 klog("新机登录Profile自查成功,进入提参") elseif flag养号任务 then flag登录完待提参 = true runid = 118.8 klog("还原备份Profile自查成功,养号任务重新提参") else runid = 120 klog("还原备份Profile自查成功,继续任务") end elseif SelfProfile.status == "Login expired" then klog("Profile自查登录失效,等待识别明确Login入口") if tkProfileLoginExpired() then if runid >= 103 and runid < 104 then runid = 103 end else tkProfileSelfExpiredWatchdog() end else klog("Profile自查异常 uid:"..tostring(uid).." self:"..tostring(SelfProfile.userID)) klog("关闭TK后新机重登当前账号,不删除备份包") app.close("com.zhiliaoapp.musically") sys.msleep(2000) vartk.fg还原错号新机登录 = true flag新机登录 = true runid = 100 ttdog = os.time() end end elseif ff2(p99tk欢迎页, "tk欢迎页 Agree", 1) then elseif ff2(p98_1_SkipFaceB, "Skip FaceBook friends", 1) then sys.msleep(2000) touch.tap(p98_2_SkipFaceB[1], p98_2_SkipFaceB[2]) sys.msleep(2000) elseif ff2(p98_3_Xyfriends, "Your friends on TK 右上X", 1) then elseif ff2(p20Log_Usephone, "Log in to Tiktok 点 Use phone", 1) then runid = 110 elseif tkAuth2faPageRecovery() then tkClearHomeProfileNavigationWatchdog("已进入2FA流程") elseif tkSwipeUpForMore("Swipe up for more <103>") then elseif ff2(p10main暗, "main暗_login") then if runid == 103 then runid = 103.1 end if not vartk.main_page_tt then vartk.main_page_tt = os.time() end vartk.confirmed_tk_page_for_selfcheck = true if tkLoginHomeSwipeByBrightness("登录主页Swipe亮度兜底") then else tkHomeProfileNavigationWatchdog() end elseif runid > 103 and runid < 104 and vartk.main_page_tt and os.time() - vartk.main_page_tt >= 1 then tkHomeProfileNavigationWatchdog() elseif ff2(p91Skip同步, "Skip同步FaceB", 1) then elseif tkSkip同步FaceB弹窗() then elseif ff2(p93Done, "Done YorFrd on TK", 1) then elseif ff2(p10main十, "main十") then if runid == 103 then runid = 103.1 ttdog = os.time() vartk.main_page_tt = os.time() klog("进入主页,5秒后无Skip则继续") end vartk.confirmed_tk_page_for_selfcheck = true screen.unkeep() sys.msleep(2000) screen.keep() if ff2(p10main十, "main十 点 Profile") then tkHomeProfileNavigationWatchdog() end elseif tk兴趣() then elseif ff2(p105弹窗Dont, "弹窗 Don't allow",1) then elseif ff2(p弹窗Gotit, "弹窗Gotit",1) then elseif ff2(p104弹窗弃号, "弹窗弃号 去下一个备份") then tk截屏日志("结束_104") runid = 129.9 elseif ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) then sys.msleep(3000) tt重登 = os.time() SelfProfile = {status = "Login expired" } elseif 1>2 and ff2(p10main暗, "main十 弹窗?") then ff2(p99语言Cancel, "语言选择 Cancel", 1) if runid == 103 then runid = 103.1 ttdog = os.time() vartk.main_page_tt = os.time() klog("进入主页,5秒后无Skip则继续") end vartk.confirmed_tk_page_for_selfcheck = true elseif ff2(p102足迹save, "足迹save叉掉102", 1) then elseif ff2(p102足迹save点, "Viewer history 点Save", 1) then elseif ff2(p103叉掉菜单, "叉掉菜单103", 1) then elseif ff2(p106叉掉菜单, "叉掉菜单106", 1) then elseif ff2(p107叉掉菜单, "叉掉菜单107", 1) then elseif ff2(p166Done大红按钮, "弹出菜单 Done", 1) then elseif ff2(p110登录另一个, "去登录 另一个账号", 1) then elseif ff2(p111用账号登录, "从账号登录") then touch.tap(303, Yin0+56) sys.msleep(500) screen.unkeep() runid = 110 elseif tkSignUpPageLogin() then elseif ff2(p20Log_Usephone, "Log in to Tiktok 点 Use phone", 1) then runid = 110 elseif ff2(p20inLogin, "在Log in页") and ff2(p20Usephone, "用username登录") then touch.tap(303, Yin0) sys.msleep(500) screen.unkeep() ttdog = os.time() runid = 110 elseif ff2(p112切换去账号栏, "切换去账号栏",1) then runid = 110 elseif ff2(p113b账号栏加载异常, "113b账号栏加载异常 点1下", 1) then elseif ff2(p113已在账号栏, "已在账号栏") then tkClearHomeProfileNavigationWatchdog("已到账号栏") runid = 113 --elseif ff2(p124Notnow_savelogin, "Notnow_savelogin", 1) then elseif tkProfileLoginExpired() then elseif ff2(p60我页, "我页") then tkClearHomeProfileNavigationWatchdog("已到Profile页") vartk.confirmed_tk_page_for_selfcheck = true sys.msleep(2000) if runid < 103.3 and SelfProfile.status == "Login expired" then runid = 103.3 tt重登 = os.time() elseif runid < 103.2 then runid = 103.2 elseif runid < 103.3 then ttdog= os.time() end cp60 = cp60+1 if SelfProfile.status == "Login expired" then --后面处理 --elseif cp60 > 4 and (flag登录完待提参 or flag新机登录 or flag养号任务) then elseif cp60 > 4 and flag新机登录 == false and exec_SelfProfile() then if tostring(SelfProfile.userID) == tostring(uid) then if flag养号任务 then flag登录完待提参 = true runid = 118.8 klog("还原备份自查成功,养号任务重新提参") else runid = 120 --直接去任务了 end elseif 1>2 then klog("【!!!】自查uid 与 还原备份账号不一致 结束任务") API_上传log("自查uid与还原uid不一致") sys.alert("【!!!】自查uid 与 还原备份账号不一致 结束任务",5) runid = 129.9 else klog("【!!!】自查uid 与 还原备份账号不一致") if flag删备份新机重启 == 1 then klog("再次故障 频繁放弃 结束任务") API_上传log("频繁") runid = 129.9 else klog("强制关闭tk后 等2秒 删除备份 新机后再重启tk") app.close("com.zhiliaoapp.musically") sys.msleep(2000) flag删备份新机重启 = 1 runid = 101.2 end end elseif cp60 > 4 and flag新机登录 then if cp60 > 15 then klog("新机登录 但超时未登录 重启tk") Close_app("com.zhiliaoapp.musically") sys.msleep(4000) --runid = 102 --重启TK runid = 100 --切ip 新机 重启TK end elseif cp60 >4 and runid<120 then screen.unkeep() sys.msleep(50) if SelfProfile.status == "Login expired" or 1>0 then --不管是 Login expired 还是 exec_SelfProfile()失败3次 都重启TK if ff2(p111用账号登录, "登录菜单入口") then sys.msleep(500) else Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 100 --切IP 重新还原备份 重启tk runid = 102 --重启TK end elseif vartk.flag闪退还原 then vartk.flag闪退还原 = false if tasktable.data.appAccounts[sq_appAccounts].re闪退还原 > 1 then klog("闪退还原 超过1次了 任务完成算了") API_上传log("闪退放弃") sys.alert("【!!!】闪退放弃",5) runid = 129.9 ttdog = os.time() elseif tasktable.data.appAccounts[sq_appAccounts].re闪退还原 == 1 then klog("还原备份重来") runid = 100 ttdog = os.time() end end end elseif ff2(p60我页弹窗, "我页 弹窗?") then vartk.confirmed_tk_page_for_selfcheck = true runid = 103.2 end if runid >103 and runid < 104 and SelfProfile.status == "Login expired" then --已确定要重登录 if os.time() - tt重登 > 120 then klog("【加入队列最后】没能登录 下次再试") runid = 129.8 else ttdog = os.time() --确保不重启 end elseif runid >=103 and runid < 104 and flag登录完待提参==false and flag新机登录 == false and os.time()-ttdog > 6 then --还原登录 没有 可能识别不到屏幕或弹窗 继续任务 if not vartk.confirmed_tk_page_for_selfcheck then local waitStart = vartk.login_wait_start_tt or ttdog if os.time() - waitStart > 45 then local appAccount = nil if type(tasktable) == "table" and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then appAccount = tasktable.data.appAccounts[sq_appAccounts] end if type(appAccount) == "table" then appAccount.restorePageFailCount = tonumber(appAccount.restorePageFailCount or 0) + 1 end local failCount = 1 if type(appAccount) == "table" then failCount = tonumber(appAccount.restorePageFailCount or 1) end if failCount >= 3 then klog("还原登录连续"..tostring(failCount).."次未进入视频页/我的页,卡停放弃当前账号") API_设备log(tostring(uid).." 卡停放弃:还原后未进入视频页/我的页") API_上传log("卡停放弃") runid = 129.9 ttdog = os.time() else klog("还原登录未进入视频页/我的页,第"..tostring(failCount).."/3次,重启TK后继续等待") Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 ttdog = os.time() vartk.login_wait_start_tt = os.time() end else klog("还原登录未确认视频页/我的页,暂不自查") ttdog = os.time() end elseif exec_SelfProfile() then if tostring(SelfProfile.userID) == tostring(uid) then if flag养号任务 then flag登录完待提参 = true runid = 118.8 klog("还原备份自查成功,养号任务重新提参") else runid = 120 end elseif 1>2 then klog("【!!!】自查uid 与 还原备份账号不一致 结束任务") API_上传log("自查uid与还原uid不一致") runid = 129.9 else klog("【!!!】自查uid 与 还原备份账号不一致") if flag删备份新机重启 == 1 then klog("再次故障 频繁放弃 结束任务") API_上传log("频繁") runid = 129.9 else klog("强制关闭tk后 等2秒 删除备份 新机后再重启tk") app.close("com.zhiliaoapp.musically") sys.msleep(2000) flag删备份新机重启 = 1 runid = 101.2 end end elseif SelfProfile.status == "Login expired" and ff2(p20Usephone, "自查Login expired Login用username登录") then ttdog =os.time() runid=103 elseif vartk.flag闪退还原 then vartk.flag闪退还原 = false if tasktable.data.appAccounts[sq_appAccounts].re闪退还原 > 1 then klog("闪退还原 超过1次了 任务完成算了") API_上传log("闪退放弃") sys.alert("【!!!】闪退放弃",5) runid = 129.9 ttdog = os.time() elseif tasktable.data.appAccounts[sq_appAccounts].re闪退还原 == 1 then klog("还原备份重来") runid = 100 ttdog = os.time() end else Close_app("com.zhiliaoapp.musically") sys.msleep(2000) runid = 100 --切IP 重新还原备份 重启tk runid = 102 --重启TK end elseif runid >103 and runid < 104 and flag新机登录 and os.time()-ttdog > 10 then klog("新机登录尚未命中登录成功识别,继续等待") ttdog = os.time() end elseif runid == 110 then if 1>2 then elseif ff2(p111用账号登录, "从账号登录") then touch.tap(0.5*w, Yin0+56) sys.msleep(500) screen.unkeep() runid = 110 elseif ff2(p20Usephone, "用username登录") then touch.tap(0.5*w, Yin0) sys.msleep(500) screen.unkeep() runid = 110 elseif ff2(p112切换去账号栏, "切换去账号栏",1) then elseif ff2(p113b账号栏加载异常, "113b账号栏加载异常 点1下", 1) then elseif ff2(p113已在账号栏, "已在账号栏") then runid = 113 elseif 1>2 and ff2(p110登录另一个, "去登录", 1) then end elseif runid >= 113 and runid <=116 then if 1>2 then elseif tkSwipeUpForMore("Swipe up for more <116>") then elseif tk红字异常() then elseif ff2(p20Log_Usephone, "Log in to TK") then runid = 103 elseif ff2(p113b账号栏加载异常, "113b账号栏加载异常 点1下", 1) then elseif ff2(p113已在账号栏, "已在账号栏___") then if ff2(p113未输入账号, "输入Loginname "..tusername, 1) then sys.input_text(tusername); sys.msleep(500) tk点Paste浮层("账号栏", 0.155) sys.msleep(300) if interCount("inputLoginname", 6) then else klog("多次输入账号不成功 加入队列 下次再试") runid = 129.8 end elseif tonumber(vartk.timeoutContinueCount or 0) > 0 then -- Time out重试期间只允许专用分支按10秒间隔点击Continue。 elseif interv(vartk.p114, 1) and ff2(p114账号已输入, "Loginname已输入 确定", 1) then runid = 114 elseif ff2(p117帐密同登, "帐密同登页") then runid = 117 elseif interv(vartk.p114_6, 1) and ff2(p114_6按钮不可点, "Continue按钮灰") then if interD("p114_6_2", 6) then klog("左上返回") click(zback[1], zback[2]) end end elseif runid ==113 and ff2(p113粘贴, "粘贴", 1) then elseif runid ==113 and interv(vartk.p114, 1) and ff2(p114账号已输入x, "账号已输入x") and ff2(p114账号已输入, "Loginname已输入 确定", 1) then runid = 114 elseif runid ==114 and ff2(p115密码未输入, "输入密码 "..tpw, 1) then vartk.timeoutContinueAt = nil vartk.timeoutContinueCount = 0 sys.input_text(tpw); sys.msleep(500) tk点Paste浮层("密码栏", 0.185) sys.msleep(300) elseif 1>2 and ff2(p116_2账号不存在, "账号不存在_密 去下一个备份") then klog("标注 forbidden") status_running = "forbidden" tk截屏日志("forbidden_116_2") runid = 129.9 elseif 1>2 and (ff2(p116_3Timeout, "Time out") or ff2(p120登录报错, "报错红字")) then klog("【加入队列最后】下次再试") tk截屏日志("队列_红字") runid = 129.8 elseif ff2(p125Request封禁, "Request data 封禁") or ff2(p126弹窗banned, "弹窗 banned 封禁") then status_running = "forbidden" --tk截屏日志("forbidden_Request_banned") ocrlog() runid = 129.9 elseif runid >=114 and interv(vartk.p116, 8) and interCount("pswNext", 5) and ff2(p116密码已输入1, "密码已输入") and ff2(p116密码已输入2, "密码已输入 下一步", 1) then runid =116 sys.msleep(700) vartk.p116 = os.time() vartk.pswNext = vartk.pswNext+1 vartk.V2pswNext = 0 vartk.timeoutContinueCount = 0 ttdog = os.time() vartk.mail_outlook = os.date("!%Y-%m-%dT%H:%M:%S.000Z") elseif runid ==116 and vartk.pswNext and vartk.pswNext>=10 then klog("密码下一步 已执行多次跳转 放弃任务") runid = 129.9 elseif runid >=116 and ff2(p105弹窗Dont, "弹窗 Don't allow",1) then elseif runid >=116 and tkLoggedInProfilePage("登录成功 本人Profile页") then flag登录完待提参 = true SelfProfile = {status="nil"} --初始化 runid = 118.8 ttdog = os.time() elseif runid >=116 and ff2(p10main十, "登录成功 视频页十") then flag登录完待提参 = true SelfProfile = {status="nil"} --初始化 runid = 118.8 ttdog = os.time() --elseif tk验证打码() then end elseif runid ==117 then if ff2(p117帐密同登, "帐密同登页___") then if ff2(p117未输入账号, "输入Loginname "..tusername, 1) then sys.input_text(tusername); sys.msleep(500) tk点Paste浮层("帐密账号栏", 0.155) sys.msleep(300) elseif ff2(p118密码未输入, "输入密码 "..tpw, 1) then sys.input_text(tpw); sys.msleep(500) tk点Paste浮层("帐密密码栏", 0.185) sys.msleep(300) elseif ff2(p119帐密已输入, "帐密已输入 下一步", 1) then sys.msleep(1800) end --elseif tk验证打码() then elseif ff2(p105弹窗Dont, "弹窗 Don't allow",1) then elseif ff2(p125Request封禁, "Request data 封禁") then status_running = "forbidden" tk截屏日志("forbidden_Request") runid = 129.9 elseif tkLoggedInProfilePage("登录成功 本人Profile页") then flag登录完待提参 = true SelfProfile = {status="nil"} --初始化 runid = 118.8 ttdog = os.time() elseif ff2(p10main十, "登录成功 视频页十") then flag登录完待提参 = true SelfProfile = {status="nil"} --初始化 runid = 118.8 ttdog = os.time() end elseif runid == 118.8 then runid = 118.8 klog("快速提参+自查") ttdog = os.time() local ttw = os.time() if flag新机登录 == false and flag养号任务 == false then API_上传log("掉登录已重登") end local ttw2 = os.time() - ttw if ttw2 < 1 then sys.msleep((1-ttw2)*1000) end if app.front_bid() == "com.zhiliaoapp.musically" then runid = 119 else klog("闪退?强制关闭后,重启TK") app.close("com.zhiliaoapp.musically") sys.msleep(2000) runid = 102 end elseif runid == 119 then if tk读取AccountToken() then if exec_SelfProfile() then local tokenDecodeOk tokenDecodeOk, tokentable = pcall(json.decode, tokenjson) if not tokenDecodeOk or type(tokentable) ~= "table" then flag本账号已提参 = false klog("提参JSON解析失败,拒绝上传并返回登录页重提") runid = 103 cp60 = 0 ttdog = os.time() else flag本账号已提参 = true local f1,f2,f3 = 0, 0, 0 local backup_slim_ok = false local token_upload_ok = false local tt12 = os.time() while true do if f1 == 0 then --and API_token() 传老后台 缺参数 f1 = 1 end if f2 == 0 and (1>0 or selects['是否上传云控?']) then local uploadOk, uploadDone = API_token_云控() if uploadDone then f2 = 1 token_upload_ok = uploadOk end elseif f2 == 0 and (1>2 and selects['是否上传云控?']==false) then f2 = 1 end if f1 == 1 and f3 == 0 then backup_slim_ok = tk备份在本机() if flag养号任务 and backup_slim_ok then klog("首次登录备份和瘦身成功,不再返回TK") else sys.msleep(2000) klog("备份流程结束,返回tk继续后续任务") Check_app("com.zhiliaoapp.musically") end f3 = 1 end if f1==1 and f2==1 and f3==1 then break elseif os.time()-tt12 > 60 then klog("超时放弃") break end sys.msleep(500) end if flag养号任务 and f2 == 1 and token_upload_ok and backup_slim_ok then klog("首次登录Token上传、备份、瘦身均成功,关闭TK并进入下一个账号") Close_app("com.zhiliaoapp.musically") API_设备log(uid.." 首次登录完成") runid = 129.9 else runid = 119.1 end ttdog = os.time() end elseif vartk.flag闪退还原 then vartk.flag闪退还原 = false if tasktable.data.appAccounts[sq_appAccounts].re闪退还原 > 1 then klog("闪退还原 超过1次了 任务完成算了") API_上传log("闪退放弃") sys.alert("【!!!】闪退放弃",5) runid = 129.9 ttdog = os.time() elseif tasktable.data.appAccounts[sq_appAccounts].re闪退还原 == 1 then klog("还原备份重来") runid = 100 ttdog = os.time() end elseif SelfProfile.status == "Login expired" then klog("跳转登录重置") runid = 102 else sys.msleep(5000) end else klog("Account.txt 提参异常,稍后再提参") sys.toast("token base64 异常 稍后再提参") sys.msleep(5000) runid = 103 cp60 = 0 --返回流程开头 end elseif runid == 119.1 then if ff2(p10main十, "在视频页") then --runid = 119.2 --去点赞 runid = 120 tt119 = os.time() elseif ff2(p105弹窗Dont, "弹窗 Don't allow",1) then elseif ff2(p60我页, "我页,切换去视频页") then touch.tap(zHome[1],zHome[2]) sys.msleep(3000) ttdog = os.time() elseif os.time() - ttdog > 6 then --登录到这里了 如果有不识别的截屏 可以放通过 runid = 120 end elseif runid == 119.2 then --去点赞 暂被屏蔽了 if ff2(p123点赞白, "点赞 白心 去点赞") then sys.msleep(2000) touch.tap(Xin0, Yin0) sys.msleep(2000) ttdog = os.time() --sys.msleep(2000) klog("点赞") --touch.tap(391,895) sys.msleep(300) --touch.tap(391,895) sys.msleep(2000) runid = 120 elseif os.time()-tt119 > 20 then klog("超时不见点赞白心 重启一下") if tk重启_点赞() then runid = 120 else runid = 129.9 end end end --【103~120】 if runid >=103 and runid<120 then screen.keep() if 1>2 then elseif tkTermsAgreePopup() then elseif tkSwipeUpForMore("Swipe up for more <103-120>") then elseif flag文字判断 then tk红字判断() elseif tkVerifyEmailMethodFallback() then elseif tkVerifyEmailCodeFallback() then elseif runid>=114 and vartk.p136Verify == nil and ff2(p136Verify, "Verify it's really you") then vartk.p136Verify = os.time() ocrlog() elseif runid>=114 and ff2(p136Verify_radio, "Verify 单选email/phone 账号", 1) then Verify_Code6 = nil elseif runid>=114 and ff2(p137Verify_Next, "Verify 已选 点Next", 1) then Verify_Code6 = nil vartk.mail_outlook = os.date("!%Y-%m-%dT%H:%M:%S.000Z") elseif runid>=114 and flag_2fa=="Auth" and ff2(p139Verify2_选Auth, "方式 选Authenticator",1) then elseif runid>=114 and flag_2fa=="Auth" and ff2(p139Verify2_Useanother_Email, " Use another method",1) then elseif runid>=114 and flag_2fa=="Email" and ff2(p139Verify2_选Email, "方式 选Email",1) then elseif runid>=114 and flag_2fa=="Email" and ff2(p139Verify2_Useanother_Auth, " Use another method",1) then elseif tk_Auth2fa_ocr兜底() then elseif runid>=114 and ff2(p138Verify_Code6, "Verify 验证码 _横线") then if ff2(p140Verify2_Code已, "验证码已输入") then Verify_Code6 = nil if ff2(p140Verify2_Code已_continue, "continue", 1) then --vartk.pswNext = 0 else klog("点一下屏中") touch.tap(0.85*w, 0.45*h) end sys.msleep(2000) elseif ff2(p138九格键盘, "KB") then if Verify_Code6 == nil then if flag_2fa == "outlook" then ff2(p139Email, "") if API_mailcode_outlook() then else runid = 129.9 end elseif flag_2fa == "Email" then ff2(p139Email, "") if API_mailcode(codeAddress) then else runid = 129.9 end elseif flag_2fa == "Auth" then ff2(p139Auth, "") if API_2fa(codeAddress) then else runid = 129.9 end elseif flag_2fa == "sms" then if API_2fa_sms(codeAddress) then else runid = 129.9 end else klog("E or A ?") ocrlog() end tt输入Verify_Code6 = os.time()-20 elseif os.time()-tt输入Verify_Code6 >10 then klog("输入验证码 "..Verify_Code6) inputDigit(Verify_Code6) sys.msleep(1000) tt输入Verify_Code6=os.time() end else if interv(vartk.p138, 5) and ff2(p138第1格, "点第1格", 1) then end end elseif runid>=114 and ff2(p139Verify2_Code未, "Verify-2 验证码页") then if ff2(p140Verify2_Code已, "Verify-2 验证码已输入") then Verify_Code6 = nil if ff2(p140Verify2_Code已_continue, "continue", 1) then --vartk.pswNext = 0 else klog("点一下屏中") touch.tap(0.85*w, 0.45*h) end sys.msleep(2000) elseif ff2(p138九格键盘, "KB") then if Verify_Code6 == nil then if flag_2fa == "outlook" then ff2(p139Email, "") if API_mailcode_outlook() then else runid = 129.9 end elseif flag_2fa == "Email" then ff2(p139Email, "") if API_mailcode(codeAddress) then else runid = 129.9 end elseif flag_2fa == "Auth" then ff2(p139Auth, "") if API_2fa(codeAddress) then else runid = 129.9 end elseif flag_2fa == "sms" then if API_2fa_sms(codeAddress) then else runid = 129.9 end else klog("E or A ?") ocrlog() end tt输入Verify_Code6 = os.time()-20 elseif os.time()-tt输入Verify_Code6 >10 then klog("输入验证码 "..Verify_Code6) inputDigit(Verify_Code6) sys.msleep(1000) tt输入Verify_Code6=os.time() end else if interv(vartk.p138, 5) and ff2(p138第1格, "点第1格", 1) then end end --elseif ff2(p124Notnow_savelogin, "Notnow_savelogin", 1) then elseif ff2(p51Notnow, "弹出菜单 Not now", 1) then elseif ff2(p99语言Cancel, "语言选择 Cancel", 1) then elseif tk允许粘贴弹窗() then elseif ff2(pAutoFillPasswordCancel, "系统 AutoFill Password 点Cancel", 1) then ttdog = os.time() elseif ff2(p103弹窗cancel, "弹窗 TikTok Wants to Use 点Cancel", 1) then elseif ff2(p103弹窗Close, "弹窗 Sign in with your Apple ID 点Close", 1) then elseif ff2(p103叉掉菜单, "p103叉掉菜单", 1) or ff2(p102足迹save, "足迹save叉掉102", 1) then elseif ff2(p130personalSelect, "personal TKshop Select", 1) then elseif runid>=103 and tkTikTokShopSelect() then elseif runid>=114 and tk兴趣() then elseif ff2(p125Request封禁, "Request data 封禁") or ff2(p126弹窗banned, "弹窗 banned 封禁") then status_running = "forbidden" --tk截屏日志("forbidden_Request_banned") ocrlog() runid = 129.9 elseif runid >=113 and ff2(p114_3弹窗Safety, "弹窗 Safety Verification 放弃") then API_上传log("弹窗_Safety_Verification") tk截屏日志("Safety") runid = 129.9 elseif runid >=116 and ff2(p01_AgreeandContinue, "弹窗 Agree and Continue 色", 1) then ttdog = os.time()+60 elseif ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) then sys.msleep(3000) tt重登 = os.time() SelfProfile = {status = "Login expired" } elseif (ff2(p60我页弹窗, "我页 弹窗?") or ff2(p10弹窗背景, "弹窗 背景?")) and tk弹窗文字() then elseif ff2(p10main暗, "main暗_rw") then if runid >= 103 and runid < 104 then if runid == 103 then runid = 103.1 end if not vartk.main_page_tt then vartk.main_page_tt = os.time() end if tkSwipeUpForMore("Swipe up for more 登录主页") then klog("登录主页有 Swipe up for more,先滑动") elseif tkLoginHomeSwipeByBrightness("登录主页Swipe亮度兜底") then else tkHomeProfileNavigationWatchdog() end else local ix_main暗 = tonumber(Ix) or 0 if 1>2 then elseif ix_main暗 >2 and ff2(p弹窗Gotit, "弹窗 Gotit", 1) then elseif runid ~= 119 and tk弹窗文字() then end end elseif ff2(p127弹窗Agree, "弹窗Changes our Terms 点Agree", 1) then elseif interv(vartk.bid闪退, 3) and app.front_bid() ~= "com.zhiliaoapp.musically" then vartk.bid闪退 = os.time() klog("tk 闪退? "..tostring(app.front_bid())) if app.front_bid() == "com.ncitys.httpserviceapp" then Check_app("com.zhiliaoapp.musically") elseif interD("bid闪退2", 10) then klog("tk 闪退! "..tostring(app.front_bid())) if c闪退重启tk[1] >= 1 then c闪退重启tk[1] = 0 if c闪退重启tk[2] == 1 then if c闪退重启tk[3] == 1 then klog("结束该备份账号的任务") runid = 130 ocrlog() elseif c闪退重启tk[3] == 0 then c闪退重启tk[3] = c闪退重启tk[3] +1 if flag删备份新机重启 == 1 then klog("再次故障 频繁放弃 结束任务") API_上传log("频繁") runid = 129.9 else klog("强制关闭tk后 等2秒 删除备份 新机后再重启tk") app.close("com.zhiliaoapp.musically") sys.msleep(2000) flag删备份新机重启 = 1 runid = 101.2 end vartk.bid闪退 = os.time() end elseif c闪退重启tk[2] == 0 then c闪退重启tk[2] = c闪退重启tk[2] +1 klog("强制关闭tk后 等2秒 还原备份 再重启tk") app.close("com.zhiliaoapp.musically") sys.msleep(2000) --Deam.New(string.lower(ISO)) sys.msleep(2000) Deam.Restore(tuid) sys.msleep(2000) Check_app("com.zhiliaoapp.musically") vartk.bid闪退 = os.time() else --klog("暂停该备份账号的任务,【加入队列最后】") runid = 129.8 klog("结束该备份账号的任务") runid = 130 ocrlog() end --c重启tk次数 = 0 --tk截屏日志("队列_闪退") else c闪退重启tk[1] = c闪退重启tk[1]+1 klog("强制关闭tk后 等2秒 再重启tk") app.close("com.zhiliaoapp.musically") sys.msleep(2000) Check_app("com.zhiliaoapp.musically") vartk.bid闪退 = os.time() end end elseif flag新机登录 == false and os.time()-ttdog > 6 then end end end function tk重启_到视频() Check_app("com.zhiliaoapp.musically") sys.msleep(4000) runidC = 0 local tt123 = os.time() local c闪退次数 = 0 while true do screen.keep() if runidC==0 and runidC==1 then tk屏幕文字ocr() end if 1>2 then elseif runidC == 10 then tasktable.data.appAccounts[sq_appAccounts].re闪退还原 = tasktable.data.appAccounts[sq_appAccounts].re闪退还原+1 ttdog = os.time() return false elseif runidC == -1 then Check_app("com.zhiliaoapp.musically") sys.msleep(8000) runidC = 0 tt123 = os.time() elseif runidC == 0 and ff2(p10main十, "main十 视频页 等待10秒+") then runidC = 1 tt123 = os.time() elseif runidC <=1 and ff2(p331弹窗iPhoneStorageFull, "弹窗 iPhone Storage Full 点 Not Now", 1) then elseif runidC == 1 and os.time()-tt123 > 10 then ttdog = os.time() return true elseif runidC >=0 and os.time()-tt123 > 20 then klog("没有发现视频页 退出") runidC = 10 end if runidC >=0 and app.front_bid() ~= "com.zhiliaoapp.musically" then klog("闪退?") sys.msleep(5000) if app.front_bid() ~= "com.zhiliaoapp.musically" then c闪退次数 = c闪退次数 + 1 if c闪退次数 >=5 then klog("已闪退5次 本次终止") runidC = 10 else klog("确认闪退 强制关闭后,准备重启TK") app.close("com.zhiliaoapp.musically") sys.msleep(5000) runidC = -1 end end end screen.unkeep() sys.msleep(500) end end function tk重启_点赞() klog("【关注fail】tk重启_点赞") sys.toast("关注fail tk重启_点赞") sys.msleep(500) klog("Close tk") Close_app("com.zhiliaoapp.musically") sys.msleep(1000) klog("Run tk") Check_app("com.zhiliaoapp.musically") sys.msleep(1000) runidC = 0 local tt123 = os.time() while true do screen.keep() if runidC == 0 and ff2(p10main十, "main十") then runidC = 1 tt123 = os.time() elseif runidC == 1 and ff2(p123点赞白, "点赞 白心 去点赞") then sys.msleep(2000) touch.tap(Xin0, Yin0) sys.msleep(2000) ttdog = os.time() -- sys.msleep(2000) klog("点赞") -- touch.tap(391,895) sys.msleep(300) -- touch.tap(391,895) sys.msleep(2000) return true elseif os.time()-tt123 > 20 then klog("重启也不见 退出放弃") ttdog = os.time() return false end screen.unkeep() sys.msleep(500) end end function get_dispatch_mode_value() if local_dispatch_mode ~= nil then return local_dispatch_mode end return "gateway" end function is_openapi_dispatch_mode() local mode = get_dispatch_mode_value() return mode == "gateway" end function get_openapi_current_task_id() if not is_openapi_dispatch_mode() then return nil end if runid == nil or runid <= 1 or runid >= 130 then return nil end if type(tasktable) ~= "table" or type(tasktable.data) ~= "table" then return nil end if tasktable.data.id == nil then return nil end return tostring(tasktable.data.id) end function get_openapi_running_flag() return get_openapi_current_task_id() ~= nil end function gateway_is_connection_error(code) local numeric_code = tonumber(code) return numeric_code == nil or numeric_code <= 0 end function gateway_register(force) if not is_openapi_dispatch_mode() then return false end -- 配置文件可能保存了上一个局域网的地址。手机换网后先丢弃跨网段地址, -- 避免继续向旧 Gateway 注册,再按当前 WiFi 网段重新发现。 local device_subnet = nil if type(device_wifiIP) == "string" then local a, b, c = string.match(device_wifiIP, "^(%d+)%.(%d+)%.(%d+)%.%d+$") if a ~= nil then device_subnet = a.."."..b.."."..c end end local current_subnet = gateway_url_subnet(gateway_url) if device_subnet ~= nil and current_subnet ~= nil and device_subnet ~= current_subnet then klog("【Gateway发现】旧地址跨网段 "..tostring(gateway_url)..",切换到手机网段 "..device_subnet) gateway_url = "" taskdomain = "" end if type(gateway_url) ~= "string" or gateway_url == "" then if GATEWAY_AUTO_DISCOVERY ~= true then return false end if not gateway_discover(true, true) then return false end end if gateway_register_at ~= nil and force ~= true and os.time() - gateway_register_at < 60 then return true end gateway_register_at = os.time() local url = gateway_url.."/devices/register" local body = { ["id"] = uuid, ["code"] = tostring(device_localport or ""), ["name"] = tostring(device_localport or ""), ["port"] = DEFAULT_TOUCHIOS_OPENAPI_PORT, ["serialNumber"] = device.serial_number() } if type(device_wifiIP) == "string" and string.match(device_wifiIP, "^%d+%.%d+%.%d+%.%d+$") then body["ip"] = device_wifiIP end local body_text = json.encode(body) klog("【Gateway注册】"..url.." "..body_text) local last_code = nil local last_response = nil for i=1,2 do local c, h, r = http.post(url, 10, {['Content-Type']='application/json'}, body_text) last_code = c last_response = r if c == 200 or c == 201 then klog("【Gateway注册】成功 "..tostring(r)) return true end if i == 2 then klog("【Gateway注册】失败 code="..tostring(c).." "..tostring(r)) if gateway_is_connection_error(c) then yk_toast("Gateway地址不可达,正在查找小主机", 3) else klog("【Gateway注册】小主机地址可达,服务尚未就绪,不扫描网段") yk_toast("Gateway服务未就绪,稍后自动重试", 3) end else sys.msleep(2000) end end -- Any failed registration must trigger discovery. A stale gateway can still -- answer HTTP (for example with 503), so health alone cannot identify it. if GATEWAY_AUTO_DISCOVERY == true and gateway_discover(true, true) then local retry_url = gateway_url.."/devices/register" klog("【Gateway注册】发现新地址后重试 "..retry_url) local c, h, r = http.post(retry_url, 10, {['Content-Type']='application/json'}, body_text) if c == 200 or c == 201 then klog("【Gateway注册】重试成功 "..tostring(r)) return true end klog("【Gateway注册】重试失败 code="..tostring(c).." "..tostring(r)) end if not gateway_is_connection_error(last_code) then klog("【Gateway注册】保持原地址 "..gateway_url..",等待下一轮注册 code="..tostring(last_code).." "..tostring(last_response)) end return false end function gateway_register_until_ready() if not is_openapi_dispatch_mode() then return false end local retry_seconds = 5 local attempt = 0 while is_openapi_dispatch_mode() do attempt = attempt + 1 if type(device_wifiIP) ~= "string" or not string.match(device_wifiIP, "^%d+%.%d+%.%d+%.%d+$") then Checkwifi() end if gateway_register(true) then klog("【Gateway注册】连接成功,开始等待云控任务") yk_toast("Gateway连接成功", 2) return true end klog("【Gateway注册】第"..tostring(attempt).."次连接失败,"..tostring(retry_seconds).."秒后重试") yk_toast("Gateway连接失败,"..tostring(retry_seconds).."秒后重试", 3) for i=1,retry_seconds do ttdog = os.time() sys.msleep(1000) end end return false end function init_tasktable_runtime_fields() if type(tasktable) ~= "table" then return false end if type(tasktable.data) ~= "table" then tasktable.data = {} end if tasktable.data.id == nil and tasktable.id ~= nil then tasktable.data.id = tasktable.id end if tasktable.type == "delete-app-account-task" then return true end if type(tasktable.data.appAccounts) ~= "table" then return true end if #tasktable.data.appAccounts > 0 then for j=1, #tasktable.data.appAccounts do tasktable.data.appAccounts[j].retry = 0 tasktable.data.appAccounts[j].logtext = "" tasktable.data.appAccounts[j].re闪退还原 = 0 tasktable.data.appAccounts[j].restorePageFailCount = 0 tasktable.data.appAccounts[j].profileLoginRestartCount = 0 tasktable.data.appAccounts[j].homeProfileRestartCount = 0 end end return true end function normalize_local_task_payload(local_task) if type(local_task) ~= "table" then return nil end if type(local_task.payload) == "table" then local payload = local_task.payload if payload.taskId == nil and local_task.taskId ~= nil then payload.taskId = local_task.taskId end if payload.taskId == nil and local_task.id ~= nil then payload.taskId = local_task.id end local_task = payload end if local_task.code == nil then local_task.code = 1 end if local_task.data == nil then local_task.data = {} end if type(local_task.data) ~= "table" then return nil end if local_task.data.id == nil and local_task.taskId ~= nil then local_task.data.id = local_task.taskId end if local_task.data.id == nil and local_task.id ~= nil then local_task.data.id = local_task.id end if local_task.type == nil and local_task.action ~= nil then local_task.type = local_task.action end if type(local_task.data.proxy) == "table" then local proxy_platform = local_task.data.proxy.platform or local_task.data.proxy.username or local_task.data.proxy.proxyId if type(proxy_platform) == "string" and proxy_platform ~= "" then selects["代理平台Platform"] = proxy_platform klog("【Gateway任务】代理Platform="..proxy_platform) end end return local_task end function load_local_task_file(payload_file, tag) local content = file.reads(payload_file) if type(content) ~= "string" or string.len(content) < 10 then return false end local ok, local_task = pcall(json.decode, content) if not ok then klog("【"..tag.."本地任务】json异常") return false end local_task = normalize_local_task_payload(local_task) if type(local_task) ~= "table" or local_task.code ~= 1 or type(local_task.type) ~= "string" then klog("【"..tag.."本地任务】payload异常: "..content) return false end tasktable = local_task if tag == "Gateway" then local_dispatch_mode = "gateway" end file.writes(payload_file, "") init_tasktable_runtime_fields() klog("\n\n【"..tag.."本地任务】"..content.."\n") return true end function load_openapi_local_task() if load_local_task_file(GATEWAY_TASK_PAYLOAD_FILE, "Gateway") then return true end return false end function gateway_heartbeat_tick() if not is_openapi_dispatch_mode() then return false end if gateway_last_heartbeat_at ~= nil and os.time() - gateway_last_heartbeat_at < gateway_heartbeat_interval then return true end gateway_last_heartbeat_at = os.time() return true end function gateway_pull_task() if not is_openapi_dispatch_mode() then return false end local url = gateway_url.."/device-task/next" local body = { ["deviceId"] = uuid } klog("【Gateway取任务】"..url.." "..json.encode(body)) local c, h, r = http.post(url, 15, {['Content-Type']='application/json'}, json.encode(body)) if c ~= 200 and c ~= 201 then klog("【Gateway取任务】异常 c="..tostring(c).." r="..tostring(r)) if gateway_discover(false) then local retry_url = gateway_url.."/device-task/next" klog("【Gateway取任务】发现新地址后重试 "..retry_url) c, h, r = http.post(retry_url, 15, {['Content-Type']='application/json'}, json.encode(body)) if c ~= 200 and c ~= 201 then klog("【Gateway取任务】重试异常 c="..tostring(c).." r="..tostring(r)) return false, "error" end else return false, "error" end end local ok, restable = pcall(json.decode, r) if not ok or type(restable) ~= "table" then klog("【Gateway取任务】返回JSON异常 "..tostring(r)) return false, "error" end if restable.code == 0 then if vartk.flag申请task无任务==nil then vartk.flag申请task无任务 = "无任务" end return false, "no_task" end restable = normalize_local_task_payload(restable) if type(restable) ~= "table" or restable.code ~= 1 or type(restable.type) ~= "string" then klog("【Gateway取任务】payload异常 "..tostring(r)) return false, "error" end tasktable = restable local_dispatch_mode = "gateway" init_tasktable_runtime_fields() taskId = tasktable.data.id API_gateway_task_report("received", false) ttdog = os.time() vartk.flag申请task无任务 = nil gateway_no_task_count = 0 gateway_idle_cleanup_done = false klog("\n\n【Gateway取任务成功】"..r.."\n") return true, "task" end function acquire_task() if load_openapi_local_task() then ttdog = os.time() vartk.flag申请task无任务 = nil gateway_no_task_count = 0 gateway_idle_cleanup_done = false return true end if is_openapi_dispatch_mode() then gateway_heartbeat_tick() local has_task, pull_state = gateway_pull_task() if has_task then return true end if pull_state == "no_task" and gateway_idle_cleanup_done ~= true then gateway_no_task_count = (gateway_no_task_count or 0) + 1 klog("【Gateway取任务】连续无任务 "..tostring(gateway_no_task_count).."/11") if gateway_no_task_count > 10 then tk清全部后台() gateway_no_task_count = 11 gateway_idle_cleanup_done = true end elseif pull_state ~= "no_task" and gateway_idle_cleanup_done ~= true then gateway_no_task_count = 0 end if vartk.flag申请task无任务==nil then vartk.flag申请task无任务 = "无任务" end klog("【Gateway取任务】暂无任务,保持常驻等待") if gateway_no_task_toast_at == nil or os.time() - gateway_no_task_toast_at >= 30 then yk_toast("Gateway在线,暂无任务,常驻等待中", 2) gateway_no_task_toast_at = os.time() end ttdog = os.time() sys.msleep((gateway_task_pull_interval or DEFAULT_TASK_PULL_INTERVAL) * 1000) return false end return API申请task() end function API心跳() local url = taskdomain.."/ykopenapi/device/ping/"..uuid local body= { ["code"]=device_localport, ["ip"]=device_wifiIP, ["serialNumber"]=device.serial_number(), ["dispatchMode"]=get_dispatch_mode_value(), ["isRunning"]=get_openapi_running_flag(), ["currentTaskId"]=get_openapi_current_task_id() } klog("【心跳】body "..json.encode(body)) for i=1,3 do --local c, h, r = http.put(url, 30, {}, uuid) local c, h, r = http.put(url, 30, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("【心跳】返回 "..r) -- {"id":"cm66l0nh300015oh86pgpj27s", "code":null, "uuid":"uuid", "date":"2025-01-21 22:40", "status":"online", "lastPing":"2025-01-21 22:40"} local getheart = json.decode(r) if getheart.status == nil then --sys.alert("心跳status异常!\n\n"..r, 5); sys.toast("心跳status异常!\n\n"..r, 5); --os.exit() sys.msleep(6000) elseif getheart.status == "online" then ttdog = os.time() return true end elseif i==3 then klog("心跳异常!") --sys.alert("心跳异常!", 5); sys.msleep(1000) ttdog = os.time() sys.toast("心跳异常!"); sys.msleep(10*1000) ttdog = os.time() else sys.msleep(10*1000) end end return false end function API申请task() local url = taskdomain.."/ykopenapi/task?uuid="..uuid local i=0 while true do i=i+1 local c, h, r = http.get(url, 30) if c==200 then klog("\n\n【申请task】"..r.."\n") -- {"code": 0} --[[{ "code":1, "data":{ "id":"cm99rgxc2000gt70159nyvcsr", "num":200, "appAccounts":[{"uid":"7490970723654304789","nickname":"user83862812331175","country":"PY","status": "normal"},{"uid":"7490977965150422034","nickname":"dip4mkc49l1ki","country":"PY","status": "normal"}] }, "type":"follow-stock-app-account-task" }]] --2025-12-16 新的数据格式 --[[{ "code": 1, "data": { "id": "cmj8isjbx005fnr01zhg3colk", "createdAt": "2025-12-16T11:49:28.414Z", "status": "pending", "appAccounts": [ { "id": "cmj8iquq9001ynr018cx0w5ne", "uid": null, "nickname": "eyecwzqz26", "country": "GB", "status": "normal", "loginDate": null, "password": "JPMxnz811+", "phone": "NicholasRusso4229@outlook.com", "codeAddress": null, "clientId": "dbc8e03a-b00c-46bd-ae65-b683e7707cb0", "refreshToken": "M.C505_BAY.0.U.-Cp7hWuMy0Bz4ncP0IxA4v2Acg!5rGvaL!mFafouR2OKOLpJ8w9IDenm6YiOeQPIwaSFtDi9elhvj58Zja8x!t2IIGRkHaFvVN6zRkD0!BBWCb2EEQRkMtqcAJ!roD2is1P*nmo74kFBdsQ2olwYVymjv9Vu!WyU1!ro9Z643hhcTCcP" }, { "id": "cmj8iquq9001znr010oi3llwh", "uid": null, "nickname": "k0estgpiv1", "country": "GB", "status": "normal", "loginDate": null, "password": "VRLwam877.", "phone": "MaryBurns3212@outlook.com", "codeAddress": null, "clientId": "dbc8e03a-b00c-46bd-ae65-b683e7707cb0", "refreshToken": "M.C529_SN1.0.U.-Cmz644pEXHFeoTmgr4uP6C*hopELB79RvAKaOHFA8CNSOLKRlVDicSJW!3wE*l*dIS1SGZHpssflnW1nbZk0*3tgPa0M3HMef!UlJsD5fLumnivvZWIN1fZJosPxknbfLV97Eb!1TrXUPmc7u7oBoWYTRAKhQl5L!qlnprEEClgzA9u" }, { "id": "cmj8iquq90020nr018f2p4mp0", "uid": null, "nickname": "ldksrmvc06", "country": "GB", "status": "normal", "loginDate": null, "password": "JBDvvn425*", "phone": "SandraHernandez1795@outlook.com", "codeAddress": null, "clientId": "dbc8e03a-b00c-46bd-ae65-b683e7707cb0", "refreshToken": "M.C550_BAY.0.U.-CmfAvLZsE6EtNO*S*YUnn1JPesFlsS58MGe00yqvvQJZdr11qkmYbeHWI4WCU4XSR*iRdpiUZWDYyG1A!QVJB3HaTPgze*MQ5GRnbhhD2P8o93tL8hk4UMhfUyXBqz25eJXrvtdAZihJU71Wd*WXri!LbfHnMe22CEsOqnnZaLglkZf" }, { "id": "cmj8iquq90021nr011jhpaq6m", "uid": null, "nickname": "sn9ocxmg02", "country": "GB", "status": "normal", "loginDate": null, "password": "JHSvkj459+", "phone": "AnthonyFernandez1652@outlook.com", "codeAddress": null, "clientId": "dbc8e03a-b00c-46bd-ae65-b683e7707cb0", "refreshToken": "M.C527_SN1.0.U.-CqlSPtv*3OYVxe5UDnbgDwH0GhAnEvggoWdVJFES1Q612r*GhmNUVGq02e4P*KuCLbGdC5la3LRNQtn2O9RKZkBkd4E2VbuT9ioLMEL0zS73gimxHFPS2jbCsy6KYt2JCqOYyCxyXbrnZMsYmDLu*8Hot44KV0QB*H4O7SV!93xm!3z" }, { "id": "cmj8iquq90022nr01f4suw056", "uid": null, "nickname": "onskgqgsy5", "country": "GB", "status": "normal", "loginDate": null, "password": "NDQyob603*", "phone": "SuzanneReed6912@outlook.com", "codeAddress": null, "clientId": "dbc8e03a-b00c-46bd-ae65-b683e7707cb0", "refreshToken": "M.C503_SN1.0.U.-Cqop5Kg04*Rj!6AVT9fcHY5lhzgpVe5iVkoG3lF8RI!v8FGOIDpBCzP7v23gLFGqUD07LM8n1xnHrqtw5Gketb!tWcNkML9873B12rvi5M4CsFiUhZuFNTvnhx4uKqzamfjplgNwK3UsamcCKF2VTNh*Z3Izggu989y2OzCiEsnkzVD" } ], "executionMode": "nurturing" }, "type": "update-app-account-task" }]] local restable = json.decode(r) if restable.code == nil then sys.toast("申请task code异常!\n\n"..r); sys.msleep(30*1000) elseif restable.code == 0 then sys.toast("【申请task】无任务\n"..r); sys.msleep(30*1000) if vartk.flag申请task无任务==nil then vartk.flag申请task无任务 = "无任务" end --设备log break elseif restable.code == 1 then ttdog = os.time() tasktable = json.decode(r) if tasktable.type == "delete-app-account-task" then return true end if #tasktable.data.appAccounts > 0 then for j=1, #tasktable.data.appAccounts do tasktable.data.appAccounts[j].retry = 0 tasktable.data.appAccounts[j].logtext = "" tasktable.data.appAccounts[j].re闪退还原 = 0 tasktable.data.appAccounts[j].profileLoginRestartCount = 0 tasktable.data.appAccounts[j].homeProfileRestartCount = 0 end end return true end else klog("申请task异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) if i>=20 then klog("网络异常 次数过多 去重置vpn网络") flag重检wifi_vpn = true break elseif i%3 == 0 then sys.alert("申请task异常!连续"..i.."次",10); end sys.msleep(30*1000) end end ttdog = os.time() return false end function API_上传log(content) --if 1>0 then return true end if tasktable.data.appAccounts[sq_appAccounts].logtext == content then return end if taskId == "__AAA__" then return end if content == "队列3次频繁" and tasktable.type == "follow-stock-app-account-task" then return end local url = taskdomain.."/ykopenapi/"..tasktable.type.."/"..taskId.."/log" klog("url_上传log: "..url) local currentAppAccount = tasktable.data.appAccounts[sq_appAccounts] local body = { ["text"] = content } if type(currentAppAccount) == "table" then if type(currentAppAccount.id) == "string" and currentAppAccount.id ~= "" then body["appAccountId"] = currentAppAccount.id end if tk有效TikTokUID(currentAppAccount.uid) then body["uid"] = currentAppAccount.uid elseif tk有效TikTokUID(uid) then body["uid"] = uid end end for i=1,3 do local c, h, r = http.put(url, 30, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("上传log "..tasktable.type.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) tasktable.data.appAccounts[sq_appAccounts].logtext = content ttdog = os.time() return true else klog("上传log 异常 c:"..tostring(c).." r:"..tostring(r)) sys.msleep(10*1000) end if i==3 then klog("上传log "..tasktable.type.." fail 3次") sys.toast("上传log fail 3次") sys.msleep(10*1000) end end ttdog = os.time() return false end function API_设备log(logText) local url = taskdomain.."/ykopenapi/device/log/"..uuid klog("url_设备log: "..url.." "..logText) local body= {["logText"]=os.date("!%Y-%m-%d %H:%M:%S", os.time()+seczone).." 北京时间 "..logText} for i=1,3 do local c, h, r = http.put(url, 30, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("设备log 发送成功 "..r) ttdog = os.time() return true else klog("设备log 异常 c:"..tostring(c).." r:"..tostring(r)) sys.msleep(10*1000) end if i==3 then klog("设备log fail 3次") sys.toast("设备log fail 3次") sys.msleep(10*1000) end end ttdog = os.time() return false end function API_gateway_task_control() if gateway_url == nil or gateway_url == "" then return false end if taskId == nil or taskId == "" or taskId == "__AAA__" then return false end local url = gateway_url.."/device-task/control?deviceId="..tostring(uuid).."&taskId="..tostring(taskId) local c, h, r = http.get(url, 8) if c ~= 200 or r == nil or r == "" then return false end local ok, restable = pcall(json.decode, r) if not ok or type(restable) ~= "table" then return false end if restable.code == 1 and (restable.action == "cancelTask" or restable.taskId == taskId) then klog("gateway cancel task: "..tostring(taskId)) API_gateway_task_report("stopped", true) API_设备log("任务已收到停止指令,准备重新拉取任务") return true end return false end function gateway_script_heartbeat_tick(force, status) if not is_openapi_dispatch_mode() then return false end if gateway_url == nil or gateway_url == "" then return false end if taskId == nil or taskId == "" or taskId == "__AAA__" then return false end local now = os.time() local interval = tonumber(gateway_script_heartbeat_interval) or DEFAULT_SCRIPT_HEARTBEAT_INTERVAL if interval < 10 then interval = 10 end if interval > 300 then interval = 300 end if not force and gateway_last_script_heartbeat_at ~= nil and now - gateway_last_script_heartbeat_at < interval then return false end gateway_last_script_heartbeat_at = now local heartbeat_status = status or "running" local heartbeat_task_id = taskId if heartbeat_status == "idle" or heartbeat_status == "done" or heartbeat_status == "success" or heartbeat_status == "stopped" then heartbeat_task_id = "" end local progress = "runid="..tostring(runid) if type(flag当前状态) == "table" and flag当前状态[2] ~= nil then progress = progress.." "..tostring(flag当前状态[2]) end if sq_appAccounts ~= nil then progress = progress.." account="..tostring(sq_appAccounts) end local body = { ["deviceId"] = uuid, ["taskId"] = heartbeat_task_id, ["runId"] = tostring(runid), ["status"] = heartbeat_status, ["progress"] = progress, ["time"] = now * 1000 } local c, h, r = http.post(gateway_url.."/device-task/heartbeat", 3, {['Content-Type']='application/json'}, json.encode(body)) if c ~= 200 or r == nil or r == "" then return false end local ok, restable = pcall(json.decode, r) if not ok or type(restable) ~= "table" then return false end local next_interval = tonumber(restable.heartbeatIntervalSeconds) if next_interval ~= nil and next_interval >= 10 and next_interval <= 300 then gateway_script_heartbeat_interval = next_interval end if heartbeat_task_id ~= "" and restable.code == 1 and restable.action == "cancelTask" then klog("gateway heartbeat received cancel task: "..tostring(taskId)) API_gateway_task_report("stopped", true) return true end return false end function API_gateway_task_report(status, includeAccount, text, error, result) if not is_openapi_dispatch_mode() then return true end if type(tasktable) ~= "table" or type(tasktable.gatewayId) ~= "string" or tasktable.gatewayId == "" then return true end if type(taskId) ~= "string" or taskId == "" or taskId == "__AAA__" then return true end if status == "done" or status == "success" or status == "stopped" or status == "failed" then gateway_script_heartbeat_tick(true, status == "stopped" and "stopped" or "idle") end local url = taskdomain.."/ykopenapi/gateway/tasks/report" if is_openapi_dispatch_mode() and type(gateway_url) == "string" and gateway_url ~= "" then url = gateway_url.."/device-task/report" end local body = { ["gatewayId"] = tasktable.gatewayId, ["deviceId"] = uuid, ["taskId"] = taskId, ["status"] = status or "progress" } if type(text) == "string" and text ~= "" then body["text"] = text end if type(error) == "string" and error ~= "" then body["error"] = error end if type(result) == "table" then body["result"] = result end if includeAccount ~= false and type(tasktable.data) == "table" and type(tasktable.data.appAccounts) == "table" and type(sq_appAccounts) == "number" then local appAccount = tasktable.data.appAccounts[sq_appAccounts] if type(appAccount) == "table" then if type(appAccount.id) == "string" and appAccount.id ~= "" then body["appAccountId"] = appAccount.id end if type(appAccount.uid) == "string" and appAccount.uid ~= "" then body["appUid"] = appAccount.uid end if type(appAccount.username) == "string" and appAccount.username ~= "" then body["username"] = appAccount.username end end end klog("url gateway report: "..url.." "..json.encode(body)) for i=1,3 do local c, h, r = http.post(url, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("?gateway report?"..tostring(r)) ttdog = os.time() return true end if i<3 then sys.msleep(2000) end end klog("gateway report fail status="..tostring(status)) return false end function API_update_app_account_task_done() --local url = "http://"..ipdomain..":23121/omfnapi/apidocs#/%E8%B4%A6%E5%8F%B7/AccountPoolController_registerDone" if not tk有效TikTokUID(uid) then klog("跳过 update-app-account-task/done:当前账号无有效TikTok UID") return false end local url = taskdomain.."/ykopenapi/update-app-account-task/done" local data local data2 data = { ["uid"] = uid, ["taskId"] = taskId, } if tasktable.type == "follow-stock-app-account-task-with-update" then data.taskId = tasktable.data.updateAppAccountTaskId end --data2 = "uuid="..uuid.."&username="..user_name.."&uid=".. tokentable.user.userID.."&appType=tiktok".."&nickname="..nick_name.."&country="..ISO.."¶ms=".. tokenbase64 for i=1,30 do local c, h, r = http.post(url, 30, {['accept']='*/*', ['Content-Type']='application/json'}, json.encode(data)) if c==200 or c==201 then klog("【API_update_app_account_task_done】 "..c.." " ..r) --{ "code": -2, "msg": "任务已停止"} local restable = json.decode(r) if restable.code == 1 then if tasktable.type == "update-app-account-task" then API_gateway_task_report("success", true) end sys.toast("【API_update_app_account_task_done】") sys.msleep(2000) return true elseif restable.code == -2 or string.match(r, "任务已停止") then klog("【停止任务 进入休眠】") sys.alert("【停止任务 进入休眠】",5); flag休眠 = true sys.msleep(5*1000) ttdog = os.time() return false elseif restable.code == 0 then if i>3 then return false else sys.msleep(5*1000) end end else klog("API_update_app_account_task_done 异常 c:"..tostring(c).." r:"..tostring(r)) sys.msleep(10*1000) end if i==30 then klog("【API_update_app_account_task_done】 异常fail") sys.toast("API_update_app_account_task_done 异常 \n上传fail!"); sys.msleep(10*1000) return false end end end function API_update_app_account_task_resource() local url = taskdomain.."/ykopenapi/update-app-account-task/resource?taskId="..taskId.."&uid="..uid.."&uuid="..uuid if tasktable.type == "follow-stock-app-account-task-with-update" then url = taskdomain.."/ykopenapi/update-app-account-task/resource?taskId="..tasktable.data.updateAppAccountTaskId.."&uid="..uid.."&uuid="..uuid end klog("url update: "..url) local i=1 while true do local c, h, r = http.get(url, 30) if c==200 then klog("【update-app-account-task resource】"..tostring(r)) -- {"code": 0} -- {"code": 1, "data": {"uid": "7466351923286770705", "avatarUrl": "/skavatar/cm6lxi29s0001pi5wek5mosxd/fjamutvtsgyhfwbz2oytqtbt.png", -- "nickname": "signature": "videoTitle": "videoUrl":}} -- {"code":-2,"msg":"任务已停止"} local restable = json.decode(r) if restable.code == nil then sys.alert("【update-app-account-task resource】异常!\n\n"..tostring(r),5); sys.msleep(10*1000) elseif restable.code == 0 then klog("没有 update任务") updatetasktable = {["code"]=0, ["data"]={["signature"]=nil, ["avatarUrl"]=nil}} ttdog = os.time() return true -- sys.msleep(15*1000) -- ttdog = os.time() -- return false elseif restable.code == 1 then updatetasktable = json.decode(r) ttdog = os.time() return true elseif restable.code == -2 then klog("【停止任务 进入休眠】") sys.alert("【停止任务 进入休眠】",5) sys.msleep(5*1000) flag休眠 = true ttdog = os.time() return false end elseif i%10 == 0 then klog("【update-app-account-task resource】 连续"..i.."次异常!") sys.alert("【update-app-account-task resource】\n连续"..i.."次异常!", 10) sys.msleep(5*1000) else klog("【update-app-account-task resource】异常 c:"..tostring(c).." r:"..tostring(r)) sys.msleep(10*1000) end i=i+1 end return false end function API_avatarUrl() --local url = "http://43.163.80.13:53530"..tostring(updatetasktable.data.avatarUrl) local url if string.sub(tostring(updatetasktable.data.avatarUrl), 1,1) == "/" then url = taskdomain2..""..tostring(updatetasktable.data.avatarUrl) else url = taskdomain2.."/"..tostring(updatetasktable.data.avatarUrl) end klog("avatarUrl: "..url) local i=0 while true do i=i+1 klog("下载avatar 第"..i.."次") local c, h, r = http.get(url, 30) if c==200 then klog("【avatar resource】200 "..string.len(r)) if string.len(r) >1000 then check目录pic() local path_avatar = app.data_path("com.zhiliaoapp.musically").."/tmp/backup/pic/222.jpg" local path_avatar2 = app.data_path("com.zhiliaoapp.musically").."/tmp/backup/222.jpg" --klog(path_avatar) filewrites(path_avatar, r) --file.writes(path_avatar, r) --file.writes(path_avatar2, r) --file.writes("/var/mobile/Media/1ferver/res/222.jpg", r) return true end else klog("下载avatar异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) if i%10 == 0 then sys.alert("下载avatar 异常! 连续"..i.."次", 6); sys.msleep(5000) return false end sys.msleep(10*1000) end end end function video_resource_url(videourl) if type(videourl) ~= "string" or videourl == "" then return nil end if string.match(videourl, "^https?://") then return videourl end local base = string.gsub(VIDEO_MEDIA_BASE_URL or "https://xunhuoyun.com", "/+$", "") if string.sub(videourl, 1, 1) == "/" then return base..videourl end return base.."/"..videourl end function video_resource_is_mp4(content) if type(content) ~= "string" then return false, "响应不是二进制字符串" end local content_len = string.len(content) if content_len <= 1000 then return false, "文件过小 "..tostring(content_len) end local head = string.sub(content, 1, 256) local head_lower = string.lower(head) if string.find(head_lower, "=5 then sys.toast("增粉 初始化中..") tt1 =os.time() end if runidC == 0 then local url1 = taskdomain.."/ykopenapi/increase-follower-task/init-uid/"..taskId for i=1,3 do local c, h, r = http.get(url1, 30) if c==200 then klog("【get inituid】"..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) getinituid_table = json.decode(r) if getinituid_table.code == 0 then return true elseif getinituid_table.code == 1 then runidC = 1 break end else klog("【get inituid】异常 c:"..c.." r:"..tostring(r)) sys.msleep(10*1000) end if i==3 then klog("【get inituid】"..uid.." fail 3次") sys.alert("【get inituid】"..uid.." fail 3次", 5) sys.msleep(3000) end end end if runidC == 1 and exec_OtherProfile(getinituid_table.data.uid, tablesec[getinituid_table.data.uid]) then runidC = 2 end if runidC == 2 then local url2 = taskdomain.."/ykopenapi/increase-follower-task/init-uid/"..taskId local body= {["uid"]=OtherProfile.userID, ["followerCount"]=OtherProfile.follower_count} for i=1,3 do local c, h, r = http.put(url2, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 then klog("【put inituid】"..OtherProfile.userID.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) getinituid_table = json.decode(r) if getinituid_table.code == 0 then return true elseif getinituid_table.code == 1 then runidC = 1 break end else klog(c.." "..tostring(r)) sys.msleep(3000) end if i==3 then klog("【put inituid】"..OtherProfile.userID.." fail 3次") sys.alert("【put inituid】"..OtherProfile.userID.." fail 3次", 4) sys.msleep(3000) end end end end end function API_increase_follower_task_init_uid_old(id, uid, followerCount) local url = taskdomain.."/ykopenapi/increase-follower-task/init-uid/"..id local body= {["uid"]=uid, ["followerCount"]=followerCount} for i=1,3 do local c, h, r = http.put(url, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 then klog("init-uid "..uid.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) inituid_table = json.decode(r) return true else klog(c.." "..r) sys.msleep(3000) end if i==3 then klog("init-uid "..uid.." fail 3次") end end return false end function API_increase_follower_task_update_uid(id, uid, currentCount) local url = taskdomain.."/ykopenapi/increase-follower-task/update-uid-status/"..id local body= {["uid"]=uid, ["currentCount"]=currentCount} for i=1,3 do local c, h, r = http.put(url, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("update-uid "..uid.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) local update_table = json.decode(r) if update_table.code == 1 then return true end else klog(c.." "..tostring(r)) sys.msleep(3000) end if i==3 then klog("update-uid "..uid.." fail 3次") end end return false end function tk增粉前初始化() API_increase_follower_task_init_uid() end function API_followstockappaccounttask_follow_uid() --获取要关注的follow_uid local url = taskdomain.."/ykopenapi/follow-stock-app-account-task/follow-uid?id="..taskId.."&uid="..uid klog("url get_follow_uid: "..url) for i=1,20 do local c, h, r = http.get(url, 10) if c==200 then --klog("【get_follow_uid】"..r) klog("【get_follow_uid】") -- {"code": 0} --表示没有待关注的uid了 -- {"code": 1, "data": {"uid": "7466351923286770705"}} --{"code":1,"data":[{"uid":"6799784644360422405","secUid":"MS4wLjABAAAAG1IpOwqr9j_XEwmNUSNiZSO05SrCRK_nMgV6xutVn0bLVS_3t6T12dG5WjxQo_Wo"},{"uid":"6928794382250411013","secUid":"MS4wLjABAAAAUcCVhVp_VtoY_DmtE80pVnfcuoV8fWu8J8g04CkSD6PtN1-Qi7yGcFz_yzbNTIhj"},{"uid":"7036394316054873094","secUid":"MS4wLjABAAAA_GPXKyGyMdFQzMgls38S6hM7St3IiulajHKydgmK4K9HKD9Dv8bc5s3tq5COK04h"},{"uid":"7085322281921528838","secUid":"MS4wLjABAAAASdsnAXJOHSApBb0dQWUARoHG6Y9o_tsG4XPF-1BXlAlcPtNv2oreBgIwpC1sXZOW"},{"uid":"7414750796250498054","secUid":"MS4wLjABAAAADsnjNoDvxhBhpcnZvkwqTo2qyyKfj8O4jHJ6l6wG4KiONN6nu_wlGgr6uKc0TZu0"}]} -- {"code": -2} --表示任务已停止 local restable = json.decode(r) if type(restable) == "table" then if restable.code == nil then sys.alert("get_follow_uid 异常!\n\n"..r, 5); sys.msleep(1000) elseif restable.code == 0 then klog(r) sys.msleep(5*1000) ttdog = os.time() return false elseif restable.code == -2 then klog(r) klog("【停止任务 进入休眠】") sys.alert("【停止任务 进入休眠】",5); flag休眠 = true sys.msleep(5*1000) ttdog = os.time() return false elseif restable.code == 1 then get_follow_uid_table = json.decode(r) ipuid = 1 --指针 klog("共有待关注 "..#get_follow_uid_table.data) return true end end end klog("申请get_follow_uid 异常!".." c:"..tostring(c).." r:"..tostring(r)) if i>=20 then sys.alert("申请get_follow_uid 异常!",5); sys.msleep(5*1000) end sys.msleep(12*1000) end return false end function API_followstockappaccounttask_mark_completed() --标记应用账号完成任务 local url = taskdomain.."/ykopenapi/follow-stock-app-account-task/mark-completed" local body= {["id"]=taskId, ["appUid"]=uid} klog("url followstockappaccounttask mark-completed: "..taskId..","..uid) for i=1,3 do local c, h, r = http.put(url, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 then klog("【mark-completed】"..r) -- {"code": 0} --表示任务或账号不存在 -- {"code": 1} --表示标记成功 local restable = json.decode(r) if restable.code == nil then sys.alert("mark-completed 异常!\n\n"..r, 5); sys.msleep(3000) elseif restable.code == 0 then sys.msleep(12*1000) -- ttdog = os.time() elseif restable.code == 1 then klog("标记成功") API_gateway_task_report("success", true) return true end elseif i>=3 then klog("标记任务完成 异常!".."c: "..tostring(c).."\nr: "..tostring(r)) sys.alert("标记任务完成 异常!", 5); sys.msleep(1000) else klog("网络异常 c: "..tostring(c).."\nr: "..tostring(r)) sys.msleep(12*1000) end end return false end function API_followstockappaccounttask_report_failed() --回传 剩余未用的关注uid local url = taskdomain.."/ykopenapi/follow-stock-app-account-task/report-failed" local body= {["id"]=taskId, ["stockUids"]=report_failed_uids} --klog("url report_failed 回传uid: "..taskId.." #"..#report_failed_uids.."\n"..json.encode(body)) klog("url report_failed 回传uid: "..taskId.." #"..#report_failed_uids) for i=1,3 do local c, h, r = http.put(url, 10, {['Content-Type']='application/json'}, json.encode(body)) if c==200 then klog("【report_failed 回传uid】"..r) -- {"code": 0} --表示任务或账号不存在 -- {"code": 1} --表示标记成功 local restable = json.decode(r) if restable.code == nil then sys.alert("report_failed 回传uid 异常!\n\n"..r, 5); sys.msleep(3000) elseif restable.code == 0 then sys.msleep(5*1000) -- ttdog = os.time() elseif restable.code == 1 then klog("report_failed 回传uid 成功") return true end elseif i>=3 then klog("report_failed 回传uid 异常!".."c: "..tostring(c).."\nr: "..tostring(r)) sys.alert("report_failed 回传uid 异常!", 5); sys.msleep(1000) else klog("【report_failed】 c: "..tostring(c).."\nr: "..tostring(r)) sys.msleep(12*1000) end end return false end function API_dmtask_已发送粉丝uids() --获取已发送粉丝uid --local url = taskdomain.."/ykopenapi/dm-task/sent/uids/"..taskId.."/"..uid local url = taskdomain.."/ykopenapi/dm-task/sent/uids/"..uid if tasktable.data.targetType == "all" then url = taskdomain.."/ykopenapi/dm-task/sent/uids/"..uid.."?id="..taskId end klog("【get已发送粉丝uids url】"..url) --klog("url get已发送粉丝uids: "..url) for i=1,3 do local c, h, r = http.get(url, 10) if c==200 then klog("【get已发送粉丝uids】"..r) get_fans_uids = r --get_fans_uids = "" return true else klog("get已发送粉丝uids 异常!".."c:"..tostring(c).." r:"..tostring(r)) if i>=3 then sys.alert("get已发送粉丝uids 异常!", 5); end sys.msleep(2000) end end return false end function API_dmtask_上报已成功发送的粉丝uid() --上报已成功发送的粉丝uid local url = taskdomain.."/ykopenapi/dm-task/report/sent" --local body= {["id"]=taskId, ["uid"]=uid, ["success"]=fans_success, ["fail"]=fans_fail} local body= {["id"]=taskId, ["uid"]=uid} if #fans_success > 0 then body.success = fans_success end if #fans_fail > 0 then body.fail = fans_fail end klog("准备上报的粉丝uid数据: \n"..json.encode(body)) for i=1,3 do local c, h, r = http.put(url, 30, {['Content-Type']='application/json'}, json.encode(body)) if c==200 then klog("【上报发送uids】"..r) -- {"code": 0} --表示任务或账号不存在 -- {"code": 1} --表示标记成功 local restable = json.decode(r) -- if restable.code == nil then -- sys.alert("上报发送uids 异常!\n\n"..r, 5); sys.msleep(3000) -- elseif restable.code == 0 then -- sys.msleep(5*1000) -- -- ttdog = os.time() -- elseif restable.code == 1 then -- klog("标记成功") -- return true -- end if 1>2 then elseif restable.code == 1 then --正常成功 ttdog = os.time() return true elseif restable.code == -2 then klog("【停止任务 进入休眠】") sys.alert("【停止任务 进入休眠】", 5); sys.msleep(5*1000) flag休眠 = true ttdog = os.time() return false end elseif i>=3 then klog("上报发送uids 异常!".."c: "..tostring(c).."\nr: "..tostring(r)) sys.alert("上报发送uids 异常!", 5); sys.msleep(10*1000) else klog("【上报发送uids】异常 ".."c:"..tostring(c).." r:"..tostring(r)) sys.msleep(12*1000) end end return false end function API_dmtask_mark_completed() --标记私信 完成任务 local url = taskdomain.."/ykopenapi/dm-task/mark-completed/"..taskId.."/"..uid klog("url dmtask mark-completed: "..taskId..","..uid) local i=0 while true do i=i+1 local c, h, r = http.put(url, 30) if c==200 or c==201 then klog("【dmtask_mark-completed】"..r) -- {"code": 0} --表示任务或账号不存在 -- {"code": 1} --表示标记成功 local restable = json.decode(r) -- if restable.code == nil then -- sys.alert("mark-completed 异常!\n\n"..r, 5); sys.msleep(3000) -- elseif restable.code == 0 then -- sys.msleep(5*1000) -- -- ttdog = os.time() -- elseif restable.code == 1 then -- klog("标记成功") -- return true -- end API_gateway_task_report("success", true) return true else klog("【dmtask_mark-completed】异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) if i%10 == 0 then sys.alert("【dmtask_mark-completed】异常!\n连续"..i.."次", 5); sys.msleep(6*1000) return false end sys.msleep(10*1000) end end return false end function API_delete_mark_completed(deleted_uids) --删除备份 标记完成任务 local url = taskdomain.."/ykopenapi/app-account/mark-deleted/"..uuid local body = {uids = deleted_uids or {}} --klog("url "..url) local i=0 while true do i=i+1 local c, h, r = http.post(url, 30, {['Content-Type']='application/json'}, json.encode(body)) if c==200 or c==201 then klog("【delete_mark-completed】 uuid:"..uuid.." r:"..tostring(r)) -- {"code": 0} --表示任务或账号不存在 -- {"code": 1} --表示标记成功 local restable = json.decode(r) -- if restable.code == nil then -- sys.alert("mark-completed 异常!\n\n"..r, 5); sys.msleep(3000) -- elseif restable.code == 0 then -- sys.msleep(5*1000) -- -- ttdog = os.time() -- elseif restable.code == 1 then -- klog("标记成功") -- return true -- end return true else klog("【delete_mark-completed】异常 c:"..tostring(c).." r:"..tostring(r).." i:"..i) if i%10 == 0 then sys.alert("【delete_mark-completed】 异常!\n连续"..i.."次", 5); sys.msleep(6000) return false end sys.msleep(10*1000) end end return false end function exec_SelfProfile() --本机信息 --Check_app("com.zhiliaoapp.musically") SelfProfile = {status="nil"} --初始化 local url = "http://127.0.0.1:8182/getSelfProfile" local iSelf = 0 local c切ip = 0 local c_fail = 0 while true do iSelf = iSelf+1 local c, h, r = http.get(url, 30) screen.keep() tk屏幕文字ocr() if c==200 or c==201 then klog("【Self Profile】"..r) --{ -- "status" : "success", -- "userID" : "7496288447234540577", -- "total_favorited" : 0, -- "nickname" : "Queen❤", -- "friend_count" : 0, -- "following_count" : 0, -- "aweme_count" : 3, -- "sec_uid" : "MS4wLjABAAAAbYn7UPns52iJ_18GBbS7Io4fhFEM2oRSeBHEFyAUeASkXC4Y5p-PiNGOmz8pk106", -- "follower_count" : 0 -- } local restable = json.decode(r) SelfProfile = restable --保存本机账号信息 SelfProfile.userID if restable.status == "success" then if selects["功能"]=="任务" and uid == "nil" then klog("取得uid "..restable.userID) uid = restable.userID end if selects["功能"]=="任务" and tk有效TikTokUID(restable.userID) and (uid == restable.userID or uid == "nil") then tk确认当前账号登录成功() end ttdog = os.time() return true elseif restable.status == "timeout" and iSelf<3 then klog("timeout 10秒后重试") sys.toast("timeout 10秒后重试") sys.msleep(10000) c_fail = 0 elseif restable.status == "Login expired" then ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) klog("Login expired 需要重登录") sys.toast("Login expired 需要重登录") sys.msleep(2000) ttdog = os.time() return false elseif restable.status == "Oops, your account has been temporarily suspended." then --"Oops, your account has been temporarily suspended." klog("账号封禁 temporarily suspended") if selects["功能"] == "任务" then status_running = "forbidden" ocrlog() runid = 129.9 end return false elseif string.len(r) <10 then klog("【Self Profile】 内容为空") SelfProfile = {status="空"} --return false else klog("Profile 不识别") sys.toast("Profile 不识别",4); sys.msleep(5000) end elseif ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) then klog("自查fail + 账号status弹窗OK 需要重登录") SelfProfile.status = "Login expired" sys.toast("自查fail + 账号status弹窗OK 需要重登录") sys.msleep(2000) ttdog = os.time() return false end if selects["功能"]=="注册" then SelfProfile = {status="nil"} c_fail = c_fail +1 klog("自查fail第"..c_fail.."次 c "..tostring(c).." r "..tostring(r)) if os.time()-ttdog > t重启 then break end --注册流程 一直自查到超时 sys.toast("自查fail 第"..c_fail.."次 延迟10秒再查") sys.msleep(10*1000) elseif selects["功能"]=="任务" then SelfProfile = {status="nil"} c_fail = c_fail +1 klog("自查fail第"..c_fail.."次 c "..tostring(c).." r "..tostring(r)) if c_fail >=6 then klog("自查fail次数太多了 去还原备份") tasktable.data.appAccounts[sq_appAccounts].re闪退还原 = tasktable.data.appAccounts[sq_appAccounts].re闪退还原+1 vartk.flag闪退还原 = true return false elseif c_fail >=3 then klog("【重试】自查fail "..c_fail.."次,关闭TK 切换节点IP 重开TK 重新自查") Close_app("com.zhiliaoapp.musically") sys.msleep(5000) --VPN开启(1) Redo重检wifi_vpn() if Config_IP(ISO) then sys.msleep(math.random(10,12)*1000) else sys.msleep(500) end --Check_app("com.zhiliaoapp.musically") sys.msleep(4000) if tk重启_到视频() then iSelf = 0 else vartk.flag闪退还原 = true return false end else sys.toast("自查fail 第"..c_fail.."次 延迟30秒再查") sys.msleep(30*1000) end end if 1>2 and selects["功能"]=="任务" and iSelf >=3 then if SelfProfile.status == "nil" then klog("【重试】连续3次 Profile获取异常,关闭TK 切换IP 重开TK 重新自查") Close_app("com.zhiliaoapp.musically") sys.msleep(5000) VPN开启(1) if Config_IP(ISO) then sys.msleep(math.random(10,12)*1000) else sys.msleep(500) end --Check_app("com.zhiliaoapp.musically") sys.msleep(4000) if tk重启_到视频() then iSelf = 0 else return false end else break end end screen.unkeep() sys.msleep(100) end klog("连续"..c_fail.."次 Profile异常") sys.alert("连续"..c_fail.."次 Profile异常",4); sys.msleep(1000) ttdog = os.time() return false end function exec_SelfProfile2() --本机信息2 --Check_app("com.zhiliaoapp.musically") SelfProfile = {status="nil"} --初始化 local url = "http://127.0.0.1:8182/getSelfProfile" local iSelf = 0 local c切ip = 0 local c_fail = 0 while true do iSelf = iSelf+1 local c, h, r = http.get(url, 30) screen.keep() tk屏幕文字ocr() if c==200 or c==201 then klog("【Self Profile】"..r) --{ -- "status" : "success", -- "userID" : "7496288447234540577", -- "total_favorited" : 0, -- "nickname" : "Queen❤", -- "friend_count" : 0, -- "following_count" : 0, -- "aweme_count" : 3, -- "sec_uid" : "MS4wLjABAAAAbYn7UPns52iJ_18GBbS7Io4fhFEM2oRSeBHEFyAUeASkXC4Y5p-PiNGOmz8pk106", -- "follower_count" : 0 -- } local restable = json.decode(r) SelfProfile = restable --保存本机账号信息 SelfProfile.userID if restable.status == "success" then if selects["功能"]=="任务" and uid == "nil" then klog("取得uid "..restable.userID) uid = restable.userID end if selects["功能"]=="任务" and tk有效TikTokUID(restable.userID) and (uid == restable.userID or uid == "nil") then tk确认当前账号登录成功() end ttdog = os.time() return true elseif restable.status == "timeout" and iSelf<3 then klog("timeout 10秒后重试") sys.toast("timeout 10秒后重试") sys.msleep(10000) c_fail = 0 elseif restable.status == "Login expired" then ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) klog("Login expired 需要重登录") sys.toast("Login expired 需要重登录") sys.msleep(2000) ttdog = os.time() return false elseif restable.status == "Oops, your account has been temporarily suspended." then --"Oops, your account has been temporarily suspended." klog("账号封禁 temporarily suspended") if selects["功能"] == "任务" then status_running = "forbidden" ocrlog() runid = 129.9 end return false elseif string.len(r) <10 then klog("【Self Profile】 内容为空") SelfProfile = {status="空"} --return false else klog("Profile 不识别") sys.toast("Profile 不识别",4); sys.msleep(5000) end elseif ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) then klog("自查fail + 账号status弹窗OK 需要重登录") SelfProfile.status = "Login expired" sys.toast("自查fail + 账号status弹窗OK 需要重登录") sys.msleep(2000) ttdog = os.time() return false end if selects["功能"]=="注册" then SelfProfile = {status="nil"} c_fail = c_fail +1 klog("自查fail第"..c_fail.."次 c "..tostring(c).." r "..tostring(r)) if os.time()-ttdog > t重启 then break end --注册流程 一直自查到超时 sys.toast("自查fail 第"..c_fail.."次 延迟10秒再查") sys.msleep(10*1000) elseif selects["功能"]=="任务" then SelfProfile = {status="nil"} c_fail = c_fail +1 klog("自查fail第"..c_fail.."次 c "..tostring(c).." r "..tostring(r)) if c_fail >=6 then klog("自查fail次数太多了 去还原备份") tasktable.data.appAccounts[sq_appAccounts].re闪退还原 = tasktable.data.appAccounts[sq_appAccounts].re闪退还原+1 vartk.flag闪退还原 = true return false elseif c_fail >=3 then klog("【重试】自查fail "..c_fail.."次,关闭TK 切换节点IP 重开TK 重新自查") Close_app("com.zhiliaoapp.musically") sys.msleep(5000) --VPN开启(1) Redo重检wifi_vpn() if Config_IP(ISO) then sys.msleep(math.random(10,12)*1000) else sys.msleep(500) end --Check_app("com.zhiliaoapp.musically") sys.msleep(4000) if tk重启_到视频() then iSelf = 0 else vartk.flag闪退还原 = true return false end else sys.toast("自查fail 第"..c_fail.."次 延迟30秒再查") sys.msleep(30*1000) end end if 1>2 and selects["功能"]=="任务" and iSelf >=3 then if SelfProfile.status == "nil" then klog("【重试】连续3次 Profile获取异常,关闭TK 切换IP 重开TK 重新自查") Close_app("com.zhiliaoapp.musically") sys.msleep(5000) VPN开启(1) if Config_IP(ISO) then sys.msleep(math.random(10,12)*1000) else sys.msleep(500) end --Check_app("com.zhiliaoapp.musically") sys.msleep(4000) if tk重启_到视频() then iSelf = 0 else return false end else break end end screen.unkeep() sys.msleep(100) end klog("连续"..c_fail.."次 Profile异常") sys.alert("连续"..c_fail.."次 Profile异常",4); sys.msleep(1000) ttdog = os.time() return false end function exec_OtherProfile(suid,secuid) --素材账号uid信息 Check_app("com.zhiliaoapp.musically") local url = "http://127.0.0.1:8182/getOtherProfile?user_id="..suid.."&secUid="..secuid for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【Other Profile】"..r) --{ "status" : "success", "userID" : "7334603586997502983", "total_favorited" : 470208, "nickname" : "마카🧚‍♀️macca麻卡", "username" : "macca07x", "following_count" : 247, "follower_count" : 99816 } local restable = json.decode(r) if restable.status == "success" then OtherProfile = restable --保存素材账号信息 return true else sys.alert("Other Profile失败",4); sys.msleep(1000) end elseif i==3 then klog("连续3次 Other Profile异常") sys.alert("连续3次 Other Profile异常",4); sys.msleep(1000) else sys.msleep(2000) end end return false end function exec_followAutoClick() --关注前自动点击 local url = "http://127.0.0.1:8182/followAutoClick?user_name="..FAC_nickname.."&model=search" klog("Url_followAutoClick: "..url) for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【followAutoClick】"..FAC_nickname.."\n"..r) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then sys.msleep(10*1000) return true elseif i>=2 then sys.alert("followAutoClick fail \nuser_name: "..FAC_nickname.."\n"..r,4); sys.msleep(2000) return false else sys.msleep(1000) end elseif i==3 then klog("连续3次 followAutoClick异常 "..FAC_nickname.." c:"..c) sys.alert("连续3次 followAutoClick异常 "..FAC_nickname.." c:"..c,4); sys.msleep(1000) else sys.msleep(2000) end end return false end function exec_follow(suid, secuid) --关注 http://127.0.0.1 if string.len(suid) < 5 then klog("【follow】参数异常为空 跳过") return true end --local url = "http://127.0.0.1:8182/follow?user_id=7356953257459434514&secUid=MS4wLjABAAAAkOHP1EdhVRwW4nncEj5K1zowtUP-ruk_CwBWeXIfAIy3d0sc-emokFwNYGTM-xjk" local url = "http://127.0.0.1:8182/follow?user_id="..suid.."&sec_uid="..secuid klog("Url_follow: "..url) if 1>0 then http.get(url) return true end for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【follow】"..suid.." "..secuid.."\n"..r) --{ "status" : "success" } local restable = json.decode(r) if restable.status == "success" then sys.msleep(50) return true elseif i>=2 then sys.alert("follow失败\n\n"..r.."\n\nuid: "..suid.."\nsecUid: "..secuid,4); sys.msleep(1000) return false else sys.msleep(2000) end elseif i==3 then klog("连续3次 follow异常") sys.alert("连续3次 follow异常\n\nuid: "..suid.."\nsecUid: "..secuid,4); sys.msleep(1000) else sys.msleep(2000) end end return false end function exec_follow_scheme(suid) --关注 通过scheme if string.len(suid) < 5 then klog("【follow】参数异常为空 跳过") return true end --app.open_url("snssdk1233://user/profile/"..suid) local runidC = 0 local ttfollow = os.time()-10 local tt0 = os.time() local retry = 0 local cfollow = 0 while true do --klog(" ["..runidC.."]") screen.keep() tk屏幕文字ocr() if runidC >=1 and ff2(p个页加载中, "加载中...") then sys.msleep(1000) elseif runidC >=1 and ff2(pfollow关注, "点follow", 1) then cfollow = cfollow + 1 if cfollow>=3 then klog("连点3次follow 异常") return false end runidC = 3 elseif runidC == 3 then return true elseif runidC >= 1 and runidC <=2 and ff2(p个页Bell, "个页Bell") then runidC = 2 if os.time()-ttfollow > 3 then klog("没有 follow") if retry < 1 then runidC = 0 ttfollow = os.time()-10 tt0 = os.time() sys.msleep(1000) retry = retry+1 else return false end end elseif runidC >=1 and ff2(p弹窗Gotit蓝, "弹窗 Gotit蓝", 1) then elseif runidC >=1 and ff2(p弹窗Open, "弹窗 Open", 1) then elseif runidC >=1 and ff2(p51Notnow_a, "#弹出菜单 Not now") and ff2(p51Notnow_b, "弹出菜单 Not now", 1) then elseif runidC >=1 and ff2(p124Notnow_savelogin, "Notnow_savelogin", 1) then elseif runidC <=1 and os.time()-ttfollow > 6 then klog("【Urlscheme】"..suid) app.open_url("snssdk1233://user/profile/"..suid) sys.msleep(2000) ttfollow = os.time() runidC = 1 end if os.time() - tt0 > 10 and runidC <3 then klog("follow 操作超时") return false end screen.unkeep() sys.msleep(500) end return false end function exec_followbyJson() --关注 by taskList.Json --(selects["方式"] == "By1" or selects["方式"] == "By2") --By1 local url = "http://127.0.0.1:8182/followBatch" if selects["方式"] == "By1" then url = "http://127.0.0.1:8182/followBatch" klog("接口 "..url) elseif selects["方式"] == "By2" then url = "http://127.0.0.1:8182/followBatchSnssdk" klog("接口 "..url) end for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【followbyJson】"..r) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then --sys.msleep(2000) return true end end sys.msleep(2000) end klog("连续3次 followbyJson异常") sys.alert("连续3次 followbyJson异常",4); sys.msleep(1000) return false end function exec_followbyJson_stop() --停止 关注 by taskList.Json local url = "http://127.0.0.1:8182/stopFollowBatch" for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【stopFollowBatch】"..r) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then --sys.msleep(2000) return true end end sys.msleep(2000) end klog("连续3次 stopFollowBatch 异常") sys.alert("连续3次 stopFollowBatch 异常",4); sys.msleep(1000) return false end function exec_digg(aweme_id) --点赞 Check_app("com.zhiliaoapp.musically") --local url = "http://192.168.3.114:8182/digg?aweme_id=7452974745345084703" local url = "http://127.0.0.1:8182/digg?aweme_id="..aweme_id for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【digg】"..aweme_id.."\n"..r) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then return true else sys.alert("digg失败\n\n"..r.."\n\naweme_id: "..aweme_id,4); sys.msleep(1000) end elseif i==3 then klog("连续3次 digg异常") sys.alert("连续3次 digg异常\naweme_id: "..aweme_id,4); sys.msleep(1000) else sys.msleep(2000) end end return false end function exec_ava(picname) --头像 Check_app("com.zhiliaoapp.musically") --http://192.168.3.114:8182/updateAvataruri?avataruri=1.jpeg local url = "http://127.0.0.1:8182/updateAvataruri?avataruri="..picname for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【Ava】"..picname.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then return true else sys.alert("Ava失败\n\n"..r.."\n\npicname: "..picname,3); sys.msleep(1000) end else klog(tostring(c).." "..tostring(r)) if i==3 then klog("连续3次 Ava异常") sys.alert("连续3次 Ava异常\npicname: "..picname,4); sys.msleep(1000) else sys.msleep(2000) end end end return false end function exec_Signature(Signature) --签名 Check_app("com.zhiliaoapp.musically") --http://192.168.3.114:8182/updateSignature?signature=dog2 local url = "http://127.0.0.1:8182/updateSignature?signature="..tostring(Signature) for i=1,3 do local c, h, r = http.get(url) if c==200 then klog("【签名】"..Signature.." "..string.gsub(string.gsub(string.gsub(r, "\n", ""),"\r","")," ","")) -- { "status" : "success" } local restable = json.decode(r) if restable.status == "success" then return true else sys.alert("Signature失败\n\n"..r.."\n\n签名: "..Signature,4); sys.msleep(1000) end elseif i==3 then klog("连续3次 Signature失败异常") sys.alert("连续3次 Signature失败异常\n签名: "..Signature,4); sys.msleep(1000) else sys.msleep(2000) end end return false end function tkopenurl(url) app.eval{ bid = 'com.zhiliaoapp.musically', lua = [==[ local objc = require 'objc' dispatch_sync(dispatch_get_main_queue(), function() local u=objc.NSURL.URLWithString("]==]..url..[==[")() objc.UIApplication.sharedApplication().openURL(u)() end) ]==] } end function exec_nickname(name) --改昵称 goEditnickName("flydog") klog("[改昵称]") tkopenurl("snssdk1233://user/profile/edit") sys.msleep(5000) app.eval{ bid = 'com.zhiliaoapp.musically', lua = [==[ function isTruthy(value) if (type(value) == 'table') then if (value.target == objc.NULL) then return false else return true end else return value~=false and value~=nil and value~=0 and value~=objc.NULL end end local objc = require 'objc' dispatch_after(1000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TIKTOKProfileEditMainViewController)()) then local i=objc.NSIndexPath.indexPathForRow(0).inSection(1)() local tb=topVC.tableView() topVC.tableView(tb).didSelectRowAtIndexPath(i)() end dispatch_after(1000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.AWEProfileEditTextViewController)()) then topVC.contentTextView().setText("]==]..name..[==[")() topVC.saveButtonClicked() end dispatch_after(3000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TUXDialog)()) then local b=topVC.actionView().actionButtons().objectAtIndex(0)() b.sendActionsForControlEvents(64)() end end) end) end) ]==] } local tt0 = os.time() local tt1 = os.time() while true do screen.keep() tk屏幕文字ocr() if ff2(p601Updatename_Confirm, "弹窗 Update name, 点Confirm", 1) then elseif ff2(p318弹窗Getnotifiedof, "弹窗 Get notified of 点 Not now", 1) then elseif ff2(p318_2弹窗notifications, "弹窗 Turn on notifications 点 Not now", 1) then elseif ff2(p102足迹save点, "Viewer history 点Save", 1) then elseif os.time()-tt1 >=20 then if exec_SelfProfile() then tt1 = os.time() if SelfProfile.nickname == name then return true end else sys.msleep(4500) end elseif os.time()-tt0 >=120 then klog("exec_nickname 超时") return false else sys.msleep(4500) end screen.unkeep() sys.msleep(500) end return false end function tk视频ReuseContent弹窗() if ff2(p332弹窗ReuseContentSetting, "视频上传 Reuse of content setting 点OK", 1) then return true end local txt_l = string.lower(ocrtext or "") if string.match(txt_l, "reuse of content setting") and string.match(txt_l, "permission settings") and string.match(txt_l, "ok") then local tx, ty = math.floor(w*0.5), math.floor(h*0.923) klog("视频上传 Reuse of content setting 坐标点OK "..tx..","..ty) touch.tap(tx, ty) screen.unkeep() sys.msleep(500) return true end return false end function tk视频发布页再点Post() app.eval{ bid="com.zhiliaoapp.musically", lua=[==[ local objc = require 'objc' local ffi = require 'ffi' local function isTruthy(value) if type(value) == 'table' then return value.target ~= objc.NULL end return value ~= false and value ~= nil and value ~= 0 and value ~= objc.NULL end dispatch_sync(dispatch_get_main_queue(), function() local topVC = objc.HTSAccountUtil.topViewController() if isTruthy(topVC.isKindOfClass(objc.TTKPublishPageViewController)()) then topVC.footerView().presenter().publishButtonClicked(ffi.nullptr)() elseif isTruthy(topVC.isKindOfClass(objc.TUXDialog)()) then topVC.actionView().actionButtons().objectAtIndex(0)().sendActionsForControlEvents(64)() end end) dispatch_after(2000, dispatch_get_main_queue(), function() local topVC = objc.HTSAccountUtil.topViewController() if isTruthy(topVC.isKindOfClass(objc.TUXDialog)()) then topVC.actionView().actionButtons().objectAtIndex(0)().sendActionsForControlEvents(64)() end end) ]==] } end function exec_video(videourl,title) --发视频 uploadViedo("/private/var/mobile/Media/1ferver/lua/scripts/1.MP4","omg!") if API_videoUrl(videourl) then else return false end local runidexe = 0 local c_exec_video重试 = 0 local flag视频上传确认 = false local cReuseContent弹窗 = 0 local path = "" while true do if runidexe == 0 then --上传 runidexe = 1 cReuseContent弹窗 = 0 path = "/private/var/mobile/Media/1ferver/lua/scripts/1.MP4" app.eval{ bid="com.zhiliaoapp.musically", lua = [==[ function isTruthy(value) if (type(value) == 'table') then if (value.target == objc.NULL) then return false else return true end else return value~=false and value~=nil and value~=0 and value~=objc.NULL end end local objc = require 'objc' local ffi = require 'ffi' dispatch_sync(dispatch_get_main_queue(), function() local m= objc.class.NSFileManager.defaultManager() if isTruthy(m.fileExistsAtPath("]==]..path..[==[")())~=true then toast("文件不存在") return; end local a= objc.AWEAssetModel.alloc().initWithPath("]==]..path..[==[")() local s=objc.AWEVideoRouterEditService.alloc().init() s.startVideoEditViewControllerWithAssetModel(a).processDataBlock(ffi.nullptr).completion(ffi.nullptr)() dispatch_after(5000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TUXSheetNavigationRootController)()) then ----Privacy settings对话框 local cv=topVC.contentViewController() if isTruthy(cv.isKindOfClass(objc.TTKEditPrivacyViewController)()) then cv.postButton().sendActionsForControlEvents(64)() end end end) dispatch_after(5000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TUXSheetNavigationRootController)()) then ----Privacy settings对话框 local cv=topVC.contentViewController() if isTruthy(cv.isKindOfClass(objc.TTKEditPrivacyViewController)()) then cv.postButton().sendActionsForControlEvents(64)() end end end) dispatch_after(500, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TUXSheetNavigationRootController)()) then------------好友提示 local cv=topVC.contentViewController() if isTruthy(cv.isKindOfClass(objc.TTKPublishPrivacyViewController)()) then --toast("privacy") cv.p_postButtonClicked() end end end) dispatch_after(6000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TTKEPViewController)()) then local d=topVC.delegate() d.didClickNext("")() end if isTruthy(topVC.isKindOfClass(objc.AWEStudioVideoEditViewController)()) then --toast("下一步2") local s=topVC.transitionService() local vc=s.viewContainer() local rv=vc.bottomToolBarContainer().rootView() rv.nextButton().sendActionsForControlEvents(64)() dispatch_after(3000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TUXSheetIntroVC)()) then topVC.closeButton().sendActionsForControlEvents(64)() end end) end end) dispatch_after(10000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController(); if isTruthy(topVC.isKindOfClass(objc.TTKPublishPageViewController)()) then local f=topVC.footerView().presenter() local tb=f.tableView() local i=objc.NSIndexPath.indexPathForRow(0).inSection(0)() cell=f.tableView(tb).cellForRowAtIndexPath(i)() cell.customContentView().titleTextView().setText("]==]..title..[==[")() f.publishButtonClicked(ffi.nullptr)() end dispatch_after(2000, dispatch_get_main_queue(), function() local topVC= objc.HTSAccountUtil.topViewController() if isTruthy(topVC.isKindOfClass(objc.TUXDialog)()) then --------------post now对话框 local b=topVC.actionView().actionButtons().objectAtIndex(0)() b.sendActionsForControlEvents(64)() end end) end) end)]==] } end if runidexe == 1 then --检查上传结果 local tt0 = os.time() local tt1 = os.time() local c自查 = 0 while true do screen.keep() tk屏幕文字ocr() ttdog = os.time() if ff2(p601Updatename_Confirm, "弹窗 Update name, 点Confirm", 1) then elseif ff2(p102足迹save点, "视频上传 Viewer history 点Save", 1) then elseif ff2(p318弹窗Getnotifiedof, "弹窗 Get notified of 点 Not now", 1) then elseif ff2(p318_2弹窗notifications, "弹窗 Turn on notifications 点 Not now", 1) then elseif ff2(p320弹窗Letothersseeyou, "弹窗 Let others see you 点 Not now", 1) then elseif tk视频音乐不可用继续() then elseif ff2(p333弹窗MusicCantBeUsed, "视频上传 Music can't be used,点 Continue anyway", 1) then elseif tk视频ReuseContent弹窗() then cReuseContent弹窗 = cReuseContent弹窗 + 1 sys.msleep(1500) if cReuseContent弹窗 <= 2 then klog("Reuse of content setting 已关闭,仍在发布页则补点Post 第"..cReuseContent弹窗.."/2次") tk视频发布页再点Post() tt0 = os.time() tt1 = os.time() c自查 = 0 end elseif os.time()-tt0 >=80 or c自查>=3 then klog("exec_video 超时") runidexe = 2 c_exec_video重试 = c_exec_video重试 +1 break elseif os.time()-tt1 >=30 then if exec_SelfProfile() then tt1 = os.time()-20 c自查=c自查+1 --控制自查首次等30秒 之后间隔为10秒 if SelfProfile.aweme_count > SelfProfile_bf.aweme_count then klog("上传 exec_video 成功") flag视频上传确认 = true runidexe = 3 break end else sys.msleep(5000) end else sys.msleep(5000) end end end if runidexe == 2 then --重启tk if c_exec_video重试 == 1 then runidexe = 0 klog("关闭tk 重启tk 重新操作一次") Close_app("com.zhiliaoapp.musically") sys.msleep(1000) Check_app("com.zhiliaoapp.musically") sys.msleep(5000) else runidexe = 3 end end if runidexe == 3 then --清理环境 ttdog = os.time() klog("清理 本地视频图片") os.execute('rm -rf '..path) ttdog = os.time() clear.all_photos() ttdog = os.time() if flag视频上传确认 then return true end klog("上传 exec_video 两次均未确认成功") return false end end ttdog = os.time() klog("清理 本地视频图片") os.execute('rm -rf '..path) ttdog = os.time() clear.all_photos() ttdog = os.time() return flag视频上传确认 end function exec_获取好友列表() --获取好友列表 Check_app("com.zhiliaoapp.musically", 1) customlist = {status="nil"} --初始化 local url = "http://127.0.0.1:8182/getFriendsList?sec_uid="..SelfProfile.sec_uid for i=1,3 do klog("【exec_获取好友列表】"..i.." "..url) local c, h, r = http.get(url) if c==200 or c==201 then klog("【好友列表】"..r) --{"status" : "timeout"} --[[{ "status" : "success", "friends" : [ { "custom_id" : "meteorpc.itc", "user_id" : "7484142859760403457", "nickname" : "Laptop Terlengkap Di Indonesia", "sec_uid" : "MS4wLjABAAAAG3MdgyoCB8Crdefs24UYY_hUv5NgA3yQYKoumL0Kr3ov99YvI2ef5EMjAR26VUST" }, { "custom_id" : "hayden_5929", "user_id" : "7484166108804678677", "nickname" : "🤑hayden_🤑", "sec_uid" : "MS4wLjABAAAAGKtUAJ2mwqxmtq3uNE4KfYeMMGIsiWTj5Rb-x5vfISjI0dnsdeIRuIaY_ts88wSF" } ] }]] local restable = json.decode(r) if restable.status == "success" then customlist = restable --保存好友列表 return true elseif restable.status == "timeout" and i<3 then klog("timeout 10秒后重试") sys.toast("timeout 10秒后重试") sys.msleep(10000) elseif restable.status == "Login expired" then SelfProfile = restable klog("Login expired 需要重登录") sys.toast("Login expired 需要重登录") sys.msleep(2000) return false else sys.alert("获取好友列表失败",4); sys.msleep(1000) end elseif i==3 then klog("连续3次 获取好友列表异常") sys.alert("连续3次 获取好友列表异常",4); sys.msleep(1000) else sys.msleep(2000) end end return false end function exec_私信(suid, saywhat) --私信 Check_app("com.zhiliaoapp.musically", 1) sendTexttable = {status="nil" } if string.match(saywhat, "{emoji}") then saywhat = string.gsub(saywhat, "{emoji}", emoji[math.random(1, #emoji)]) end --local url = "http://127.0.0.1:8182/sendText?user_id="..suid.."&text="..saywhat local url = "http://127.0.0.1:8182/sendTextProcol?user_id="..suid.."&text="..saywhat -- { -- "status" : "fail", -- "checkCode" : 2, -- "checkMessage" : "{\"status_code\":7195,\"tips\":\"\",\"status_msg\":{\"msg_type\":1006,\"msg_content\":{\"tips\":\"This message may be in violation of our Community Guidelines, and has not been sent to protect our community. If you believe this was a mistake, {{1}} so we can review this along with recent messages.\",\"template\":[{\"key\":\"1\",\"name\":\"let us know\",\"action\":7,\"extra\":{\"scene\":\"sending_ban\"}}]}},\"decision_type\":\"\",\"raw_check_code\":2,\"decision_detail\":\"mtban\",\"decision_rule_id\":\"76348\"}" -- } flag私信status = false --初始化 为false 私信失败状态 --klog("Url_私信: "..url) for i=1,3 do local c, h, r = http.get(url) sys.toast("私信中 总"..#customlist.friends.." 第"..ip好友) if c==200 then klog("【私信】#"..ip好友.." "..suid.." #"..ip话术.." "..saywhat.."\n"..r) -- { "status" : "success" } sendTexttable = json.decode(r) if sendTexttable.status == "success" then vartk.c私信timeout = 0 vartk.c私信异常 = 0 ttdog = os.time() return true elseif sendTexttable.status == "fail" then if sendTexttable.checkMessage and string.match(sendTexttable.checkMessage, "7195") then klog("私信 fail 7195") ttdog = os.time() if i>=3 then flag私信status = "7195" return true end elseif sendTexttable.checkMessage and string.match(sendTexttable.checkMessage, "7289") then klog("私信 fail 7289") ttdog = os.time() flag私信status = "7289" return true elseif sendTexttable.checkCode == 0 then klog("私信 fail checkCode_0") flag私信status = "checkCode_0" break else sys.msleep(5000) end elseif sendTexttable.status == "timeout" then if i>=2 then flag私信status = "timeout" klog("私信 fail timeout 去自查") ttdog = os.time() break end sys.msleep(5000) else sys.msleep(2000) end elseif i==3 then else sys.msleep(2000) end end if flag私信status == "timeout" or flag私信status == "checkCode_0" then if vartk.c私信timeout then vartk.c私信timeout = vartk.c私信timeout + 1 if vartk.c私信timeout >=5 then klog("私信timeout 已连续5次") ttdog = os.time() return false end else vartk.c私信timeout = 1 end if exec_SelfProfile() then klog("自查正常 继续去私信下一个") return false elseif SelfProfile.status == "Login expired" then screen.unkeep() tk屏幕文字ocr() ff2(p101弹窗Account_status_OK, "弹窗账号status 点ok", 1) return true end else if vartk.c私信异常 then vartk.c私信异常 = vartk.c私信异常 + 1 if vartk.c私信timeout and vartk.c私信timeout >=3 then klog("私信异常 已连续3次") ttdog = os.time() return false end else vartk.c私信异常 = 1 end klog("连续3次 私信异常") ttdog = os.time() return false end end function sh_escape(path) -- TouchIOS 原创函数,未经 TouchIOS 许可,可以用于商业用途 path = string.gsub(path, "([ \\()<>'\"`#&*;?~$])", "\\%1") return path end function mkdir(path) -- 新建一个目录 (递归创建子目录) assert(type(path)=="string" and path~="", 'mkdir 参数异常') os.execute('mkdir -p '..sh_escape(path)) end function test() --test_http主页() --API_token_云控_test() exec_ava("1.jpeg") sys.msleep(1500) exec_Signature("dog2") end function test_http主页() local c, h, r = http.get("https://www.tiktok.com/@heipfxopnnh",10) if c == 200 then klog(res) return true end end clock校时() logfile = string.gsub(logfile0, "xxxx", os.date("!%Y%m%d-%H%M%S", os.time()+seczone)) --XXT_20250901-153920.log ui() head() clean日志文件(24) colors() canshu() if selects["功能"] == "注册" or selects["功能"] == "换绑" then VPN关闭() elseif selects["功能"] == "任务" then -- Capture the WiFi address before task VPN/proxy setup changes interfaces. Checkwifi() gateway_url = load_gateway_url_config() taskdomain = gateway_url VPN开启(1) gateway_register_until_ready() end --testtoken() os.exit() sys.msleep(1000) while true do if selects["功能"] == "注册" or selects["功能"] == "换绑" then if Config_IP() then main_注册() end elseif selects["功能"] == "任务" then main_任务() end end