受同学所托,帮其抢红米手机,老是抢不到,于是就想着写个程序,多线程实时监听,虽然最终还是没抢到,但还是将程序分享给大家。(其实在排除学校网速的影响下,我真怀疑雷总到底有没有发布小米手机让大家抢,所以还是建议大家尽量不要抢小米手机,太坑!)
程序使用java写的,采用Maven构建的一个项目,采用selenium包。这里先给出平台的搭建,后续给出相应的程序代码。
1:使用Maven模板构建一个项目
切换到工作目C:\workshop下,输入
mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerator -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2:修改pom.xml
修改后的内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai</groupId>
<artifactId>NumberGenerator</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>NumberGenerator</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.53.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-htmlunit-driver</artifactId>
<version>2.20</version>
</dependency>
</dependencies>
</project>
3:cd进入project目录中:C:\\Workshop\\ NumberGenerator中输入mvn cleaninstall,然后输入mvneclipse:eclipse
这样在eclipse中# File -> Import... # General -> ExistingProjects into Workspace # Click next # 将现有工程导入eclipse中
4: 代码
以下是抢购红米note3的主页:
以下是程序的代码:
MyThread.java
package com.yiibai;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class myThread extends Thread{
private String name;
public myThread(String name){
this.name = name;
}
public void run(){
// 小米官网抢购红米note3页面
String baseurl = "http://item.mi.com/buyphone/note3";
// 小米官网登录信息
String baseurl2 = "https://account.xiaomi.com/pass/serviceLogin?callback=http%3A%2F%2Forder.mi.com%2Flogin%2Fcallback%3Ffollowup%3Dhttp%253A%252F%252Fitem.mi.com%252Fbuyphone%252Fnote3%26sign%3DZmYyZmU3NmE0NWNmMjZkYzk5YmU5ZWJjMzc2Zjg1YzNhMjY3NTJjMg%2C%2C&sid=mi_eshop";
WebElement loginElement = null;
List<WebElement> element = null;
List<WebElement> taocan = null;
WebElement btn = null;
WebDriver driver = new FirefoxDriver();
System.out.println("starting:");
driver.get(baseurl2);
driver.findElement(By.id("username")).sendKeys("13721035842"); // 输入自己小米官网登录账号
driver.findElement(By.id("pwd")).sendKeys("19910715aabb"); // 输入小米官网登录密码
driver.findElement(By.id("login-button")).click();
System.out.println(driver.getCurrentUrl());
try {
sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
driver.navigate().to(baseurl);
System.out.println("hello world!!");
element = driver.findElements(By.className("J_stepItem"));
if(element == null || element.size() == 0){
driver.close();
}
element.get(1).click(); // 选择高配版 3GB内存 + 32GB容量
element = driver.findElements(By.className("J_stepItem"));
element.get(2).click(); // 选择双网通
element = driver.findElements(By.className("J_stepItem"));
element.get(5).click(); // 选择银白色
taocan = driver.findElements(By.className("J_packageItem")); // 看是否到时间出现套餐选择
while(taocan == null || taocan.size() == 0){
taocan = driver.findElements(By.className("J_packageItem")); // 一直循环等待套餐的出现
System.out.println("listening11...." + name);
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
taocan.get(0).click(); // 等到选择第一个套餐
element = driver.findElements(By.className("btn"));
element.get(0).click(); // 点击下一步抢购按钮 等待
//driver.quit();
System.out.println(element.size());
}
}
主函数test.java
package com.yiibai;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
/**
* Hello world!
*
*/
public class test
{
public static void main( String[] args ) throws InterruptedException
{
myThread th1 = new myThread("A"); // 开启5个线程 等同于开启5个浏览器 实时监听
myThread th2 = new myThread("B");
myThread th3 = new myThread("C");
myThread th4 = new myThread("D");
myThread th5 = new myThread("E");
th1.start();
th2.start();
th3.start();
th4.start();
th5.start();
}
}
在抢购前5分钟将test.java开启,一直等待吧,祝你好运。
参考文献:
1:maven创建java项目 http://www.yiibai.com/maven/create-a-java-project-with-maven.html
2:seleniumwebdriver
http://docs.seleniumhq.org/docs/03_webdriver.jsp#setting-up-a-selenium-webdriver-project