案例网址: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 }

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 }

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 }