# 自动化淘宝活动:欢乐币
import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWaitdef main():desired_caps = {'platformName': 'Android',  # 被测手机是安卓'platformVersion': '7',  # 手机安卓版本'deviceName': 'xxx',  # 设备名,安卓手机可以随意填写'appPackage': 'com.taobao.taobao',  # 启动APP Package名称 com.jingdong.app.mall  com.ss.android.ugc.aweme.lite'appActivity': 'com.taobao.tao.welcome.Welcome',# 启动Activity名称 .main.MainActivity  com.ss.android.ugc.aweme.main.MainActivity'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True'resetKeyboard': True,  # 执行完程序恢复原来输入法'noReset': True,  # 不要重置App'newCommandTimeout': 6000,'automationName': 'UiAutomator2'# 'app': r'd:\apk\bili.apk',}# 连接Appium Server,初始化自动化环境driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 设置缺省等待时间driver.implicitly_wait(3)# 如果有`青少年保护`界面,点击`我知道了`# iknow = driver.find_elements_by_id("text3")# if iknow:#     iknow.click()while True:try:print("定位搜索框")# 通过xpth定位搜索框search_str = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.View'driver.find_element_by_xpath(search_str).click()time.sleep(1.5)# 向输入框中发送文字driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys('欢乐造红包')time.sleep(1)driver.find_element_by_id("com.taobao.taobao:id/searchbtn").click()breakexcept:time.sleep(1)driver.back()time.sleep(9)# ss = 'com.taobao.taobao:id/decor_content_parent'# ss = 'android:id/content'# WebDriverWait(driver, 10).until(lambda x: x.find_element_by_accessibility_id(ss).is_displayed(),message='not find')# driver.tap([(939,1855)])return driverdef broswer(driver):while True:try:time.sleep(1.5)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()print("找到领欢乐币文字...")breakexcept:print("未找到领欢乐币文字...")time.sleep(2)while True:try:time.sleep(2)# 获取次数  浏览adidas旗舰店(10/15)# count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[3]/android.view.View/android.view.View[1]'# count_info = driver.find_element_by_xpath(count_str).text# 获取所有标签count_strs = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View/android.view.View/android.view.View[1]'count_infos = driver.find_elements_by_xpath(count_strs)broswer_ix = -1for broswer_ix, val in enumerate(count_infos):val_text = val.textif val_text.startswith('浏览'):print("*val_text*", val_text)broswer_ix = broswer_ixbreakelif val_text.startswith('观看'):print("浏览观看开头,重新进")# 点×再重新进cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()time.sleep(1)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()time.sleep(3)continueif broswer_ix != -1:count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(broswer_ix) + ']/android.view.View/android.view.View[1]'count_info = driver.find_element_by_xpath(count_str).textcount = (count_info.split('(')[-1]).split('/')[0]count_all = (count_info.split('(')[-1]).split('/')[-1][:-1]if int(count) < int(count_all):time.sleep(1)# 点击去完成no_complete = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(broswer_ix) + ']/android.widget.Button'driver.find_element_by_xpath(no_complete).click()time.sleep(16.5)while True:try:# 浏览完15秒显示任务完成后返回task = '(//com.uc.webview.export.WebView[@content-desc="WVUCWebView"])[1]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[1]/android.view.View'task_txt = driver.find_element_by_xpath(task).textif task_txt == '任务完成' or task_txt == '任务已经全部完成啦':print(task_txt)time.sleep(1)driver.back()time.sleep(1)breakexcept:time.sleep(1)driver.back()time.sleep(1)breakelif int(count) < int(count_all) and count_info.startswith('观看'):# 点×再重新进cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()time.sleep(1)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()time.sleep(2)continueelse:print("无需处理浏览:", count_info)breakelse:breakexcept Exception as e:print("浏览出错了,继续", e)continuedef gg(driver):time.sleep(2)print("准备处理逛一逛")while True:try:time.sleep(1)# 获取次数  浏览adidas旗舰店(10/15)# count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[4]/android.view.View/android.view.View[1]'# count_info = driver.find_element_by_xpath(count_str).text# 获取所有标签count_strs = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View/android.view.View/android.view.View[1]'count_infos = driver.find_elements_by_xpath(count_strs)for go_ix, val in enumerate(count_infos):val_text = val.textif val_text.startswith('逛一逛'):print("*val_text*", val_text)go_ix = go_ixbreakelif val_text.startswith('观看'):print("逛一逛观看开头,重新进")# 点×再重新进cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()time.sleep(1)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()time.sleep(2)continueelse:go_ix = -1print("go_ix", go_ix)if go_ix != -1:count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(go_ix) + ']/android.view.View/android.view.View[1]'count_info = driver.find_element_by_xpath(count_str).textprint(count_info)count = (count_info.split('(')[-1]).split('/')[0]count_all = (count_info.split('(')[-1]).split('/')[-1][:-1]if int(count) < int(count_all):time.sleep(1)# 点击去完成no_complete = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(go_ix) + ']/android.widget.Button'driver.find_element_by_xpath(no_complete).click()time.sleep(16.5)# 可以注释掉,然后直接返回while True:try:print("进入任务页面,等待完成。。。")# 浏览完15秒显示任务完成后返回task = '(//com.uc.webview.export.WebView[@content-desc="WVUCWebView"])[1]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[1]/android.view.View'task_txt = driver.find_element_by_xpath(task).textprint(task,task_txt)if task_txt == '任务完成' or task_txt == '任务已经全部完成啦':print(task_txt)time.sleep(1)driver.back()time.sleep(1)break# 有时候task_txt等于:关注else:time.sleep(2)driver.back()breakexcept Exception as e:print("等待任务页面出错,",e)time.sleep(2)driver.back()time.sleep(1)breakelif int(count) < int(count_all) and count_info.startswith('观看'):# 点×再重新进cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()time.sleep(1)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()time.sleep(2)continueelse:print("无需处理逛一逛:", count_info)breakelse:breakexcept Exception as e:print("逛一逛出错了,继续", e)continuedef so_so(driver):time.sleep(2)print("准备处理搜一搜")while True:try:time.sleep(1)# 获取次数  浏览adidas旗舰店(10/15)# count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[4]/android.view.View/android.view.View[1]'# count_info = driver.find_element_by_xpath(count_str).text# 获取所有标签count_strs = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View/android.view.View/android.view.View[1]'count_infos = driver.find_elements_by_xpath(count_strs)for so_ix, val in enumerate(count_infos):val_text = val.textif val_text.startswith('搜一搜'):print("*val_text*", val_text)so_ix = so_ixbreakelse:so_ix = -1print("so_ix:", so_ix)if so_ix != -1:count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(so_ix) + ']/android.view.View/android.view.View[1]'count_info = driver.find_element_by_xpath(count_str).textcount = (count_info.split('(')[-1]).split('/')[0]count_all = (count_info.split('(')[-1]).split('/')[-1][:-1]if int(count) < int(count_all):time.sleep(1)# 点击去完成no_complete = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.widget.ListView/android.view.View[' + str(so_ix) + ']/android.widget.Button'driver.find_element_by_xpath(no_complete).click()time.sleep(16.5)while True:try:# 浏览完15秒显示任务完成后返回task = '(//com.uc.webview.export.WebView[@content-desc="WVUCWebView"])[1]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[1]/android.view.View'task_txt = driver.find_element_by_xpath(task).textif task_txt == '任务完成' or task_txt == '任务已经全部完成啦':print(task_txt)time.sleep(1)driver.back()time.sleep(1)breakexcept:time.sleep(2)driver.back()time.sleep(1)breakelif int(count) < int(count_all) and count_info.startswith('观看'):# 点×再重新进cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()time.sleep(1)driver.find_element_by_android_uiautomator('new UiSelector().text("领欢乐币")').click()time.sleep(2)continueelse:print("无需处理搜一搜:", count_info)breakelse:print("搜一搜处理完成,退出循环")breakexcept Exception as e:print("搜一搜出错了,继续", e)continuetry:cha = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button'driver.find_element_by_xpath(cha).click()except Exception as e:print("尝试点×出错", e)passdef browser_gold(driver):# 获取屏幕宽高:width = driver.get_window_size()['width']  # 1080height = driver.get_window_size()['height']  # 1920time.sleep(2)# 寻找逛一逛金币页面print("准备处理逛金币,屏幕尺寸宽和高分别为:", width, height)jinbi = Falsewhile True:try:time.sleep(1.5)driver.find_element_by_android_uiautomator('new UiSelector().text("逛淘金币小镇 购物可用金币抵")').click()print("找到逛淘金币小镇 购物可用金币抵文字...")time.sleep(1)breakexcept Exception as e:print("未找到逛淘金币小镇 购物可用金币抵文字...重新获取", e)time.sleep(2)while True:try:time.sleep(5)print("点击赚金币")driver.find_element_by_android_uiautomator('new UiSelector().text("赚金币")').click()time.sleep(1)jinbi = Truebreakexcept Exception as e:print("点击赚金币未获取到,重新获取", e)time.sleep(2)LI = ['逛猜你喜欢', '逛好店领', '逛聚划算双', '逛淘金币首页', '逛淘金币抵扣', '签到领话费','好店浏览得', '逛逛大牌','看免费小','逛高比例抵扣', '逛淘金币专属', '浏览福利', '逛淘金币超值', '逛优质抵扣', '欢乐造12', '逛健康大', '天猫国际', '逛苏宁']while True:try:if jinbi and LI:# 领取奖励按钮try:rewards = driver.find_elements_by_android_uiautomator('new UiSelector().text("领取奖励")')length = len(rewards)print("可领奖励个数:", length)for _ in range(length):time.sleep(2)reward_ = driver.find_element_by_android_uiautomator('new UiSelector().text("领取奖励")')time.sleep(1)print("点击领取奖励")reward_.click()time.sleep(2)except:passtime.sleep(1)# 获取所有标签count_strs = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View[2]/android.widget.ListView/android.widget.ListView/android.view.View/android.view.View/android.view.View[1]'count_infos = driver.find_elements_by_xpath(count_strs)# 查看按钮上的文字是已完成还是去完成button_t = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View[2]/android.widget.ListView/android.widget.ListView/android.view.View/android.widget.Button'button_txts = driver.find_elements_by_xpath(button_t)for i in count_infos:print("***", i.text)#  构造字典,key是标签名,value是未完成,已完成的不添加item = {}for i in range(len(count_infos)):# 可以在这里处理已完成的:逛高比例抵扣商品(1/1)if button_txts[i].text != '已完成':item[count_infos[i].text] = button_txts[i].text# 终止外循环break_out = False# 如果有每日来访领能量这个标签,则so_ix要+1coll_engine = False# print(item)so_ix = -1li = ''for so_ix, val in enumerate(item):val_text = list(item.keys())[so_ix]print("----", so_ix, val_text, item[val])if val_text.startswith('每日来访领能量'):coll_engine = Truefor li in LI:if val_text.startswith(li):print("*val_text*", val_text, so_ix)break_out = Trueso_ix = so_ixli = libreakif break_out:breakif not break_out:LI.remove(li)print("没有匹配到需要处理的数据,退出")breakprint("so_ix:", so_ix, li)# if coll_engine:#     so_ix = so_ix + 1so_ix = so_ix + 1print("so_ix:", so_ix)if so_ix != -1:slide_up = 0count_str = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View[2]/android.widget.ListView/android.widget.ListView/android.view.View[' + str(so_ix) + ']/android.view.View/android.view.View[1]'count_info = driver.find_element_by_xpath(count_str).textcount = (count_info.split('(')[-1]).split('/')[0]count_all = (count_info.split('(')[-1]).split('/')[-1][:-1]print("count", count, count_all, count_info)if so_ix == 8 or so_ix == 7:# 向上滑动,y坐标值由大到小print("向上滑动1次")slide_up = 1elif so_ix == 9 or so_ix == 10:print("向上滑动2次")slide_up = 2# 向上滑动,y坐标值由大到小elif so_ix == 11 or so_ix == 12:print("向上滑动3次")slide_up = 3elif so_ix == 13 or so_ix == 14:print("向上滑动4次")slide_up = 4elif so_ix == 15 or so_ix == 16:print("向上滑动5次")slide_up = 5if slide_up > 0:for i in range(slide_up):time.sleep(1)driver.swipe(width / 2, height * 0.8, width / 2, height * 0.6)  # 每次滑动屏幕2个位置time.sleep(1)if int(count) < int(count_all):time.sleep(1)# no_complete = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View[2]/android.widget.ListView/android.widget.ListView/android.view.View['+str(so_ix)+']/android.widget.Button'time.sleep(1)count_str_ = '//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View[2]/android.widget.ListView/android.widget.ListView/android.view.View[' + str(so_ix) + ']/android.view.View/android.view.View[1]'count_info_ = driver.find_element_by_xpath(count_str_).textprint(count_info_, 'new UiSelector().text("' + count_info_ + '")')# 点击要处理的那一行文字driver.find_element_by_android_uiautomator('new UiSelector().text("' + count_info_ + '")').click()# driver.find_element_by_xpath(no_complete).click()time.sleep(15)if count_info.startswith("逛淘金币首页"):time.sleep(3.5)driver.back()time.sleep(2)if count_info.startswith("欢乐造12"):driver.find_element_by_android_uiautomator('new UiSelector().text("残忍离开")').click()time.sleep(2)if slide_up > 0:for i in range(slide_up + 1):# 向下滑动,y坐标值由小到大print(f"向下滑动第{i + 1}次,为了使领取奖励显示出来")driver.swipe(width / 2, height * 0.6, width / 2, height * 0.8)  # 每次滑动屏幕2个位置time.sleep(2)# 点击领取奖励try:driver.find_element_by_android_uiautomator('new UiSelector().text("领取奖励")').click()except:passelse:print("无需处理逛金币:", count_info)if slide_up > 0:for i in range(slide_up):# 向下滑动,y坐标值由小到大,因为上面已经滑动过,还需滑动回去print(f"向下滑动第{i + 1}次,为了滑动到顶部")time.sleep(1)driver.swipe(width / 2, height * 0.6, width / 2, height * 0.8)  # 每次滑动屏幕2个位置time.sleep(1)LI.remove(li)print("LI:", LI)continueelse:print("逛金币处理完成,退出循环")breakexcept Exception as e:print("逛金币出错了,继续", e)err = str(e)if "socket hang up" in err:print("app异常闪退,直接退出")breaktime.sleep(1)driver.back()time.sleep(1)continueif __name__ == '__main__':driver = main()broswer(driver)  # 浏览gg(driver)  # 逛一逛so_so(driver)  # 搜一搜# 赚金币browser_gold(driver)input('以上处理完成 Press Enter to quit..')driver.quit()

appium+python3.X 自动模拟点击APP双12活动相关推荐

  1. 脚本自动定时打开链接_双12的自动领能量脚本,傻瓜才不用

    双十一的花呗还没还完,双十二又来了,钱包算是捂不住了,那就做充充能量开红包吧! 上次写 天猫双11自动逛店领币 时,推荐过auto.js,这次还是要用的到它,并且基于auto.js创作的脚本很多,比如 ...

  2. 百度搜狗SEO快速排名模拟点击工具-提升关键词排名

    模拟关键字排名点击工具是运用全国的模拟IP来点击搜索引擎关键字,和真实的点击无异,避免搜索引擎发现,现在很多快速排名的网站,都只有这样一款工具来接单,实现快速排名,它的原理是通过搜索这个关键字,然后用 ...

  3. android 模拟自动点击,自动点击器(模拟点击)

    应用介绍 自动点击器(模拟点击)是一款点击小工具应用,免费的且操作很便利,内里全部的成倍功能,全体都是免费的,内里又有详尽的操作说明,提倡运用之前好好的阅读,有需要的下载使用. 应用说明 自动点击器A ...

  4. 测试点击屏幕次数的软件_闪电点击app下载-闪电自动点击 安卓版v1.3.2

    闪电自动点击app是一款帮助用户自动完成点击任务的应用,闪电自动点击器软件上一键设置即可自动帮你玩游戏,连续完成点击得奖励,闪电点击app内置脚本运行非常稳定. 软件介绍 闪电自动点击(快点神器)是一 ...

  5. javascript模拟点击事件--实现视频自动播放

    背景      这两年一直在做浏览器开发相关的工作,我们所做的浏览器禁用了视频自动播放功能,以实现视频预加载功能:浏览器在视频播放时为了实现视频秒开效果(就是一点击页面里的播放按钮就立即开始播放,而不 ...

  6. python手机自动点击_通过电脑,模拟点击手机屏幕 /手机自动点击,刷金币?

    1.手机用数据线连接电脑 2.利用ADB工具配置好路径,然后电脑和手机安装好360手机管家或者其他的可以连接手机的软件(可以安装手机驱动). 3.打开手机usb调试(下面是手机和电脑连接后,电脑端显示 ...

  7. Python+APPIUM+模拟器实现自动看网课

    Python+APPIUM+模拟器实现自动看网课 本文主要使用Python以及APPUIM编写脚本实现超星APP自动看课的功能.关于APPIUM的配置请看新手入门--APPIUM的环境配置以及连接夜神 ...

  8. python+appium 实现抖音自动化点击滑动

    引言 本篇文章环境配置是又臭又长,想直接看代码的老铁,可以直接跳到后边 所需环境 python 这里我用的是3.6 appium 所需要的环境配置: jdk1.8.0 android sdk 模拟器: ...

  9. 全面超越Appium,使用Airtest超快速开发App爬虫,你会吗?

    全面超越Appium,使用Airtest超快速开发App爬虫 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你 ...

最新文章

  1. R语言与数据分析(2)-R语言简介
  2. linux中deb怎样安装
  3. Opera在本博客的发文方法,fedora8下
  4. shell技巧之以逆序形式打印行
  5. SAP WM模块常用T-code
  6. windows下eclipse调试hadoop详解
  7. git clone加速(github加速)
  8. Photoshop插件-奥顿效果(梦幻柔焦)-脚本开发-PS插件
  9. 抖音SEO优化源码,抖音搜索排名系统,矩阵同步分发。
  10. SHT30温湿度传感器工作原理
  11. 简单个人网页设计 静态HTML动物主题网页 DW个人网站模板 简单宠物网页作品代码 个人网页制作 个人网页Dreamweaver设计与实现
  12. 大厂Java八股文面试真题汇总,2022秋招必备,面试不慌
  13. 【Excel】某列数据有效性根据另外一列数据有效性进行动态更改
  14. 采用云原生架构:架构演进和成熟度
  15. Es6常见面试题必看!
  16. Java/Flex/.Net 三国演绎 之 关公战秦琼
  17. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物医院管理系统fy9ez
  18. Java 实现 word 文档的在线签字盖章功能
  19. 秉火429笔记之十 EXTI-外部中断/事件
  20. 去哪儿网一面:工厂方法模式

热门文章

  1. python 网络字节序转换_网络字节序
  2. AutoCAD模型空间多视口之叠加视口应用
  3. 常见网络编程面试题以及答案(网络面试30题)
  4. Windows虚拟内存配置
  5. 按年份、月份查询SQL语句
  6. 简述 Java 的反射机制及其应用场景
  7. 让博客同时使用Gcore CDN、天御云CDN和Cloudflare CDN(可以自选IP)
  8. docker容器启动失败查看日志
  9. 如果你需要我回答你的问题
  10. mysql默认索引_mysql的索引