Procházet zdrojové kódy

提交爬虫任务

syh před 5 roky
rodič
revize
faad4edd58
18 změnil soubory, kde provedl 503 přidání a 215 odebrání
  1. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouDailyReportLoadJob.java
  2. 3 4
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  3. 8 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  4. 10 4
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobBindTaskInfoController.java
  5. 19 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java
  6. 2 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJob.java
  7. 6 10
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJobBindTaskInfo.java
  8. 10 7
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskItem.java
  9. 6 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobMapper.java
  10. 4 3
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumTaskItemMapper.java
  11. 7 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobMapper.xml
  12. 19 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumTaskItemMapper.xml
  13. 3 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java
  14. 0 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskService.java
  15. 60 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java
  16. 0 20
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskServiceImpl.java
  17. 341 154
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java
  18. 3 3
      module-toutiao/src/main/resources/bytedance_config.properties

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouDailyReportLoadJob.java

@@ -25,8 +25,8 @@ public class KuaishouDailyReportLoadJob implements Job {
     private IKuaishouInterfaceService kuaishouInterfaceService;
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-//        Date deleteDate = DateUtils.addDay(new Date(), -2);
-//        kuaishouInterfaceService.deleteHourlyReport(deleteDate);
+        Date deleteDate = DateUtils.addDay(new Date(), -2);
+        kuaishouInterfaceService.deleteHourlyReport(deleteDate);
         Date getDate = DateUtils.addDay(new Date(), -1);
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);

+ 3 - 4
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -1,6 +1,6 @@
 package org.jeecg;
 
-import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -13,10 +13,9 @@ import org.springframework.test.context.junit4.SpringRunner;
 @Slf4j
 public class SampleTest {
     @Autowired
-    private IAppiumTaskService taskService;
+    private IAppiumJobService jobService;
     @Test
     public void testJob() {
-        taskService.runTask(1, 2);
+        jobService.loginTask(2L);
     }
-
 }

+ 8 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java

@@ -26,7 +26,14 @@ public enum StatusCode {
     USERNAME_OR_PASSWORD_ERROR("登录用户名或密码错误", -208, false),
     ACCOUNT_HAS_NO_AUTHORIZE("该用户尚未进行授权", -209, false),
     FILE_HAS_UPLOAD("文件已经上传过", 0, false),
-    COMMON_SERVER_ERROR("服务器内部错误", -102, false);
+    COMMON_SERVER_ERROR("服务器内部错误", -102, false),
+    KUAISHOU_CRAWLER_APP_EXIT("快手app异常退出", -1001, false),
+    KUAISHOU_CRAWLER_APP_ELEMENT_ERROR("快手元素异常", -1002, false),
+    KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL("此快手元素获取不到", -1003, false),
+    KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL("短信验证码未获取到", -1004, false),
+    KUAISHOU_CRAWLER_APP_ELEMENT_DETAIL_ERROR("快手元素内容异常", -1005, false),
+    KUAISHOU_CRAWLER_APP_SUCCESS("爬虫运行正常", 0, true),
+    KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true);
     private String desc;
     private int code;
     private boolean flag;

+ 10 - 4
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobBindTaskInfoController.java

@@ -31,10 +31,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 爬虫调度任务绑定信息
@@ -253,7 +250,16 @@ public class AppiumJobBindTaskInfoController {
         Map<String, Object> result = new HashMap<>();
         if (null == jobId || jobId == 0 || null == taskId || taskId == 0) {
             ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
+            return result;
         }
+        AppiumJobBindTaskInfo taskInfo = new AppiumJobBindTaskInfo();
+        taskInfo.setJobId(jobId);
+        taskInfo.setTaskId(taskId);
+        taskInfo.setStatus(1);
+        Date now = new Date();
+        taskInfo.setCreateTime(now);
+        taskInfo.setUpdateTime(now);
+        appiumJobBindTaskInfoService.save(taskInfo);
         return result;
     }
 }

+ 19 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java

@@ -1,5 +1,7 @@
 package cn.com.ctop.crawler.modules.appium.controller;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import com.alibaba.fastjson.JSON;
@@ -30,6 +32,7 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -244,4 +247,20 @@ public class AppiumJobController {
         }
         return Result.ok("文件导入失败!");
     }
