说明

本实例可以监控聚划算的抢购button,在聚划算整点聚的时间到达时自己主动弹开页面(URL自定义)。

能够自己定义监控持续分钟数,同一时候还能够通过多线程加快刷新速度。

源代码

package com.itechzero.pricemonitor;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* PriceMonitor.java
*
* @author Techzero
* @Email techzero@163.com
* @Time 2014-5-21 下午1:24:30
*/
class MyThread extends Thread {
public void run() {
try {
// 此处參数为监控持续分钟数
PriceMonitor.monitorButton(10);
} catch (Exception e) {
e.printStackTrace();
}
}
}; public class PriceMonitor {
// 监控的商品URL
private static String URL = "http://detail.ju.taobao.com/home.htm? spm=608.2214381.3.1.AdPEjn&item_id=38260927591&id=10000002781939"; // 监视按钮
public static void monitorButton(int lastMinute) {
int nowMinute = Integer.parseInt(new SimpleDateFormat("mm").format(new Date()));
int endMinute = Integer.parseInt(new SimpleDateFormat("mm").format(new Date())) + lastMinute;
while (nowMinute < endMinute) {
nowMinute = Integer.parseInt(new SimpleDateFormat("mm").format(new Date()));
String result[] = getCurrentButtonAndForm(URL, "gb2312").split(",");
// 当前按钮状态
String currentButton = result[0];
// 立即抢 表单
//String form = result[1];
String nowTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(nowTime + " - 如今按钮是 " + currentButton); if (currentButton == "立即抢" || currentButton.equals("立即抢") || currentButton == "还有机会" || currentButton.equals("还有机会")) {
System.out.println("赶紧下单! ");
try {
java.awt.Desktop.getDesktop().browse(new URI(URL));
} catch (Exception e) {
e.printStackTrace();
}
//doPost(form);
break;
} else if (currentButton == "卖光了" || currentButton.equals("卖光了") || currentButton.equals("已结束") || currentButton.equals("已结束")) {
System.out.println("下次再试吧。");
break;
} else {
System.out.println("还没開始呢,再等等吧! ");
}
}
} // 获取当前按钮状态
public static String getCurrentButtonAndForm(String url, String encoding) {
if (url == null || "".equals(url.trim()))
return null;
String buttonState = "";
StringBuffer content = new StringBuffer();
boolean formFlag = false;
try {
// 新建URL对象
URL u = new URL(url);
InputStream is = new BufferedInputStream(u.openStream());
InputStreamReader theHTML = new InputStreamReader(is, encoding != null ? encoding : "gb2312");
BufferedReader br = new BufferedReader(theHTML);
String s = "";
while ((s = br.readLine()) != null) {
if (s.indexOf("<input type=\"submit\" class=\"buyaction J_BuySubmit\" title=\"立即抢\" value=\"立即抢\"/>") != -1) {
buttonState = "立即抢";
} else if (s.indexOf("<a href=\"#\" class=\"extra notice J_BuyButtonSub\">开团提醒</a>") != -1) {
buttonState = "开团提醒";
} else if (s.indexOf("<div class=\"main-box chance \">") != -1) {
buttonState = "还有机会";
} else if (s.indexOf("<span class=\"out floatright\">卖光了...</span>") != -1) {
buttonState = "卖光了";
} else if (s.indexOf("<span class=\"out floatright\">已结束...</span>") != -1) {
buttonState = "已结束";
}
if (s.indexOf("<form class=\"J_BuySubForm\" data-ccb=\"0\" data-ques=\"0\" action") != -1) {
content.append(s + "\r\n");
formFlag = true;
}
if (formFlag == true) {
if (s.indexOf("<input name=\'_tb_token_\' type=\'hidden\' value") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("<input type=\"hidden\" name=\"_input_charset\" value") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("<input type=\"hidden\" name=\"itemId\" value") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("<input type=\"hidden\" name=\"id\" value") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("<input type=\"hidden\" name=\"tgType\" value") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("<input type=\"submit\" class=\"buyaction J_BuySubmit\"") != -1) {
content.append(s + "\r\n");
}
if (s.indexOf("</form>") != -1) {
content.append(s + "\r\n");
}
}
if (s.indexOf("<div class=\"time-banner\">") != -1) {
break;
}
}
br.close();
} catch (Exception e) {
System.err.println(e);
return "Open URL Error";
}
return buttonState + "," + content;
} // 提交表单
public static String doPost(String form) {
StringBuffer content = new StringBuffer();
try {
URLConnection connection = new URL(URL).openConnection();
connection.setDoOutput(true);
OutputStreamWriter os = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
os.write(form);
os.flush();
os.close();
InputStream is = connection.getInputStream();
InputStreamReader theHTML = new InputStreamReader(is);
BufferedReader br = new BufferedReader(theHTML);
String s = "";
while ((s = br.readLine()) != null) {
content.append(s + "\r\n");
}
} catch (Exception e) {
e.printStackTrace();
}
// 返回提交表单后返回的页面内容
return content.toString();
} // 登录
public static void doLogin(String username, String password) {
String form = "<form id=\"J_StaticForm\" action=\"https://login.taobao.com/member/login.jhtml\" method=\"post\" autocomplete=\"on\"><input type=\"text\" name=\"TPL_username\" id=\"TPL_username_1\" value=\"" + username + "\"><input type=\"password\" name=\"TPL_password\" id=\"TPL_password_1\" value=\"" + password + "\"><input type=\"hidden\" id=\"J_TPL_redirect_url\" name=\"TPL_redirect_url\" value=\"http://www.taobao.com/? spm=a2107.1.1000340.1.AL2Mpn\"><button type=\"submit\" id=\"J_SubmitStatic\">登 录</button></form>";
doPost(form);
} public static void main(String[] args) {
//doLogin();
// new MyThread().start();
// new MyThread().start();
// new MyThread().start();
// new MyThread().start();
// new MyThread().start();
// new MyThread().start();
// new MyThread().start();
new MyThread().start();
}
}

