• 记一次java-selenium自动抢红包最简单案例1


    案例网址:http://xinyue.qq.com/act/pc/xyjf/a20170907envelopes/index.htm?ADTAG=AD_gw.home.pt.2_dyghb.20170926&atm_cl=ad&atm_pos=13256&e_code=358951

    案例介绍,一个腾讯的整点抢红包自动化。每天循环自动抢早10点整和晚上八点整的红包,此案例只有一个按钮较简单,适合入门。

    遇到的问题:

    1无法定位“抢”
    百度搜“selenium如何进入frame”

    2.程序提示缺少类

    http://www.cnblogs.com/zdfbk/p/8183167.html打包教程

    导包jar出来时报错缺少类,就是缺少包嘛,问了N个前辈,问了N个群其中很多个前辈不懂装懂,差点被带歪了(讲分布式啊,还有一个前辈远程帮忙搞还得反过来教他。—。—)。微微吐槽下。

    有着前辈(某公司主管)陪伴信心倍增,找的很仔细找了一下午各种小问题都处理过,最后发现问题定位在path的路径不对,我和前辈高兴坏了,终于找到了问题所在,但是想想不对啊,我H盘里确实有这个东西啊,如果是在别的电脑那可能会因为这个报错。不出所料,修改了之后还是报错。大失所望之后前辈陪着我找到了这就放弃了。

    最后历时2天,自己解决了。(问题能否解决在于你自身的坚持。这个很重要)原因是我少导了POI包,(eclipse这个项目没导POI包都能正常运行。。)—。—|||

     项目及包链接: https://pan.baidu.com/s/1smrTpdb 密码: 6666

    运行截图和结果

    代码展示------大牛轻喷,代码很简陋,有很多需要优化的。请指出

     1 package TengXunHongBao;
     2 
     3 //import org.openqa.selenium.*;
     4 //import org.openqa.selenium.chrome.ChromeDriver;
     5 
     6 public class mainBody {
     7 
     8     public static void main(String[] args) {
     9         // TODO Auto-generated method stub
    10         String webUrl = "http://xinyue.qq.com/act/pc/xyjf/a20170907envelopes/index.htm?ADTAG=AD_gw.home.pt.2_dyghb.20170926&atm_cl=ad&atm_pos=13256&e_code=358951";
    11         //new openWeb(webUrl);
    12         new GetNetworkTime(webUrl);
    13 
    14     }
    15 
    16 }
    mianBody.java
     1 package TengXunHongBao;
     2 
     3 //import java.sql.Driver;
     4 
     5 //import org.openqa.selenium.*;
     6 import org.openqa.selenium.By;
     7 import org.openqa.selenium.WebDriver;
     8 import org.openqa.selenium.chrome.ChromeDriver;
     9 
    10 //import com.sun.accessibility.internal.resources.accessibility;
    11 
    12 public class openWeb {
    13 
    14     int i= 0;
    15     public openWeb(String web)
    16     {
    17         i++;
    18         WebDriver driver = new ChromeDriver();
    19         //打开网址
    20         driver.get(web);
    21         //设置浏览器大小,此次设置为最大化
    22         driver.manage().window().maximize();
    23         
    24         try {
    25             Thread.sleep(2000);
    26             driver.findElement(By.linkText("[QQ登录]")).click();
    27             
    28             Thread.sleep(2000);
    29             
    30             //进入frame
    31             driver.switchTo().frame("loginIframe");
    32             Thread.sleep(2000);
    33             System.out.println("进入frame");
    34             driver.findElement(By.id("login")).findElement(By.className("face")).click();//这个可行
    35             //driver.findElement(By.className("face")).click();这个有时候会错误
    36             //driver.findElement(By.xpath("//*[@id='qlogin_list']/a[1]]")).click();
    37             System.out.println("成功登陆");
    38             //跳出frame
    39             Thread.sleep(1000);
    40             driver.switchTo().defaultContent();
    41             //点击抢
    42             Thread.sleep(2000);
    43             driver.findElement(By.id("get_red_package")).click();
    44             System.out.println("点击'抢'成功");
    45             System.out.println("成功抢到红包");
    46             Thread.sleep(1000);
    47             
    48 
    49             
    50             System.out.println("运行成功");
    51             Thread.sleep(4000);
    52             //获取抢到的G分
    53             String Ptext = driver.findElement(By.xpath("//*[@id='gz_1']/p[1]")).getText();
    54             System.out.println(Ptext);
    55             
    56             driver.quit();
    57             System.out.println();
    58             System.out.println("重新运行。-----------这是分界线-----------");
    59             i=0;
    60             new GetNetworkTime(web);
    61         } catch (Exception e) {
    62             // TODO: handle exception
    63             System.out.println("运行错误");
    64             driver.quit();
    65             try {
    66                 Thread.sleep(1000);
    67                 if (i<50)
    68                 {
    69                     System.out.println("运行第"+(i+1)+"次");
    70                     new openWeb(web);
    71                 }
    72             } catch (InterruptedException e1) {
    73                 // TODO Auto-generated catch block
    74                 e1.printStackTrace();
    75                 new GetNetworkTime(web);
    76             }
    77         }
    78 
    79     }
    80 }
    openWeb.java
      1 package TengXunHongBao;
      2 
      3 import java.io.IOException;
      4 import java.net.MalformedURLException;
      5 import java.net.URL;
      6 import java.net.URLConnection;
      7 //import java.sql.Time;
      8 import java.text.SimpleDateFormat;
      9 import java.util.Date;
     10 import java.util.Locale;
     11 
     12 //import com.sun.swing.internal.plaf.synth.resources.synth_zh_HK;
     13 
     14 public class GetNetworkTime {
     15 
     16     public GetNetworkTime(String webUrl) {
     17         System.out.println(getWebsiteDatetime(webUrl) + " [bjtime]");
     18     }
     19 
     20     private static String getWebsiteDatetime(String webUrl) {
     21         try {
     22             URL url = new URL(webUrl);// 取得资源对象
     23             URLConnection uc = url.openConnection();// 生成连接对象
     24             uc.connect();// 发出连接
     25             long ld = uc.getDate();// 读取网站日期时间
     26             Date date = new Date(ld);// 转换为标准时间对象
     27             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 输出北京时间
     28 
     29             /////////定义固定时间。fHH=11就是11点
     30             int fss = 65;
     31             int fmm = 60;
     32             int fHH = 10;
     33 
     34             SimpleDateFormat ss = new SimpleDateFormat("ss", Locale.CHINA);
     35             SimpleDateFormat mm = new SimpleDateFormat("mm", Locale.CHINA);
     36             SimpleDateFormat HH = new SimpleDateFormat("HH", Locale.CHINA);
     37 
     38             //region 老代码
     39             /*
     40             * 这个是老代码啦
     41             String sss= ss.format(date);
     42             String smm= mm.format(date);
     43             String sHH= HH.format(date);
     44             */
     45             //endregion
     46             //睡眠时间
     47             int sleepTime = 0;
     48             //转int
     49             int sss = Integer.parseInt(ss.format(date));
     50             int smm = Integer.parseInt(mm.format(date));
     51             int sHH = Integer.parseInt(HH.format(date));
     52             System.out.println("现在是北京时间"+sHH+":"+smm+"-"+sss+"秒");
     53             
     54             //判断是否比
     55             if (sHH >= 20) {
     56                 fHH = 34;
     57             } else if ((fHH - sHH) <= 0) {
     58                 fHH = 20;
     59             }else if (fHH-sHH>=0)
     60             {
     61             }
     62             else {
     63                 System.out.println("时间错误");
     64             }
     65             System.out.print("距离下一次抢红包时间"+fHH+"时还需睡眠");
     66             //小时减一
     67             if (sss == 0 && smm == 0) {
     68             } else {
     69                 fHH = fHH - 1;
     70             }
     71             //分钟减一
     72             if (sss == 0) {
     73             } else {
     74                 fmm = fmm - 1;
     75             }
     76             System.out.print((fHH - sHH)+"时"+(fmm - smm)+"分"+(fss - sss) +"秒" );
     77             sss = (fss - sss+40) * 1000;
     78             smm = (fmm - smm) * 1000 * 60;
     79             sHH = (fHH - sHH) * 1000 * 60 * 60;
     80             /*
     81             System.out.println("修改后");
     82             System.out.println("秒"+sss);
     83             System.out.println("分"+smm);
     84             System.out.println("时"+sHH);
     85             */
     86             sleepTime = sss + smm + sHH;
     87             System.out.println( "--总计毫秒数"+sleepTime);
     88             ///////
     89 
     90             Thread.sleep(sleepTime);
     91             new openWeb(webUrl);
     92 
     93             return sdf.format(date);
     94         } catch (MalformedURLException e) {
     95             e.printStackTrace();
     96         } catch (IOException e) {
     97             e.printStackTrace();
     98         } catch (InterruptedException e) {
     99             // TODO Auto-generated catch block这是因为sleep添加的
    100             e.printStackTrace();
    101         }
    102         return null;
    103     }
    104 
    105 }
    GetNetworkTime.java
  • 相关阅读:
    spring注解之@Lazy
    HttpClient之EntityUtils对象
    HTTP协议(Requset、Response)
    SpringBoot SpringSession redis SESSION
    Spring-session redis 子域名 session
    Spring Boot Servlet
    版本管理
    Spring AOP @Aspect
    Spring 事务配置的五种方式
    Spring <tx:annotation-driven>注解 JDK动态代理和CGLIB动态代理 区别。
  • 原文地址:https://www.cnblogs.com/zdfbk/p/8276933.html
Copyright © 2020-2023  润新知