+
+    @PostMapping("runTask")
+    public Map<String, Object> runTask(Long jobId, Long num) {
+        Map<String, Object> result = new HashMap<>();
+        if (null == jobId || jobId == 0 || null == num || num == 0) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
+            return result;
+        }
+        try {
+            appiumJobService.runTask(jobId, num);
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        } catch (Exception e) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SERVER_ERROR.getCode());
+        }
+        return result;
+    }
 }

+ 2 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJob.java

@@ -29,9 +29,9 @@ public class AppiumJob {
     /**
      * id
      */
-    @TableId(type = IdType.UUID)
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "id")
-    private Integer id;
+    private Long id;
     /**
      * 调度任务名称
      */

+ 6 - 10
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJobBindTaskInfo.java

@@ -1,21 +1,17 @@
 package cn.com.ctop.crawler.modules.appium.entity;
 
-import java.io.Serializable;
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+import java.util.Date;
+
 /**
  * 爬虫调度任务绑定信息
  *
@@ -33,21 +29,21 @@ public class AppiumJobBindTaskInfo {
     /**
      * id
      */
-    @TableId(type = IdType.UUID)
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "id")
-    private Integer id;
+    private Long id;
     /**
      * 任务号
      */
     @Excel(name = "任务号", width = 15)
     @ApiModelProperty(value = "任务号")
-    private Integer jobId;
+    private Long jobId;
     /**
      * 执行任务id
      */
     @Excel(name = "执行任务id", width = 15)
     @ApiModelProperty(value = "执行任务id")
-    private Integer taskId;
+    private Long taskId;
     /**
      * 任务绑定状态
      */

+ 10 - 7
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskItem.java

@@ -1,22 +1,19 @@
 package cn.com.ctop.crawler.modules.appium.entity;
 
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 任务内容表
  * @author jeecg-boot
@@ -144,6 +141,12 @@ public class AppiumTaskItem {
 	/**updateTime*/
     @ApiModelProperty(value = "updateTime")
 	private Date updateTime;
+
+    @ApiModelProperty(value = "appPackage")
+    private String appPackage;
+    @ApiModelProperty(value = "appActivity")
+    private String appActivity;
+
     @TableField(exist = false)
     private List<AppiumTaskItem> subList;
 }

+ 6 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobMapper.java

@@ -1,7 +1,11 @@
 package cn.com.ctop.crawler.modules.appium.mapper;
 
 import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 爬虫调度任务
@@ -12,4 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface AppiumJobMapper extends BaseMapper<AppiumJob> {
 
+    List<AppiumTask> getTaskByJobId(@Param(value = "jobId") Long jobId);
+
 }

+ 4 - 3
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumTaskItemMapper.java

@@ -1,10 +1,10 @@
 package cn.com.ctop.crawler.modules.appium.mapper;
 
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 任务内容表
@@ -14,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface AppiumTaskItemMapper extends BaseMapper<AppiumTaskItem> {
 
+    List<AppiumTaskItem> selectByParams(@Param(value = "package") String packageName, @Param(value = "activity") String activityName, @Param(value = "taskId") Long taskId);
 }

+ 7 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobMapper.xml

@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.crawler.modules.appium.mapper.AppiumJobMapper">
-
+    <select id="getTaskByJobId" resultType="cn.com.ctop.crawler.modules.appium.entity.AppiumTask">
+        select
+            *
+        from
+         ctop_appium_task task
+        left join ctop_appium_job_bind_task_info bindinfo on task.job_id = bindinfo.job_id
+    </select>
 </mapper>

+ 19 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumTaskItemMapper.xml

@@ -1,5 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskItemMapper">
-
-</mapper>
+    <select id="selectByParams" resultType="cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem">
+        select
+        *
+        from
+        ctop_appium_task_item
+        where
+        1=1
+        <if test="null!=package">
+            and app_package = #{package}
+        </if>
+        <if test="null!=activity">
+            and app_activity = #{activity}
+        </if>
+        <if test="null!=taskId">
+            and task_id = #{taskId}
+        </if>
+        order by id desc
+    </select>
+</mapper>

+ 3 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java

@@ -12,4 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAppiumJobService extends IService<AppiumJob> {
 
+    void runTask(Long jobId, Long num);
+
+    String loginTask(Long taskId);
 }

+ 0 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskService.java