Java 实现 淘宝秒杀 聚划算 自己主动提醒 源代码的更多相关文章

  1. Python 实现 淘宝秒杀 聚划算 自己主动提醒 源代码

    说明 本实施例可以监视一起购买的成本button,当警报济济一堂花费时间整点到达(音频文件自定义位置)而自己主动跳出页面(URL习惯). 同一时候还能够通过命令行參数自己定义刷新间隔时间(默认0.1s ...

  2. 利用Selenium+java实现淘宝自动结算购物车商品(附源代码)

    转载请声明原文地址! 本次的主题是利用selenium+java实现结算购买购物车中的商品. 话不多说,本次首先要注意的是谷歌浏览器的版本,浏览器使用的驱动版本,selenium的jar包版本.   ...

  3. Python实现淘宝秒杀聚划算自动提醒源码

    快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时发出提醒(音频文件自己定义位置)并自动弹开页面(URL自己定义 ...

  4. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--Schema模式

    淘宝数据库OceanBase SQL编译器部分 源代码阅读--Schema模式 什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们能够能够把Data ...

  5. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成物理查询计划

    SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理运行计划. 前两个步骤请參见我的博客<<淘宝数据库OceanBase SQL编译器部分 源代码阅读--解析SQL语法树>& ...

  6. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划

    淘宝数据库OceanBase SQL编译器部分 源代码阅读--生成逻辑计划 SQL编译解析三部曲分为:构建语法树.生成逻辑计划.指定物理运行计划. 第一步骤,在我的上一篇博客淘宝数据库OceanBas ...

  7. 淘宝数据库OceanBase SQL编译器部分 源代码阅读--解析SQL语法树

    OceanBase是阿里巴巴集团自主研发的可扩展的关系型数据库,实现了跨行跨表的事务,支持数千亿条记录.数百TB数据上的SQL操作. 在阿里巴巴集团下,OceanBase数据库支持了多个重要业务的数据 ...

  8. Python 实现毫秒级淘宝、京东、天猫等秒杀抢购脚本

    本篇文章主要介绍了Python 通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,也可以抢聚划算的商品. 该思路可运 ...

  9. 淘宝客知道这几个ID,收入将会提高50%

    基础问题天天说,天天有人问.这篇文章写点基础的.特别对新手的帮助会很大哦. 1,PID,做淘宝客不知道PID,赚到钱也会被冻结. 如何手动获取PID 2,单品ID,淘宝商品的唯一识别编号,和身份证一样 ...

随机推荐

  1. PERL学习之模式匹配

    一.简介   模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def.其用法如结合函数split将字符串用某模式分成多个单词:@array = split(/ /, $line); ...

  2. perl中foreach(二)

    本文和大家重点讨论一下Perl foreach命令的用法,Perl foreach循环中控制变量的值会被Perl自动保存和恢复.当循环进行时,是没有办法改变其值的.循环结束时,变量的值会回到循环开始前 ...

  3. 【STL初步】不定长数组:vector + 集合:set + 映射:map

    一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...

  4. 入门人工智能的首选语言为什么会是Python?

    为何人工智能(AI)首选Python?当你读完这篇文章就会明白了.为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python ...

  5. mysql主从复制延时判断+脚本检查

    在生产环境中,主从复制常常会有复制延迟的现象,主要是master是并发的写,而slave是单线程的应用relay log,所以会出现复制延时,在MySQL 5.6版本中有了基于库的多线程复制.还有Ma ...

  6. Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017)

    昨晚打得小号,虽然很菜,可是还是涨了些rating A. Arpa and a research in Mexican wave time limit per test 1 second memory ...

  7. 九度oj 题目1491:求1和2的个数

    题目描述: 给定正整数N,函数F(N)表示小于等于N的自然数中1和2的个数之和,例如:1,2,3,4,5,6,7,8,9,10序列中1和2的个数之和为3,因此F(10)=3.输入N,求F(N)的值,1 ...

  8. BZOJ 3749: [POI2015]Łasuchy【动态规划】

    Description 圆桌上摆放着n份食物,围成一圈,第i份食物所含热量为c[i]. 相邻两份食物之间坐着一个人,共有n个人.每个人有两种选择,吃自己左边或者右边的食物.如果两个人选择了同一份食物, ...

  9. toolbarlite随笔之插件的闭包写法

    toolbarlite这个东西至今没搞懂是什么玩意.因为除了源代码我实在是找不到除了toolbar之外的任何关于toolbarlite的东西了.不知道toolbarlite是不是toolbar的子集, ...

  10. NOJ 1111 保险箱的密码 【大红】 [区间dp]

    传送门 保险箱的密码 [大红] 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 118            测 ...