商品自动预约javascript简单脚本原理参考

商品自动预约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/

猜你喜欢

转载自blog.csdn.net/skytering/article/details/104548147