@@ -10,8 +10,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @version V1.0
  */
 public interface IAppiumTaskService extends IService<AppiumTask> {
-    void runTaskV2(Integer taskId, Integer deviceId);
-
     /**
      * 执行任务
      *

+ 60 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java

@@ -1,11 +1,24 @@
 package cn.com.ctop.crawler.modules.appium.service.impl;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTask;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumJobMapper;
+import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskItemMapper;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
+import cn.com.ctop.crawler.modules.core.util.AppiumUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.appium.java_client.android.AndroidDriver;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 爬虫调度任务
  *
@@ -13,7 +26,54 @@ import org.springframework.stereotype.Service;
  * @version V1.0
  * @date 2019-11-14
  */
+@Slf4j
 @Service
 public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob> implements IAppiumJobService {
+    @Autowired
+    private AppiumJobMapper appiumJobMapper;
+    @Autowired
+    private AppiumTaskItemMapper taskItemMapper;
+
+    @Override
+    public void runTask(Long jobId, Long num) {
+        //TODO 需要考虑多个任务并列
+        //1:根据jobId查询所属执行task信息
+        List<AppiumTask> taskList = appiumJobMapper.getTaskByJobId(jobId);
+    }
 
+    @Override
+    public String loginTask(Long taskId) {
+        String kuaishouId = null;
+        try {
+            AppiumUtil appiumUtil = new AppiumUtil();
+            AndroidDriver androidDriver = appiumUtil.initAndroidDriver("http://39.106.184.70:4723/wd/hub", "183.131.157.66:10005", "com.smile.gifmaker", "com.yxcorp.gifshow.HomeActivity");
+//            appiumUtil.loginTask(androidDriver, null, null);
+            Map<String, Object> result = new HashMap<>();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            boolean loop = true;
+            while (loop) {
+                Integer code = (Integer) result.get("code");
+                if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+                    kuaishouId = (String) result.get("kuaishouId");
+                    androidDriver.quit();
+                    break;
+                }
+                Thread.sleep(3000L);
+                String packageName = androidDriver.getCurrentPackage();
+                String activityName = androidDriver.currentActivity();
+                System.out.println(packageName + ":" + activityName);
+                List<AppiumTaskItem> taskItems = taskItemMapper.selectByParams(packageName, activityName, taskId);
+                if (null != taskItems || taskItems.size() > 0) {
+                    for (AppiumTaskItem item : taskItems) {
+                        result = appiumUtil.runLoginTask(androidDriver, item, result);
+                    }
+                }
+                result = appiumUtil.checkMethod(androidDriver, activityName, result);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println(kuaishouId);
+        return kuaishouId;
+    }
 }

+ 0 - 20
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskServiceImpl.java

@@ -47,26 +47,6 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
             e.printStackTrace();
         }
     }
