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

运行截图和结果

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

 package TengXunHongBao;

 //import org.openqa.selenium.*;
//import org.openqa.selenium.chrome.ChromeDriver; public class mainBody { public static void main(String[] args) {
// TODO Auto-generated method stub
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";
//new openWeb(webUrl);
new GetNetworkTime(webUrl); } }

mianBody.java

 package TengXunHongBao;

 //import java.sql.Driver;

 //import org.openqa.selenium.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; //import com.sun.accessibility.internal.resources.accessibility; public class openWeb { int i= 0;
public openWeb(String web)
{
i++;
WebDriver driver = new ChromeDriver();
//打开网址
driver.get(web);
//设置浏览器大小,此次设置为最大化
driver.manage().window().maximize(); try {
Thread.sleep(2000);
driver.findElement(By.linkText("[QQ登录]")).click(); Thread.sleep(2000); //进入frame
driver.switchTo().frame("loginIframe");
Thread.sleep(2000);
System.out.println("进入frame");
driver.findElement(By.id("login")).findElement(By.className("face")).click();//这个可行
//driver.findElement(By.className("face")).click();这个有时候会错误
//driver.findElement(By.xpath("//*[@id='qlogin_list']/a[1]]")).click();
System.out.println("成功登陆");
//跳出frame
Thread.sleep(1000);
driver.switchTo().defaultContent();
//点击抢
Thread.sleep(2000);
driver.findElement(By.id("get_red_package")).click();
System.out.println("点击'抢'成功");
System.out.println("成功抢到红包");
Thread.sleep(1000); System.out.println("运行成功");
Thread.sleep(4000);
//获取抢到的G分
String Ptext = driver.findElement(By.xpath("//*[@id='gz_1']/p[1]")).getText();
System.out.println(Ptext); driver.quit();
System.out.println();
System.out.println("重新运行。-----------这是分界线-----------");
i=0;
new GetNetworkTime(web);
} catch (Exception e) {
// TODO: handle exception
System.out.println("运行错误");
driver.quit();
try {
Thread.sleep(1000);
if (i<50)
{
System.out.println("运行第"+(i+1)+"次");
new openWeb(web);
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
new GetNetworkTime(web);
}
} }
}

openWeb.java

 package TengXunHongBao;

 import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
//import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale; //import com.sun.swing.internal.plaf.synth.resources.synth_zh_HK; public class GetNetworkTime { public GetNetworkTime(String webUrl) {
System.out.println(getWebsiteDatetime(webUrl) + " [bjtime]");
} private static String getWebsiteDatetime(String webUrl) {
try {
URL url = new URL(webUrl);// 取得资源对象
URLConnection uc = url.openConnection();// 生成连接对象
uc.connect();// 发出连接
long ld = uc.getDate();// 读取网站日期时间
Date date = new Date(ld);// 转换为标准时间对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 输出北京时间 /////////定义固定时间。fHH=11就是11点
int fss = 65;
int fmm = 60;
int fHH = 10; SimpleDateFormat ss = new SimpleDateFormat("ss", Locale.CHINA);
SimpleDateFormat mm = new SimpleDateFormat("mm", Locale.CHINA);
SimpleDateFormat HH = new SimpleDateFormat("HH", Locale.CHINA); //region 老代码
/*
* 这个是老代码啦
String sss= ss.format(date);
String smm= mm.format(date);
String sHH= HH.format(date);
*/
//endregion
//睡眠时间
int sleepTime = 0;
//转int
int sss = Integer.parseInt(ss.format(date));
int smm = Integer.parseInt(mm.format(date));
int sHH = Integer.parseInt(HH.format(date));
System.out.println("现在是北京时间"+sHH+":"+smm+"-"+sss+"秒"); //判断是否比
if (sHH >= 20) {
fHH = 34;
} else if ((fHH - sHH) <= 0) {
fHH = 20;
}else if (fHH-sHH>=0)
{
}
else {
System.out.println("时间错误");
}
System.out.print("距离下一次抢红包时间"+fHH+"时还需睡眠");
//小时减一
if (sss == 0 && smm == 0) {
} else {
fHH = fHH - 1;
}
//分钟减一
if (sss == 0) {
} else {
fmm = fmm - 1;
}
System.out.print((fHH - sHH)+"时"+(fmm - smm)+"分"+(fss - sss) +"秒" );
sss = (fss - sss+40) * 1000;
smm = (fmm - smm) * 1000 * 60;
sHH = (fHH - sHH) * 1000 * 60 * 60;
/*
System.out.println("修改后");
System.out.println("秒"+sss);
System.out.println("分"+smm);
System.out.println("时"+sHH);
*/
sleepTime = sss + smm + sHH;
System.out.println( "--总计毫秒数"+sleepTime);
/////// Thread.sleep(sleepTime);
new openWeb(webUrl); return sdf.format(date);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block这是因为sleep添加的
e.printStackTrace();
}
return null;
} }

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. java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

  2. Postman系列五:Postman中电商网站cookie、token检验与参数传递实战

    一:Postman中电商网站cookie实战 Postman接口请求使用cookie两种方式: 1.直接在header(头域)中添加cookie,适用于已知请求cookie头域的情况 2.使用Post ...

  3. SpringCloud阶段总结

    学习时间:8.15 -- 8.29 学习目标:了解SpringCloud常见组件的使用 学习方式: 输入:视频+博客+开源项目代码参考 输出:调试代码+写博客输出 组件列表 服务注册:Eureka 客 ...

  4. 设计模式(C#)——01单例模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       为什么要学习设计模式呢?我以前也思考过很多次这个问题,现在也还困惑.为什么我最后还是选择了学设计模式呢?因为在游戏中 ...

  5. ES5新增数组的一些方法

    1.Array.indexof(value1,value2) Tip:用于返回某个数组或字符串中规定字符或者字符串的位置. (1)当Array.indexof(value1);里面只有一个值的时候,表 ...

  6. 使用Springboot Cache做简单缓存

    使用Springboot Cache做简单缓存 1.简单介绍 ​ 当我们需要展示数据的时候,后台会根据需要从服务器中获取数据,但是频繁的请求数据库会对服务造成压力,于是我们引入了缓存这个概念. ​ 当 ...

  7. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

  8. CF - 1108 E 枚举上界+线段树维护

    题目传送门 枚举每个点作为最大值的那个点.然后既然是作为最大值出现的话,那么这个点就是不需要被减去的,因为如果最小值也在这个区间内的话,2者都减去1,对答案没有影响,如果是最小值不出现在这个区间内的话 ...

  9. yzoj 1201数字三角形3题解

    题意 如下图所示为一个数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大.约定: (1)每一步可沿直线向下或右 ...

  10. Oracle数据库之七 多表查询

    七.多表查询 ​ 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. ​ 而从多表查询开始就正式进入到了复杂查询部 ...