之前玩儿美团积累了许多水滴,现在想一次性用完,手动太费时,抱着学习和玩乐的态度写了个自动化浇水
- 打开美团,在命令行输入adb shell dumpsys window | findstr mCurrentFocus,可获取包名和activity
C:\Users\mmm>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{687f65d u0 com.sankuai.meituan/com.meituan.android.pt.homepage.activity.MainActivity}
- 配置相关信息(除了包名和activity不同,其他都一样,这里就不贴代码了),在common写一个关闭协议和弹窗的判断,非首次进入会没有弹窗
# 协议同意复选框
def check_agreeBtn(self):
logging.info("======check_agreeBtn======")
try:
agreeBtn = self.driver.find_element(*self.agree)
except NoSuchElementException:
logging.info("no_agreeBtn")
else:
agreeBtn.click()
# 位置获取弹窗
def check_pop_window(self):
logging.info("======pop_window======")
try:
pop_window = self.driver.find_element(*self.no_reminder)
close_window_button = self.driver.find_element(*self.close_window)
except NoSuchElementException:
logging.info("no_pop_window")
logging.info("close_window_button")
else:
pop_window.click()
close_window_button.click()
3.登录的case,美团可能特意做了限制,通过uiautomatorview无法获取部分的页面元素,可获取的用了ID定位,无法获取的元素用了最不推荐的定位方法“坐标定位”;
class LogIn(Common):
password_login = (By.ID, 'com.sankuai.meituan:id/user_password_login') # 密码登录
input_phone = (By.ID, 'com.sankuai.meituan:id/passport_mobile_phone') # 输入手机号
input_password = (By.ID, 'com.sankuai.meituan:id/edit_password') # 输入密码
check_agree = (By.ID, 'com.sankuai.meituan:id/passport_account_checkbox') # 协议复选框
ok_button = (By.ID, 'com.sankuai.meituan:id/login_button') # 确定按钮
# 登录
def Log_in(self, phone, password, *loc):
logging.info('======check_agreeBtn======')
self.check_agreeBtn() # 点击同意
self.check_pop_window() # 关闭获取位置权限弹窗
logging.info("=====login======")
self.driver.tap([(900, 2244), (1048, 2244)], 500) # 点击立即登录按钮
4.登录账号和密码使用数据驱动,保障安全性和后期修改账号密码更便捷
logging.info("=====password_login======")
self.driver.find_element(*self.password_login).click() # 选择密码登录
self.driver.find_element(*self.input_phone).send_keys(phone) # 输入手机号
self.driver.find_element(*self.input_password).send_keys(password) # 输入密码
self.driver.find_element(*self.check_agree).click() # 协议复选框
self.driver.find_element(*self.ok_button).click() # 确定按钮
5.浇水方法和前面一样,无法定位的用坐标定位,增加一个重复浇水的动作。第一次写坐标定位点击循环,以为和普通的循环一样,但总是报错。后搜索资料解决了这个问题,需要把坐标写在bat文件,通过打开操作来实现点击,但这样写有一个弊端,每打开一次,桌面就会闪现类似于dos命令窗口,暂时还没得到解决,希望知道的大佬在下方评论区指点指点
def watering(self):
path = r'D:/meituan_ui/dianji.bat'
for i in range(1, 20):
sleep(2)
os.startfile(path)
# dianji.bat文件内容为:adb shell input tap 950 1990 (后面两数字为坐标)
6.登录部分涉及账号,这里就不展示了,最后看一下自动化浇水效果
自动化浇水