-    @Override
-    public void runTaskV2(Integer taskId, Integer deviceId) {
-        //获取当前需要执行的任务信息
-        AppiumTask task = this.getById(taskId);
-        //获取手机设备信息
-        AppiumDevice appiumDevice = iAppiumDeviceService.getById(deviceId);
-        appiumDevice.setStatus(2);
-        iAppiumDeviceService.updateById(appiumDevice);
-
-        AppiumUtil appiumUtil = new AppiumUtil();
-        try {
-            AndroidDriver androidDriver = appiumUtil.initAndroidDriver(groupControlPath + ":" + groupControlPort + "/wd/hub", appiumDevice.getIp() + ":" + appiumDevice.getPort(), task.getAppPackage(), task.getAppActivity());
-            appiumUtil.runTaskV2(androidDriver);
-        } catch (Exception e) {
-            e.printStackTrace();
-            appiumDevice.setStatus(1);
-            iAppiumDeviceService.updateById(appiumDevice);
-        }
-    }
-
 
     @Override
     public void runTask(Integer taskId, Integer deviceId) {

+ 341 - 154
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java

@@ -1,5 +1,7 @@
 package cn.com.ctop.crawler.modules.core.util;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import com.google.gson.Gson;
 import io.appium.java_client.TouchAction;
@@ -14,6 +16,7 @@ import org.openqa.selenium.remote.DesiredCapabilities;
 import java.net.URL;
 import java.time.Duration;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 public class AppiumUtil {
@@ -134,55 +137,58 @@ public class AppiumUtil {
                     break;
             }
         } else if (pkg.equals("com.smile.gifmaker")) {
+            //干扰项
             WebElement positive = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/positive");
             if (positive != null) {
                 positive.click();
             }
 
             switch (activity) {
+                //干扰项
                 case "com.yxcorp.gifshow.webview.KwaiWebViewActivity":
-//                    WebElement leftTv = getElementById(androidDriver,"com.smile.gifmaker:id/left_tv");
                     WebElement leftBtn1 = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
                     if (leftBtn1 != null) {
                         leftBtn1.click();
                     }
-//                    if (leftTv != null){
-//                        leftTv.click();
-//                    }
                     break;
+                //TODO --- 首
+                // 1页
                 case "com.yxcorp.gifshow.HomeActivity":
 
                     WebElement loginText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_text");
-                    WebElement leftText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_text");
-                    WebElement phoneLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
-                    WebElement leftBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
-                    WebElement closeBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_btn");
-                    if (closeBtn != null) {
-                        closeBtn.click();
-                        break;
-                    }
                     if (loginText != null) {
                         loginText.click();
                         break;
                     }
+                    WebElement leftText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_text");
                     if (leftText != null) {
                         leftText.click();
                         break;
                     }
+                    WebElement phoneLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
                     if (phoneLoginBtn != null) {
                         phoneLoginBtn.click();
                         break;
                     }
+                    WebElement closeBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_btn");
+                    if (closeBtn != null) {
+                        closeBtn.click();
+                        break;
+                    }
+                    WebElement leftBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
                     if (leftBtn != null) {
                         leftBtn.click();
                         Thread.sleep(5000);
+                        //查询左侧是否存在头像
                         WebElement tabAvatar = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/tab_avatar");
                         if (tabAvatar != null) {
                             tabAvatar.click();
                         } else {
+                            //不存在头像
                             Thread.sleep(3000);
                             tapPoint(androidDriver, 650, 1230);
                             Thread.sleep(3000);
+                            // 点击我的
                             tapPoint(androidDriver, 650, 1230);
                             Thread.sleep(3000);
                             tapPoint(androidDriver, 650, 400);
@@ -196,6 +202,7 @@ public class AppiumUtil {
                     }
                     tapPoint(androidDriver, 650, 400);
                     break;
+                //TODO ---- 获取快手ID
                 case "com.yxcorp.plugin.qrcode.MyQRCodeActivity":
                     WebElement kwaiId = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/kwai_id");
                     if (kwaiId != null) {
@@ -204,10 +211,12 @@ public class AppiumUtil {
                         androidDriver.quit();
                     }
                     break;
+                //TODO ----
                 case "com.yxcorp.gifshow.activity.BrowseSettingsActivity":
                     //com.smile.gifmaker:id/browse_setting_new_btn 开启大屏模式  关闭大屏模式
                     //com.smile.gifmaker:id/left_btn 返回
                     break;
+                //TODO ----登录
                 case "com.yxcorp.login.userlogin.LoginActivity":
                     WebElement loginTitleTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_title_tv");
                     WebElement loginNameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_name_et");
@@ -229,41 +238,11 @@ public class AppiumUtil {
                         nextView.click();
                     }
                     break;
+                //TODO ---- 重置密码
                 case "com.yxcorp.login.userlogin.RetrievePasswordActivity":
-                    WebElement nameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/name_et");
-                    if (nameEt != null) {
-                        Thread.sleep(5000);
-                        WebElement verifyTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_tv");
-                        if (verifyTv != null) {
-                            verifyTv.click();
-                            int i = 0;
-                            String msg = null;
-                            while (i < 20) {
-                                i++;
-                                if (msg != null) {
-                                    continue;
-                                }
-                                try {
-                                    msg = KuaimiUtil.getMessage(token, "2307", mobile);
-                                } catch (Exception e) {
-                                    System.out.println("等待" + mobile + "短信验证码");
-                                    Thread.sleep(5000);
-                                }
-                            }
-                            if (msg != null) {
-                                WebElement verifyEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_et");
-                                if (verifyEt != null) {
-                                    verifyEt.sendKeys(msg);
-                                    Thread.sleep(5000);
-                                    WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
-                                    if (confirmBtn != null) {
-                                        confirmBtn.click();
-                                    }
-                                }
-                            }
-                        }
-                    }
+
                     break;
+                //TODO
                 case "com.yxcorp.login.userlogin.ResetSelectedAccountPasswordActivity":
                     WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
                     WebElement loginPsdEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_psd_et");
@@ -306,23 +285,12 @@ public class AppiumUtil {
                         phoneOneKeyLoginBtn.click();
                     }
                     break;
+                //TODO ----
                 case "com.yxcorp.login.userlogin.CaptchaCodeLoginActivity":
                     WebElement captchaEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_et");
                     if (captchaEt != null) {
                         int i = 0;
-                        String msg = null;
-                        while (i < 20) {
-                            i++;
-                            if (msg != null) {
-                                continue;
-                            }
-                            try {
-                                msg = KuaimiUtil.getMessage(token, "2307", mobile);
-                            } catch (Exception e) {
-                                System.out.println("等待" + mobile + "短信验证码");
-                                Thread.sleep(5000);
-                            }
-                        }
+                        String msg = getMobileCaptcha(token, mobile);
                         if (msg != null) {
                             captchaEt.sendKeys(msg);
                             Thread.sleep(5000);
@@ -333,6 +301,7 @@ public class AppiumUtil {
                         }
                     }
                     break;
+                //TODO
                 case "com.yxcorp.login.userlogin.PhoneLoginV2Activity":
                     WebElement phoneEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_et");
                     if (phoneEt != null) {
@@ -343,20 +312,7 @@ public class AppiumUtil {
                         WebElement fetchCodeTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/fetch_code_tv");
                         if (fetchCodeTv != null) {
                             fetchCodeTv.click();
-                            int i = 0;
-                            String msg = null;
-                            while (i < 20) {
-                                i++;
-                                if (msg != null) {
-                                    continue;
-                                }
-                                try {
-                                    msg = KuaimiUtil.getMessage(token, "2307", mobile);
-                                } catch (Exception e) {
-                                    System.out.println("等待" + mobile + "短信验证码");
-                                    Thread.sleep(5000);
-                                }
-                            }
+                            String msg = getMobileCaptcha(token, mobile);
                             if (msg != null) {
                                 WebElement captchaCodeEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_code_et");
                                 if (captchaCodeEt != null) {
@@ -397,6 +353,238 @@ public class AppiumUtil {
         return isContinue;
     }
 
+    public Map<String, Object> checkMethod(AndroidDriver androidDriver, String activity, Map<String, Object> result) throws Exception {
+        Integer code = (Integer) result.get("code");
+        if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+            return result;
+        }
+        if ("com.yxcorp.gifshow.detail.PhotoDetailActivity".equals(activity)) {
+            WebElement element = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/back_btn");
+            element.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        if ("com.yxcorp.login.userlogin.ResetSelectedAccountPasswordActivity".equals(activity)) {
+            WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+            WebElement loginPsdEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_psd_et");
+            if (loginPsdEt != null) {
+                loginPsdEt.sendKeys("a123456");
+                Thread.sleep(5000);
+                if (confirmBtn != null) {
+                    confirmBtn.click();
+                }
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //首页
+        if ("com.yxcorp.gifshow.HomeActivity".equals(activity)) {
+            WebElement loginText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_text");
+            if (loginText != null) {
+                loginText.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement leftText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_text");
+            if (leftText != null) {
+                leftText.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement phoneLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
+            if (phoneLoginBtn != null) {
+                phoneLoginBtn.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement closeBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_btn");
+            if (closeBtn != null) {
+                closeBtn.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement leftBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
+            if (leftBtn == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/left_btn");
+                return result;
+            }
+            Thread.sleep(2000);
+            leftBtn.click();
+            Thread.sleep(2000);
+            //查询左侧是否存在头像
+            WebElement tabAvatar = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/tab_avatar");
+            if (tabAvatar != null) {
+                tabAvatar.click();
+            } else {
+                //不存在头像
+                Thread.sleep(3000);
+                tapPoint(androidDriver, 650, 1230);
+                Thread.sleep(3000);
+                // 点击我的
+                tapPoint(androidDriver, 650, 1230);
+                Thread.sleep(3000);
+                tapPoint(androidDriver, 650, 400);
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //大屏模式
+        if ("com.yxcorp.gifshow.activity.BrowseSettingsActivity".equals(activity)) {
+            //com.smile.gifmaker:id/browse_setting_new_btn 开启大屏模式  关闭大屏模式
+            //com.smile.gifmaker:id/left_btn 返回
+        }
+        //登录
+        if ("com.yxcorp.login.userlogin.LoginActivity".equals(activity)) {
+            WebElement loginTitleTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_title_tv");
+            WebElement loginNameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_name_et");
+            WebElement nextView = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/next_view");
+            if (loginTitleTv != null) {
+                System.out.println(loginTitleTv.getText());
+                if (loginTitleTv.getText().equals("输入密码")) {
+                    WebElement forgetPsdBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/forget_psd_btn");
+                    if (forgetPsdBtn != null) {
+                        forgetPsdBtn.click();
+                    }
+                }
+            }
+            if (loginNameEt != null) {
+                String token = KuaimiUtil.kuaimiLogin();
+                String mobile = KuaimiUtil.getMobile(token, "2307");
+                result.put("token", token);
+                result.put("mobile", mobile);
+                loginNameEt.sendKeys(mobile);
+                Thread.sleep(5000);
+                nextView.click();
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //重置密码
+        if ("com.yxcorp.login.userlogin.RetrievePasswordActivity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement nameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/name_et");
+            if (nameEt != null) {
+                Thread.sleep(5000);
+                WebElement verifyTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_tv");
+                if (verifyTv != null) {
+                    verifyTv.click();
+                    String msg = getMobileCaptcha(token, mobile);
+                    if (msg != null) {
+                        WebElement verifyEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_et");
+                        if (verifyEt != null) {
+                            verifyEt.sendKeys(msg);
+                            Thread.sleep(5000);
+                            WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+                            if (confirmBtn != null) {
+                                confirmBtn.click();
+                            }
+                        }
+                    }
+                }
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //验证码登录
+        if ("com.yxcorp.login.userlogin.CaptchaCodeLoginActivity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement captchaEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_et");
+            if (captchaEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_et");
+                return result;
+            }
+            String captcha = getMobileCaptcha(token, mobile);
+            if (captcha == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL.getCode());
+                log.error("短信验证码获取异常==>activity:{}", activity);
+                return result;
+            }
+            captchaEt.sendKeys(captcha);
+            Thread.sleep(5000);
+            WebElement captchaFinish = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_finish");
+            if (captchaFinish == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_finish");
+                return result;
+            }
+            captchaFinish.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //登录v2
+        if ("com.yxcorp.login.userlogin.PhoneLoginV2Activity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement phoneEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_et");
+            if (phoneEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/fetch_code_tv");
+                return result;
+            }
+            token = KuaimiUtil.kuaimiLogin();
+            mobile = KuaimiUtil.getMobile(token, "2307");
+            result.put("token", token);
+            result.put("mobile", mobile);
+            phoneEt.sendKeys(mobile);
+            Thread.sleep(5000);
+            WebElement fetchCodeTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/fetch_code_tv");
+            if (fetchCodeTv == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/fetch_code_tv");
+                return result;
+            }
+            fetchCodeTv.click();
+            String msg = getMobileCaptcha(token, mobile);
+            if (msg == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL.getCode());
+                log.error("短信验证码获取异常==>activity:{}", activity);
+                return result;
+            }
+            WebElement captchaCodeEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_code_et");
+            if (captchaCodeEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_code_et");
+                return result;
+            }
+            captchaCodeEt.sendKeys(msg);
+            Thread.sleep(5000);
+            WebElement cfmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+            if (cfmBtn == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/confirm_btn");
+                return result;
+            }
+            cfmBtn.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+        return result;
+    }
+
+    private String getMobileCaptcha(String token, String mobile) throws Exception {
+        String msg = null;
+        int i = 0;
+        while (i < 20) {
+            i++;
+            if (msg != null) {
+                continue;
+            }
+            try {
+                msg = KuaimiUtil.getMessage(token, "2307", mobile);
+            } catch (Exception e) {
+                log.info("等待{}短信验证码", mobile);
+                Thread.sleep(5000);
+            }
+        }
+        return msg;
+    }
+
+
     public WebElement getElementByType(AndroidDriver androidDriver, String type, String typeInfo) {
         WebElement element = null;
         try {
@@ -413,82 +601,6 @@ public class AppiumUtil {
         return element;
     }
 
-    public void runTaskV2(AndroidDriver androidDriver) throws Exception {
-        System.out.println(androidDriver.getCurrentPackage() + ":" + androidDriver.currentActivity());
-        //1:先打开快手
-        Thread.sleep(5000L);
-
-        System.out.println(androidDriver.currentActivity());
-        WebElement checkElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_CLASS, "android.widget.CheckedTextView");
-        if (null != checkElement) {
-            checkElement.click();
-        }
-        //2:查询《发现》按钮,然后点击
-        Thread.sleep(3000L);
-        WebElement findElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_XPATH, "//android.view.View[@content-desc=\"发现\"]");
-        if (null != findElement) {
-            findElement.click();
-        }
-        //外层轮询
-        boolean loopout = true;
-        while (loopout) {
-            //3:查询当前页面subjectList
-            List<WebElement> list = getElementsByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/subject");
-            //4:轮询subjectlist 查询广告
-            for (WebElement element : list) {
-                Thread.sleep(1000L);
-                String subjectText = element.getText();
-                //6:发现广告 点击广告
-                if (null != subjectText && subjectText.equals("广告")) {
-                    Point point = element.getLocation();
-                    tapPoint(androidDriver, point.getX() - 10, point.getY() - 10);
-                    log.info("x:{};y:{}", point.getX() - 10, point.getY() - 10);
-                    Thread.sleep(1000L);
-                    //7:上划页面 查询广告主名称
-                    swipeToUp(androidDriver);
-                    Thread.sleep(1000L);
-                    WebElement label = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/label");
-                    if (null != label) {
-                        String text = label.getText();
-                        if (null != text && text.startsWith("土巴兔")) {
-                            //表示广告筛选成功
-                            WebElement installElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text");
-                            if (null != installElement) {
-                                installElement.click();
-                                return;
-                            }
-                            System.out.println("install元素查询失败");
-                            WebElement downloadElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/ad_download_text");
-                            if (null != downloadElement) {
-                                downloadElement.click();
-                                for (int i = 0; i < 60; i++) {
-                                    Thread.sleep(10000L);
-                                    WebElement okButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/ok_button");
-                                    if (null != okButton) {
-                                        okButton.click();
-                                        break;
-                                    }
-
-                                }
-                                Thread.sleep(3000L);
-                                WebElement launchButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/launch_button");
-                                if (null != launchButton) {
-                                    launchButton.click();
-                                    break;
-                                }
-                                return;
-                            }
-                            System.out.println("download元素查询失败");
-                        }
-                    }
-                    backToMain(androidDriver);
-                    Thread.sleep(1000L);
-                }
-            }
-            swipeToUp(androidDriver);
-        }
-    }
-
     public void checkActivity(AndroidDriver androidDriver) {
         try {
             Thread.sleep(2000L);
@@ -507,7 +619,6 @@ public class AppiumUtil {
             WebElement backButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_tv");
             if (null != backButton) {
                 backButton.click();
-
             }
             //悬浮层??我知道了
             WebElement positive = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/positive");
@@ -521,7 +632,77 @@ public class AppiumUtil {
             negativeElement.click();
         }
     }
-    public void runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
+
+    public Map<String, Object> runLoginTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, Map<String, Object> result) throws Exception {
+        Integer code = (Integer) result.get("code");
+        if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+            return result;
+        }
+        Thread.sleep(1000L);
+        String findKey = appiumTaskItem.getFindKey();
+        if (findKey.equals("exit")) {
+            androidDriver.quit();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_EXIT.getCode());
+            log.error(StatusCode.KUAISHOU_CRAWLER_APP_EXIT.getDesc());
+            return result;
+        }
+        //1:获取元素信息
+        WebElement element = getElementByType(androidDriver, appiumTaskItem.getFindType(), appiumTaskItem.getFindKey());
+        if (null == element) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+            log.error("元素获取异常==>activity:{},key:{}", appiumTaskItem.getAppActivity(), "com.smile.gifmaker:id/confirm_btn");
+            return result;
+        }
+        //(1):滑动效果
+        String swipeType = appiumTaskItem.getSwapType();
+        if (null != swipeType && !"".equals(swipeType.trim())) {
+            swipeByType(androidDriver, swipeType);
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //点击效果
+        String clickType = appiumTaskItem.getClickType();
+        if (null != clickType && !"".equals(clickType)) {
+            String getText = oprateElementByType(element, clickType, androidDriver, appiumTaskItem);
+            if (null != getText && !"".equals(getText)) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_TASK_END.getCode());
+                result.put("kuaishouId", getText.replace("快手 ID:", ""));
+            } else {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            }
+            return result;
+        }
+        ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+        return result;
+    }
+
+    private String oprateElementByType(WebElement element, String clickType, AndroidDriver androidDriver, AppiumTaskItem taskItem) {
+        String getText = null;
+        if ("element".equals(clickType)) {
+            element.click();
+        } else if ("point".equals(clickType)) {
+            Point point = element.getLocation();
+            System.out.println(point.getX() + ":" + point.getY());
+            Integer x = point.getX();
+            Integer y = point.getY();
+            if (null != taskItem.getOffsiteX()) {
+                x = taskItem.getOffsiteX();
+            }
+            if (null != taskItem.getOffsiteY()) {
+                y = taskItem.getOffsiteY();
+            }
+            tapPoint(androidDriver, x, y);
+        } else if (clickType.equals("send")) {
+            String text = taskItem.getTextEqualKey();
+            element.sendKeys(text);
+        } else if (clickType.equals("text")) {
+            getText = element.getText();
+        }
+        return getText;
+    }
+
+    public String runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
+        String getText = null;
         if (appiumTaskItem != null) {
             System.out.println(new Gson().toJson(appiumTaskItem));
             if (appiumTaskItem.getWaitTime() != null && appiumTaskItem.getWaitTime() > 0) {
@@ -541,16 +722,16 @@ public class AppiumUtil {
                         if (appiumTaskItem.getTextEqualType() != null) {
                             if (appiumTaskItem.getTextEqualType().equals("eq")) {
                                 if (!element.getText().equals(appiumTaskItem.getTextEqualKey())) {
-                                    return;
+                                    return getText;
                                 }
                             } else if (appiumTaskItem.getTextEqualType().equals("neq")) {
                                 if (element.getText() == null || element.getText().equals(appiumTaskItem.getTextEqualKey())) {
-                                    return;
+                                    return getText;
                                 }
                             } else if (appiumTaskItem.getTextEqualType().equals("start")) {
                                 boolean check = checkAdvertiser(androidDriver, appiumTaskItem.getTextEqualKey());
                                 if (!check) {
-                                    return;
+                                    return getText;
                                 }
                             }
                         }
@@ -559,7 +740,13 @@ public class AppiumUtil {
                                 element.click();
                             } else if (appiumTaskItem.getClickType().equals("point")) {
                                 Point point = element.getLocation();
+                                System.out.println(point.getX() + ":" + point.getY());
                                 tapPoint(androidDriver, point.getX() + appiumTaskItem.getOffsiteX(), point.getY() + appiumTaskItem.getOffsiteY());
+                            } else if (appiumTaskItem.getClickType().equals("send")) {
+                                String text = appiumTaskItem.getTextEqualKey();
+                                element.sendKeys(text);
+                            } else if (appiumTaskItem.getClickType().equals("text")) {
+                                getText = element.getText();
                             }
                         }
                         List<AppiumTaskItem> subTask = appiumTaskItem.getSubList();
@@ -575,7 +762,6 @@ public class AppiumUtil {
                                 Thread.sleep(appiumTaskItem.getLoopRate());
                             }
                             runTask(androidDriver, appiumTaskItem, element);
-                            return;
                         }
                         //非必须执行情况下
                         if (appiumTaskItem.getClickType() != null && appiumTaskItem.getClickType().equals("point")) {
@@ -618,6 +804,7 @@ public class AppiumUtil {
                 this.isLoop = false;
             }
         }
+        return getText;
     }
 
     public void backToMain(AndroidDriver androidDriver) {

+ 3 - 3
module-toutiao/src/main/resources/bytedance_config.properties

@@ -2,8 +2,8 @@
 bytedance_appid=1635316529903624
 bytedance_secret=0c51523e90d6166418fc8421a4896808e90e26f4
 #release
-bytedance_api_url=https://ad.toutiao.com/open_api
-bytedance_auth_url=https://ad.toutiao.com/openapi
+bytedance_api_url=https://ad.oceanengine.com/open_api
+bytedance_auth_url=https://ad.oceanengine.com/openapi
 #sandbox
 #bytedance_api_url=https://test-ad.toutiao.com/open_api
 #bytedance_auth_url=https://test-ad.toutiao.com/open_api
@@ -25,4 +25,4 @@ bytedance_v2_file_image_ad=/2/file/image/ad/
 
 bytedance_v2_creative_update_status=/2/creative/update/status/
 bytedance_v2_creative_material_get=/2/creative/material/read
-bytedance_v2_creative_create_v2=/2/creative/create_v2/
+bytedance_v2_creative_create_v2=/2/creative/create_v2/