记一次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

 

posted on 2018-01-12 17:31  Zing_Z  阅读(1500)  评论(0编辑  收藏  举报

导航