商品自动预约javascript简单脚本原理参考(仅供编程语言学习和交流)
1 说明
脚本仅供编程语言学习和交流,主要作为查找DOM元素、动态生成DOM元素、操作DOM元素的属性和样式、定时器、出发事件响应等javascript脚本语言技术的简单示例。
2 脚本代码示例
//--------------------------相关可设置参数----------------------//
//200ms一个检查间隔
var checkinterval = 3;//页面点击未跳转情况下重新点击的间隔数
var ordercheckinterval = 5;//结算页面点击提交订单后未跳转情况下重新点击的间隔数 2秒
var goclearcheckinterval = 5;//购物车页面点击结算后未跳转情况下重新点击的间隔数
var gopaycheckinterval = 15;//结算页面点击提交订单后未跳转情况下重新点击的间隔数
//var paypassword=""
//------------------------------------------------------------------//
var productInfoWebPage;//保存一开始的页面
var buyDate;
buyDate = new Date("2020-02-23 09:59:55")//一个初始化的日期,已经是过去时间,如果不设置预约时间,则立即进行检测
//---------------------------------------------//
var buyProduct = "要买的东东"
var nIntervId;
var checkcount = 0;
var clickcount = 0;
//页面类型,用来表示当前所处的页面
var WEB_PAGE = {
INIT: 0,//初始化
ORDERED: 1, //商品预约抢购页面
PRODUCTINFO: 2,//平时商品详情页面
NOTIFY: 3,//预约成功或者加购成功通知页面
SHOPPINGCART: 4,//购物车页面
CLEAR: 5,//结算页面
PAY: 6,//支付页面
OTHERS: 7//其他页面
}
var WEB_PAGE_STRING = new Array(
"初始化",
"商品预约抢购页面",
"平时商品详情页面",
"预约成功或者加购成功通知页面",
"购物车页面",
"结算页面",
"支付页面",
"其他页面",
)
//var currentPage = WEB_PAGE.INIT
function ClickActionCount() {
this.currentPage = WEB_PAGE.INIT
this.oder = 0;//点击预约抢购次数
this.addcart = 0;//点击加入购物车次数
this.gocart = 0;//点击去购物车次数
this.goclear = 0;//点击去结算次数
this.gopay = 0;//点击提交订单次数
this.odercheck = 0;//预约抢购check次数
this.gocartcheck = 0;//去购物车check次数
this.goclearcheck = 0;//购物车页面check次数
this.gopaycheck = 0;//点击提交订单check次数
this.reloadPageCount = 0;//重新刷新页面次数
}
var clickActionCount = new ClickActionCount()
function initContext() {
checkcount = 0;
clickActionCount.currentPage = WEB_PAGE.INIT
clickActionCount.oder = 0;//点击预约抢购次数
clickActionCount.addcart = 0;//点击加入购物车次数
clickActionCount.gocart = 0;//点击去购物车次数
clickActionCount.goclear = 0;//点击去结算次数
clickActionCount.gopay = 0;//点击去支付次数
clickActionCount.odercheck = 0;//预约抢购check次数
clickActionCount.gocartcheck = 0;//去购物车check次数
clickActionCount.goclearcheck = 0;//购物车页面check次数
clickActionCount.gopaycheck = 0;//点击提交订单check次数
clickActionCount.reloadPageCount = 0;//重新刷新页面次数
}
function check() {
doCheck();
/*
try{
doCheck()
}
catch(e){
console.log("发生错误了:"+e)
}
*/
}
function gotoWebPage(webPage) {
try {
parent.frames[0].location.assign(webPage)
initContext();
} catch (e) {
console.log("gotoWebPage发生错误了:" + e)
}
}
function goProductWebPage() {
gotoWebPage(productInfoWebPage)
}
//进入购物车页面
function goCartWebPage() {
//parent.frames[0].location.reload()
parent.frames[0].location.assign("https://cart.xxx.com/cart.xxx")
}
function doCheck() {
checkcount++;
console.log("============check 检测次数:" + checkcount + "===" + " 时间: " + Date() + "========");
console.log("当前页面:" + clickActionCount.currentPage);
//判断当前页面
if ($(parent.frames[0].document).find("#xxx").length == 1) {
//console.log("case:预约/抢购页面");
if (parent.frames[0].document.getElementById("btn-reservation").innerHTML.indexOf("预约") >= 0) {
console.log("case:预约/抢购页面--预约页面");
}
else if (parent.frames[0].document.getElementById("btn-reservation").innerHTML.indexOf("抢购") >= 0) {
console.log("case:预约/抢购页面--抢购页面");
}
else {
console.log("case:预约/抢购页面--其他页面");
}
clickActionCount.currentPage = WEB_PAGE.ORDERED
}
else if ($(parent.frames[0].document).find("#xxx").length == 1) {
console.log("case:产品详情页");
clickActionCount.currentPage = WEB_PAGE.PRODUCTINFO
}
else if ($(parent.frames[0].document).find("#xxx").length == 1) {
console.log("case:通知页面");
clickActionCount.currentPage = WEB_PAGE.NOTIFY
}
else if ($(parent.frames[0].document).find(".xxx").length == 1) {
console.log("case:购物车页面");
clickActionCount.currentPage = WEB_PAGE.SHOPPINGCART
}
else if ($(parent.frames[0].document).find("#xxx").length == 1) {
console.log("case:结算页面");
clickActionCount.currentPage = WEB_PAGE.CLEAR
}
else if ($(parent.frames[0].document).find("xxx").length == 1) {
console.log("case:支付页面");
clickActionCount.currentPage = WEB_PAGE.PAY
}
else {
console.log("case:其他页面");
clickActionCount.currentPage = WEB_PAGE.OTHERS
return;
}
console.log("当前页面:" + clickActionCount.currentPage.valueOf() + "," + WEB_PAGE_STRING[clickActionCount.currentPage.valueOf()]);
console.log("点击预约抢购次数:" + clickActionCount.oder);
console.log("点击加入购物车次数" + clickActionCount.addcart);
console.log("点击去购物车次数:" + clickActionCount.gocart);
console.log("点击去结算次数:" + clickActionCount.goclear);
console.log("点击提交订单次数:" + clickActionCount.gopay);
console.log("预约抢购check次数:" + clickActionCount.odercheck);
console.log("去购物车check次数:" + clickActionCount.gocartcheck);
console.log("购物车页面check次数:" + clickActionCount.goclearcheck);
console.log("点击提交订单check次数:" + clickActionCount.gopaycheck);
console.log("重新刷新页面次数:" + clickActionCount.reloadPageCount);
if (Date.now() >= buyDate) {
//时间只与抢购页面相关
//预约抢购
//console.log("设定时间已过,预约抢购开始->:");
if ($(parent.frames[0].document).find("#btn-xxx").length == 1) {
clickActionCount.odercheck++;
if (parent.frames[0].document.getElementById("btn-xxx").className.indexOf("btn-disable") >= 0)//当前被禁用状态
{
console.log("(++++++++++++当前预约抢购按钮禁用,不可操作,odercheck=" + clickActionCount.odercheck);
if ((clickActionCount.odercheck % checkinterval) == 1)//若3次检查还未跳转,则重新点击,以刷到能点击状态
{
console.log("重新刷新页面");
clickActionCount.odercheck=0
reloadWebPage();//在点击前先刷新页面,等待1秒
}
}
else//当前被启用状态
{
console.log("++++++++++++当前预约抢购按钮已启用,开始预约抢购++++++++++++");
if (clickActionCount.oder <= 0)//第一次点击
{
console.log("++++++++++++第一次点击【预约抢购】++++++++++++" + ",oder=" + clickActionCount.oder);
parent.frames[0].document.getElementById("btn-xxx").click();
clickActionCount.oder++;
}
else//已经点击
{
console.log("++++++++++++之前已经点击【预约抢购】,odercheck=" + clickActionCount.odercheck + ",oder=" + clickActionCount.oder);
if (clickActionCount.odercheck >= ordercheckinterval) {
//若次检查还未跳转,则重新点击
console.log("clickActionCount.odercheck>=" + ordercheckinterval + ",重新刷新页面");
reloadWebPage();//在点击前先刷新页面
//TODO可能这中间还需要间隔
parent.frames[0].document.getElementById("btn-xxx").click();
clickActionCount.oder++;
clickActionCount.odercheck = 0;
}
}
}
return;
}
}
else {
clickActionCount.odercheck = 0;
console.log("-----------预约抢购时间未到,还剩:" + ((buyDate - Date.now()) / 1000) + "s");
}
//平时方式-商品加入购物车
if ($(parent.frames[0].document).find("#xxx").length == 1) {
console.log("(++++++++++++正在加入购物车");
if (clickActionCount.addcart <= 0) {
//reloadWebPage();//在点击前先刷新页面
parent.frames[0].document.getElementById("xxx").click();
clickActionCount.addcart++;
}
return;
}
//去购物车结算
if ($(parent.frames[0].document).find("#xxx").length == 1) {
console.log("(++++++++++++正在去购物车结算");
if (clickActionCount.gocart <= 0) {
console.log("(++++++++++++正在去购物车结算,clickActionCount.gocart="+clickActionCount.gocart);
parent.frames[0].document.getElementById("xxx").click();
clickActionCount.gocart++
clickActionCount.gocartcheck = 0
} /*
else {
clickActionCount.gocartcheck++;
if (clickActionCount.gocartcheck >= ordercheckinterval) {//若n次检查还未跳转,则重新点击
reloadWebPage();//在点击前先刷新页面
parent.frames[0].document.getElementById("xxx").click();
clickActionCount.gocart++;
clickActionCount.gocartcheck = 0;
}
}
*/
return;
}
//去结算
if ($(parent.frames[0].document).find(".submit-xxx").length == 1) {
console.log(" ++++++++++++正在去结算");
console.log("当前全选按钮状态:" + parent.frames[0].document.getElementsByName("toggle-xxx")[0].checked);
if (clickActionCount.goclear <= 0) {
console.log(" ++++++++++++点击【去结算】");
parent.frames[0].document.getElementsByClassName("submit-btn")[0].click();
clickActionCount.goclear++;
clickActionCount.goclearcheck = 0
}
return;
}
//提交订单order-submit
if ($(parent.frames[0].document).find("#order-submit").length == 1) {
console.log("(++++++++++++正在提交订单");
//取消使用红包,可以不用输入支付密码
//全不选择
if (parent.frames[0].document.getElementById("red-packet-checkbox") != null &&
parent.frames[0].document.getElementById("red-packet-checkbox").checked == true) {
console.log("----------当前勾选了红包,取消使用红包----------");
//reloadWebPage();//在点击前先刷新页面
parent.frames[0].document.getElementById("xxx").click();
return;
}
else {
console.log("----------当前未勾选红包----------");
}
if (clickActionCount.gopay <= 0) {
//调试情况下先注释这2条
parent.frames[0].document.getElementById("xxx-submit").click();
clickActionCount.gopay++;
clickActionCount.gopaycheck = 0
}
else {
clickActionCount.gopaycheck++;
if (clickActionCount.gopaycheck >= gopaycheckinterval) {
//若3次检查还未跳转,则重新点击
reloadWebPage();//在点击前先刷新页面
parent.frames[0].document.getElementById("xxx-submit").click();
clickActionCount.gopay++;
clickActionCount.gopaycheck = 0;
}
}
return;
}
return;
}
function setBuyDate() {
//这里需要注意的是,prompt有两个参数,前面是提示的话,后面是当对话框出来后,在对话框里的默认值
var tempBuyDate = prompt("请输入抢购开始时间", "2020-02-27 00:00:00");
//如果返回的有内容
if (tempBuyDate) {
console.log("输入信息为:" + tempBuyDate);
try {
buyDate = new Date(new Date(tempBuyDate) - 5 * 1000);//这里提前2秒
console.log("输入时间有效,抢购时间已设置为(提前5秒):" + buyDate.Format("yyyy-MM-dd hh:mm:ss"));
console.log("请保持当前页面为激活页面,别切到其他页面去了");
}
catch (e) {
alert("格式不正确,请使用yyyy-MM-dd hh:mm:ss格式,精确到秒,请重新输入");
}
}
else {
console.log("未设置时间,请重新设置");
}
}
function submitOrder(){
parent.frames[0].document.getElementById("xxx-submit").click();
}
function startCheck() {
//清除计数和状态
initContext();
console.log("开启定时器......");
//0.1秒执行一次
nIntervId = setInterval("check()",400);
}
function stopCheck() {
console.log("关闭定时器......");
clearInterval(nIntervId);
}
function reloadWebPage() {
var count=0
count++;
parent.frames[0].location.reload()
console.log("---action:刷新页面,count="+count);
}
function resetWebPage(webPage) {
//这样嵌套frame后,页面内容刷新后,浏览器地址栏的地址不会变动 ,这里添加第2个frame,添加一些操作按钮
fr4me = '<frameset cols=\'80%,20%\'>\n<frame src=\'' + webPage + '\'/>\n<frame></frame>';
fr4me += '\n</frameset>';
console.log('frame内容:\n' + fr4me);
with (document) {
// 引用document对象,调用write方法写入框架,打开新窗口
write(fr4me);
// 关闭上面的窗口
void (close());
};
}
productInfoWebPage = window.location.href
resetWebPage(window.location.href);
//开始运行
//startCheck()
var fnName = function start() {
//动态添加操作按钮控件
var menu = parent.frames[1].document.createElement("div")
menu.id = "aloha_control_pannel" //设置菜单面板id
parent.frames[1].document.body.appendChild(menu) // 菜单面板添加到body内容区
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br></br></br></br></br></br></br>"
//添加按钮
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"设置时间\" id=\"aloha_setBuyDate\" type=\"button\" value=\"设置预约/抢购时间\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"开始监控\" id=\"aloha_startCheck\" type=\"button\" value=\"开始监控\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"停止监控\" id=\"aloha_stopCheck\" type=\"button\" value=\"停止监控\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br></br></br></br></br></br></br>"
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"手动刷新当前页面\" id=\"aloha_reloadWebPage\" type=\"button\" value=\"手动刷新页面\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"购物车页面\" id=\"aloha_goCartWebPage\" type=\"button\" value=\"->购物车页面\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"商品页面\" id=\"aloha_goProductWebPage\" type=\"button\" value=\"->商品页面\"></input>";
parent.frames[1].document.getElementById("aloha_control_pannel").innerHTML += "</br></br><input name=\"提交订单\" id=\"aloha_submitOrder\" type=\"button\" value=\"->提交订单\"></input>";
//设置按钮的点击事件响应
parent.frames[1].document.getElementById("aloha_setBuyDate").onclick = setBuyDate
parent.frames[1].document.getElementById("aloha_startCheck").onclick = startCheck
parent.frames[1].document.getElementById("aloha_stopCheck").onclick = stopCheck
parent.frames[1].document.getElementById("aloha_reloadWebPage").onclick = reloadWebPage
parent.frames[1].document.getElementById("aloha_goCartWebPage").onclick = goCartWebPage
parent.frames[1].document.getElementById("aloha_goProductWebPage").onclick = goProductWebPage
parent.frames[1].document.getElementById("aloha_submitOrder").onclick = submitOrder
//parent.frames[1].document.getElementById("aloha_startCheck").onclick();
}()
4 参考资料
http://zhangzeshuai.com/2017/11/03/jd-goShopping11/