`
uule
  • 浏览: 6349131 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

抢购学习

 
阅读更多

来源:https://blog.csdn.net/liusaint1992/article/details/80753878

 

 

几个不复杂的点,但提高代码优美度还注意以下几点:

 

1、bind()绑定this 方式

this.timer = setTimeout(this.setTimer.bind(this), 30);

 

2、document.querySelector选取第一个元素

 

3、判断存在并执行的简便写法

$("#J_miAlertConfirm")[0] && $("#J_miAlertConfirm")[0].click();

 

4、each()函数中直接DOM操作click(),不用转为jQuery对象操作

$("#J_cartListBody .item-box:gt(0)").find(".J_delGoods").each(function(index, el) {

el.click();

});

 

var app = {
    timer: '',
    init: function() {
        this.setTimer();
    },
    setTimer: function() {
        this.timer && clearTimeout(this.timer);
        try {
            //这里就没有做具体哪个页面的判断了。暂时不会相互影响。

            //详情页面做的事
            this.detailFn();
            //中间页,进入购物车
            this.goCart();
            //购物车页面
            this.cartFn();
            //提交订单页面。
            this.orderFn();
        } catch (e) {
            // 还没加载出来
        }
        this.timer = setTimeout(this.setTimer.bind(this), 30);
    },
    //商品页面做的事情
    //在选项加载出来之后选择然后不断点击加入购物车。
    detailFn() {

        //关闭可能的弹窗
        $(".modal-body .btn.btn-primary:visible").each(function(index, el) {
            el.click();
        });
        $("#J_miAlertConfirm")[0] && $("#J_miAlertConfirm")[0].click();


        //版本 128g
        var levelDom = $(".J_step.pro-choose[data-index=0] ul>li").eq(1)[0];
        //颜色 白色
        var colorDom = $(".J_step.pro-choose[data-index=1] ul>li").eq(1)[0];
        //保险。不选保险了。非必要项。碎屏险可以补买的。
        // var safeDom = $(".J_service.pro-choose[data-index=0] ul>li").eq(1)[0];
        //当这几个都加载出来的时候才执行点击加入。避免购物车页面出现多项商品。
        if (levelDom && colorDom ) {
            levelDom.click();
            colorDom.click();
            // if (!$(safeDom).hasClass('active')) {
            //  safeDom.click();
            // }
            //点击加入购物车
            $("#J_buyBtnBox a")[0] && $("#J_buyBtnBox a")[0].click();
        }


    },
    //跳转到购物车页面
    goCart() {

        if ($(".J_actBox a:contains('去购物车结算')")[0]) {
            $(".J_actBox a:contains('去购物车结算')")[0].click();
            //观察到卡了一s在这里,所以加上这一句,上面那句其实就没有用了。
            location.href = 'https://static.mi.com/cart/';
            //跑一个错误,中断线程。不再生成定时器。
            throw new Error('abc');
        }
    },
    //购物车页
    //第一个页面可能发了多次加入购物车的请求。 所以在这个页面要把多余的项以及数量删除。
    cartFn() {
        //阻止弹窗,避免阻断流程
        window.alert = function(){}
        //购物车中有大于1件商品,删除
        $("#J_cartListBody .item-box:gt(0)").find(".J_delGoods").each(function(index, el) {
            el.click();
            //确认删除按钮
            $("#J_alertOk")[0] && $("#J_alertOk")[0].click();

        });
        //确认删除按钮
        $("#J_alertOk")[0] && $("#J_alertOk")[0].click();
        var interval = 0;
        //将每一条的数量减少到1。
        $(".J_minus").each(function(index, el) {
            //数量不为1就减少。
            //不能用这个while。因为input中的值是异步减少的。
            if ($(el).next('input').val() != 1) {
                interval = 200;
                el.click();
                el.click();
                el.click();
                el.click();
            }
        });
        //去结算。因为上面的数量减少操作是异步的。所以这里设置一个延时,让上面的操作生效之后再进行这个操作。
        setTimeout(function() {
            $("#J_goCheckout")[0] && $("#J_goCheckout")[0].click();
        }, interval);
        //到了购物车页面甚至下订单的页面依然可能会出现售罄的情况。这个时候不要放弃,重新刷新购物车页面继续进行操作。还是有可能刷到的。
        if ($('h3:contains(抱歉,以下商品已经失效或者暂时售罄):visible').length > 0||$('a:contains(到货提醒):visible').length > 0||$("dt:contains(选中的商品已经全部失效或者暂时售罄):visible").length>0||$("#J_goCheckout").hasClass('btn-disabled')) {
            //避免请求太过频繁。
            setTimeout(function() {
                location.href = 'https://static.mi.com/cart/';
            }, 500)

        }

    },
    //选地址,下单页面
    orderFn() {
        if (document.querySelector('.J_addressItem')) {
            document.querySelector('.J_addressItem').click();
            document.querySelector("#J_checkoutToPay") && document.querySelector("#J_checkoutToPay").click();
        }
        $("button:contains(确定):visible").click();
        $(".modal-backdrop:visible").remove();
    }
}

app.init();

 

分享到:
评论

相关推荐

    小米抢购软件 源码 学习使用

    本资源包含的是小米抢购软件的源代码,对于学习自动化脚本编写、网络请求处理以及多线程技术的开发者来说,这是一个极具价值的学习材料。下面将对其中可能涉及的知识点进行详细阐述。 1. **自动化脚本编程**:抢购...

    百川抢购 1.7.5_paymentMY_抢购_potano_百川抢购_account99a_

    《百川抢购系统:构建高效抢购环境的PHP源码解析》 ...无论是对于电商创业者还是技术开发者来说,都提供了宝贵的资源和学习素材,有助于他们在竞争激烈的市场环境中构建出更具吸引力和竞争力的在线销售平台。

    Python淘宝抢购脚本 Python实现淘宝商城自动抢购-毫秒级响应

    Python是一种广泛应用于自动化任务的高级编程语言,其语法简洁,易于学习,丰富的第三方库使其成为自动化脚本的理想选择。 Selenium是一个强大的Web自动化测试框架,可以模拟用户在浏览器中的各种操作。在淘宝抢购...

    易语言京东多线程抢购软件源码.zip

    这个源码对于想要学习易语言编程、网络编程、以及电商抢购策略的开发者来说具有很高的学习价值。通过研究源码,可以深入理解这些技术的实际应用,提升编程技能。然而,需要注意的是,使用此类软件应遵循京东的服务...

    淘宝抢购兔子搭建详细教程方法教学(含视频)

    值得注意的是,虽然这些技术可以用于学习和研究,但实际应用于电商平台抢购可能违反服务条款,甚至触犯法律法规。因此,教程中强调“仅供环境搭建学习交流,请勿用于违法行为”。学习者应遵守相关规定,合法合理地...

    js实现限时抢购

    通过学习和实践这个主题,开发者可以增强对JavaScript动态效果实现、前后端交互以及用户体验设计的理解。而博客文章中的源码和工具部分可能提供了具体的实现示例和辅助工具,帮助读者更好地理解和应用这些概念。

    软件仙女,秒杀 抢购,自动

    【标签】:“源码软件”表明这些工具可能包含了源代码,这意味着用户可以查看并修改软件的内部逻辑,对于开发者或者对编程有兴趣的人来说,这是一种学习和定制的好资源。源码的开放性也意味着用户可以根据自己的需求...

    魔法抢购助手v6.6 京东淘宝秒杀抢购软件.txt打包整理.zip

    用户可能需要通过这些信息来学习如何有效利用抢购助手提高购物效率,尤其是在热门商品的秒杀活动中获得优势,从而实现节省开支或赚取利润的目标。 【知识点详细说明】 1. **电商秒杀抢购**:秒杀是电商平台促销的...

    点击精灵 抢购软件

    这款软件的主要功能包括设置点击点、指定网站地址和设定开始时间,这些特性使得用户能够预先设定好抢购策略,避免在实际抢购过程中因手动操作不及时而错失良机。 1. 自动点击:点击精灵的核心功能是自动点击,它...

    京东抢购E语言源码

    1. 易于学习:E语言的设计理念是让用户即使没有深厚的编程背景也能快速上手,因此其语法简洁明了,便于理解和编写。 2. 动态执行:E语言支持动态执行,这意味着你可以随时修改代码并立即看到结果,这对于抢购这种...

    python 抢购京东茅台.zip

    在IT行业中,自动化工具的使用越来越普遍,尤其是在网络购物的抢购活动中,一些技术爱好者会利用编程语言来编写脚本,提高抢购的成功率。这个名为"python 抢购京东茅台.zip"的压缩包文件就是一个典型的例子,它包含...

    关于抢购倒计时的整理demo

    在`抢购倒计时的实现`这个压缩包文件中,应该包含了一个完整的实例代码,你可以查看`MainActivity.java`或其他相关类来学习具体的实现细节。这个示例可能包括了如何初始化`CountDownTimer`,如何更新UI,以及如何...

    JavaScript 抢购茅台脚本

    javascript 浏览器抢购源码,仅供学习参考

    淘宝京东限购抢购.zip

    在"淘宝京东限购抢购"的压缩包中,可能包含了完整的Python脚本、配置文件、日志文件等,供学习和交流。通过分析这些文件,可以更深入地理解如何结合Python3.7和Selenium实现特定场景的自动化操作。在实际应用时,...

    xiaomi.zip_c# 抢购_小米手机抢购_小米电视_抢购_抢购 c++

    源码是程序员编写的原始程序,包含了所有函数、类和逻辑,开发者可以借此了解整个抢购器的工作原理,对其进行学习、调试或改进。 总的来说,这个项目展示了C#在高并发、网络编程和自动化操作等领域的应用,结合C++...

    python抢购茅台程序.rar

    总的来说,这个Python抢购程序涉及到了网络爬虫、模拟用户行为、自动化测试、多线程编程等多个领域,对于想要提升这方面技能的开发者来说,是一个很好的学习资源。通过研究和理解这个程序,不仅可以了解抢购脚本的...

    小米抢购器 新版-源码

    【标题】"小米抢购器 新版-源码"指的是一个专为参与小米产品抢购而设计...总之,小米抢购器的源码是一个涵盖多种编程技术和实践的项目,对于想要学习网络爬虫、自动化测试或软件开发的程序员来说,具有很高的学习价值。

    全自动抢购小米教程下载加软件下载视频

    总的来说,这个主题涵盖了软件开发、网络爬虫、自动化控制、网络营销策略等多个IT领域的知识,对于想要学习自动化抢购或者对这方面技术感兴趣的人员来说,是一份有价值的学习资源。然而,需要注意的是,使用此类工具...

    拍拍抢购器v1.0中文绿色免费版

    《拍拍抢购器v1.0中文绿色免费版》是一款专为购物爱好者设计的网络软件,旨在提升用户在拍拍平台上的抢购效率。这款工具能够帮助用户以最快速度...同时,了解和学习相关的网络软件知识,也能为日常的网络生活带来便利。

    定时抢购AndroidDemo

    通过学习和分析这个`定时抢购AndroidDemo`,开发者可以掌握Android应用的基本架构,理解网络数据的获取与显示,以及如何实现实时倒计时功能,为构建实际的电商应用打下坚实的基础。同时,这个项目也是提升编程技巧和...

Global site tag (gtag.js) - Google Analytics