记一次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
运行截图和结果
代码展示------大牛轻喷,代码很简陋,有很多需要优化的。请指出
- 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的更多相关文章
- Java使用MyEclipse构建webService简单案例
什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过web ...
- 【java+selenium】网易云音乐刷累计听歌数
背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了.当时试了下,直接一下子刷了有好几万.悲 ...
- (java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出
selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以 ...
- 《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)
1.简介 Apache Maven是一个软件项目管理和综合工具.基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件.由于现在企业和公司中Java的大部分项目都是基 ...
- 《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容, ...
- 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
随机推荐
- HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】
每篇一句 黄金的导电性最好,为什么电脑主板还是要用铜? 飞机最快,为什么还有人做火车? 清华大学最好,为什么还有人去普通学校? 因为资源都是有限的,我们现实生活中必须兼顾成本与产出的平衡 前言 上文 ...
- pyinstaller打包出错numpy.core.multiarray failed to import
py原文件运行时正常,但用pyinstaller打包为exe后,在运行则报错: 这是因为cv2要求的numpy版本与你装的numpy版本不一样,导致冲突:网上很多说升级numpy,但你把numpy升的 ...
- CodeForces 1200F
题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...
- Spring框架入门之AOP
Spring框架入门之AOP 一.Spring AOP简单介绍 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented ...
- C#使用iTextSharp给PDF文件加水印
给PDF添加水印,可以用iTextSharp. 步骤1:下载iTextSharp 步骤2:在项目中添加引用itextsharp.dll 步骤3:在程序中使用iTextSharp.text.pdf us ...
- .net core api服务端跨域配置
第1步:添加包引用(.net core 2.2 已自带此包,可跳过此步骤) Install-Package Microsoft.AspNetCore.Cors 第2步:在Startup.cs文件的Co ...
- CFdiv2 165E. Compatible Numbers 子集枚举
传送门 题意: 给出一个序列,输出每个数x对应的一个ans,要求ans在数列中,并且ans & x = 0:数列的每个数小于(4e6) 思路: 这道题的方向比较难想.想到了就比较轻松了,可以 ...
- HDU 6346 整数规划 二分图匹配最优解
整数规划 原来的km+hunger跑法T了, 拿了一个新的板子, 新的写法是将这原来的找新的最小的d放在了上一次的残留图上,从而减小复杂度, 但是个人还不是很理解为什么最小的d下一次出现的位置一定是这 ...
- Atcoder C - +/- Rectangle(思维+构造)
题目链接:http://agc016.contest.atcoder.jp/tasks/agc016_c 题解:挺简单的构造,很容易想到的构造方法就是(h*w)的小矩阵里其他值赋值为1,最后一个赋值为 ...
- codeforces 161 D. Distance in Tree(树形dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意:给出一个树,问树上点到点的距离为k的一共有几个. 一道简单的树形dp,算是一个基础题. 设 ...