通过python+appium实现美团果园自动化浇水

之前玩儿美团积累了许多水滴,现在想一次性用完,手动太费时,抱着学习和玩乐的态度写了个自动化浇水

  1. 打开美团,在命令行输入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}
  1. 配置相关信息(除了包名和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.登录部分涉及账号,这里就不展示了,最后看一下自动化浇水效果

自动化浇水

猜你喜欢

转载自blog.csdn.net/kldzh/article/details/126498885