案例网址: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. System.out.println("运行成功");
  49. Thread.sleep(4000);
  50. //获取抢到的G分
  51. String Ptext = driver.findElement(By.xpath("//*[@id='gz_1']/p[1]")).getText();
  52. System.out.println(Ptext);
  53.  
  54. driver.quit();
  55. System.out.println();
  56. System.out.println("重新运行。-----------这是分界线-----------");
  57. i=0;
  58. new GetNetworkTime(web);
  59. } catch (Exception e) {
  60. // TODO: handle exception
  61. System.out.println("运行错误");
  62. driver.quit();
  63. try {
  64. Thread.sleep(1000);
  65. if (i<50)
  66. {
  67. System.out.println("运行第"+(i+1)+"次");
  68. new openWeb(web);
  69. }
  70. } catch (InterruptedException e1) {
  71. // TODO Auto-generated catch block
  72. e1.printStackTrace();
  73. new GetNetworkTime(web);
  74. }
  75. }
  76.  
  77. }
  78. }

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

记一次java-selenium自动抢红包最简单案例1的更多相关文章

  1. Java使用MyEclipse构建webService简单案例

     什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过web ...

  2. 【java+selenium】网易云音乐刷累计听歌数

    背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了.当时试了下,直接一下子刷了有好几万.悲 ...

  3. (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

    selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...

  4. 《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)

    1.简介 Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件.由于现在企业和公司中Java的大部分项目都是基 ...

  5. 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)

    1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...

  6. 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  7. 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  8. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  9. 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)

    1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...

随机推荐

  1. HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】

    每篇一句 黄金的导电性最好,为什么电脑主板还是要用铜? 飞机最快,为什么还有人做火车? 清华大学最好,为什么还有人去普通学校? 因为资源都是有限的,我们现实生活中必须兼顾成本与产出的平衡 前言 上文 ...

  2. pyinstaller打包出错numpy.core.multiarray failed to import

    py原文件运行时正常,但用pyinstaller打包为exe后,在运行则报错: 这是因为cv2要求的numpy版本与你装的numpy版本不一样,导致冲突:网上很多说升级numpy,但你把numpy升的 ...

  3. CodeForces 1200F

    题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...

  4. Spring框架入门之AOP

    Spring框架入门之AOP 一.Spring AOP简单介绍 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented ...

  5. C#使用iTextSharp给PDF文件加水印

    给PDF添加水印,可以用iTextSharp. 步骤1:下载iTextSharp 步骤2:在项目中添加引用itextsharp.dll 步骤3:在程序中使用iTextSharp.text.pdf us ...

  6. .net core api服务端跨域配置

    第1步:添加包引用(.net core 2.2 已自带此包,可跳过此步骤) Install-Package Microsoft.AspNetCore.Cors 第2步:在Startup.cs文件的Co ...

  7. CFdiv2 165E. Compatible Numbers 子集枚举

    传送门 题意: 给出一个序列,输出每个数x对应的一个ans,要求ans在数列中,并且ans & x  = 0:数列的每个数小于(4e6) 思路: 这道题的方向比较难想.想到了就比较轻松了,可以 ...

  8. HDU 6346 整数规划 二分图匹配最优解

    整数规划 原来的km+hunger跑法T了, 拿了一个新的板子, 新的写法是将这原来的找新的最小的d放在了上一次的残留图上,从而减小复杂度, 但是个人还不是很理解为什么最小的d下一次出现的位置一定是这 ...

  9. Atcoder C - +/- Rectangle(思维+构造)

    题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...

  10. codeforces 161 D. Distance in Tree(树形dp)

    题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...