Esempio n. 1
0
    def jd_buy(self):
        # self.method:
        # 0:自动全选购物车
        # 1:用户自主选择要购买的商品
        # 2:用户输入宝贝链接
        self.logger.info("开始抢购商品,抢购模式为:" + str(self.method) + ",设定时间为:" + self.set_time)
        # 自动全选购物车
        if self.method == 0:
            # 打开京东购物车
            self.browser.get("https://cart.jd.com/cart_index/")
            # 等待打开购物车
            time.sleep(2)
            while True:
                try:
                    # 找到全选按钮并点击
                    if self.browser.find_element_by_class_name("cart-checkbox"):
                        self.browser.find_element_by_class_name("cart-checkbox").click()
                        break
                except:
                    pass
                    # print("[{}] 未找到全选按钮".format(time_func.get_time()))
                    # time.sleep(0.1)
            self.auto_pay()

        # 用户自主选择要购买的商品
        elif self.method == 1:
            # 打开京东购物车
            self.browser.get("https://cart.jd.com/cart_index/")
            # 等待打开购物车(找到购物车中独有”全选“元素,判定为打开)
            time.sleep(2)
            # 此处无法判断用户何时选择完毕,选择等待10s为用户选择完毕时间
            print("[{}] 请手动勾选需购买的物品".format(time_func.get_time()))
            time.sleep(10)
            self.auto_pay()

        # 用户输入宝贝链接
        elif self.method == 2:
            # 检查给入商品链接是否为合法淘宝链接
            if "jd" in self.goods_url:
                try:
                    # 打开指定商品链接
                    self.browser.get(self.goods_url)
                    time.sleep(2)
                    # 等待勾选抢购的商品型号
                    print("[{}] 请尽快勾选所需物品型号".format(time_func.get_time()))
                    time.sleep(5)
                    # 京东要先加入购物车
                    if self.browser.find_element_by_link_text("加入购物车"):
                        self.browser.find_element_by_link_text("加入购物车").click()
                    time.sleep(0.5)
                    self.auto_pay()
                except:
                    print("[{}] 无法打开指定链接".format(time_func.get_time()))
                    self.logger.info("无法打开指定链接,抢购失败")
            else:
                print("[{}] 链接非法,请输入合法淘宝网商品链接".format(time_func.get_time()))
                self.logger.info("给入链接非法,抢购失败")
Esempio n. 2
0
 def login(self):
     """打开浏览器并登录"""
     self.browser.get(self.url)
     if self.browser.find_element_by_link_text("亲,请登录"):
         self.browser.find_element_by_link_text("亲,请登录").click()
         print("[{}] 请扫码登录".format(time_func.get_time()))
     # 淘宝登录后”亲,请登录“元素依然在,但会增加用户名元素,通过检查用户名元素来判断是否成功登录
     while True:
         try:
             if self.browser.find_element_by_link_text(self.tb_id):
                 print("[{}] 登录成功".format(time_func.get_time()))
                 break
             time.sleep(0.3)
         except:
             pass
Esempio n. 3
0
 def login(self):
     """打开浏览器并登录"""
     self.browser.get(self.url)
     if self.browser.find_element_by_link_text("你好,请登录"):
         self.browser.find_element_by_link_text("你好,请登录").click()
         print("[{}] 请扫码登录".format(time_func.get_time()))
     # 京东登录后”你好,请登录“元素会消失,也会增加用户名元素,通过检查用户名元素来判断是否成功登录
     while True:
         try:
             if self.browser.find_element_by_class_name("nickname"):
                 print("[{}] 登录成功".format(time_func.get_time()))
                 break
             time.sleep(0.3)
         except:
             pass
Esempio n. 4
0
    def tb_buy(self):
        # self.method:
        # 0:自动全选购物车
        # 1:用户自主选择要购买的商品
        # 2:用户输入宝贝链接
        self.logger.info("开始抢购商品,抢购模式为:" + str(self.method) + ",设定时间为:" +
                         self.set_time)
        # 自动全选购物车
        if self.method == 0:
            # 打开淘宝购物车
            self.browser.get("https://cart.taobao.com/cart.htm")
            # 等待打开购物车
            time.sleep(2)
            while True:
                try:
                    # 找到全选按钮并点击
                    if self.browser.find_element_by_id("J_SelectAll1"):
                        self.browser.find_element_by_id("J_SelectAll1").click()
                        time.sleep(0.5)
                        break
                except:
                    pass
                    # print("[{}] 未找到全选按钮".format(time_func.get_time()))
                    # time.sleep(0.1)
            self.auto_pay()

        # 用户自主选择要购买的商品
        elif self.method == 1:
            # 打开淘宝购物车
            self.browser.get("https://cart.taobao.com/cart.htm")
            # 等待打开购物车(找到购物车中独有”全选“元素,判定为打开)
            time.sleep(2)
            # 此处无法判断用户何时选择完毕,选择等待10s为用户选择完毕时间
            print("[{}] 请手动勾选需购买的物品".format(time_func.get_time()))
            time.sleep(10)
            self.auto_pay()

        # 用户输入宝贝链接
        elif self.method == 2:
            # 检查给入商品链接是否为合法淘宝链接
            if "taobao" in self.goods_url or "tmall" in self.goods_url:
                try:
                    # 打开指定商品链接
                    self.browser.get(self.goods_url)
                    time.sleep(2)
                    # 等待勾选抢购的商品型号
                    print("[{}] 请尽快勾选所需物品型号".format(time_func.get_time()))
                    time.sleep(5)
                    # 不停检查当前时间是否已达到抢购开始时间,若达到,则开始抢购
                    while True:
                        # now_time为datetime获取到的本地时间,精确到毫秒
                        now_time = datetime.datetime.now().strftime(
                            "%Y-%m-%d %H:%M:%S.%f")
                        # server_time为利用request从淘宝服务器返回的包头获取到的服务器时间,精确到秒
                        server_time = time_func.get_tb_server_time()
                        # 如果结算超时,则判定为抢购失败
                        if time_func.time_out(set_time=self.set_time,
                                              now_time=now_time):
                            print(
                                "[{}][{}] <---------------结算超时,抢购失败--------------->"
                                .format(now_time, server_time))
                            # 将超时记录记入日志
                            self.logger.info(now_time + "商品结算超时,抢购失败")
                            if self.email:
                                SendMail.SendEmail(
                                    self.email,
                                    SendMail.platform_list["taobao"],
                                    SendMail.fail_text)
                            return

                        if (now_time > self.set_time) or (server_time >
                                                          self.set_time):
                            while True:
                                try:
                                    # 时间到了便尝试点击立即购买
                                    if self.browser.find_element_by_link_text(
                                            "立即购买"):
                                        self.browser.find_element_by_link_text(
                                            "立即购买").click()
                                    # 若立即购买点击后用户还没有选择好商品型号,则无法进入提交订单页面
                                    # 通过检查此时页面中有无提交订单,来判断是否选好型号
                                    # 若检查到提交订单,则点击,并在各处反馈成功信息
                                    if self.browser.find_element_by_link_text(
                                            "提交订单"):
                                        self.browser.find_element_by_link_text(
                                            "提交订单").click()
                                        print(
                                            "[{}] <---------------抢购成功,请尽快付款--------------->"
                                            .format(time_func.get_datetime()))
                                        # 将成功记录记入日志
                                        self.logger.info(
                                            time_func.get_datetime() +
                                            "<---抢购成功!--->商品链接:" +
                                            self.goods_url)
                                        # 发邮件提示成功
                                        if self.email:
                                            SendMail.SendEmail(
                                                self.email, SendMail.
                                                platform_list["taobao"],
                                                SendMail.success_text)
                                        break
                                except:
                                    pass
                            # 防止上方提交订单失败
                            while True:
                                if self.browser.find_element_by_link_text(
                                        "提交订单"):
                                    try:
                                        self.browser.find_element_by_link_text(
                                            "提交订单").click()
                                        print(
                                            "[{}] <---------------抢购成功,请尽快付款--------------->"
                                            .format(time_func.get_datetime()))
                                        self.logger.info(
                                            time_func.get_datetime() +
                                            "<---抢购成功!--->商品链接:" +
                                            self.goods_url)
                                        return
                                    except:
                                        print("[{}] 再次尝试提交订单".format(
                                            time_func.get_time()))
                                else:
                                    return
                except:
                    print("[{}] 无法打开指定链接".format(time_func.get_time()))
            else:
                print("[{}] 链接非法,请输入合法淘宝网商品链接".format(time_func.get_time()))
Esempio n. 5
0
    def __init__(self, parent=None):
        self.email = ""  # 用户收件邮箱
        self.platform = ""  # 抢购平台
        self.method = -1  # 抢购模式,默认为0,自动全选购物车
        self.id = "tb189084993"  # 平台用户名
        self.goods_url = ""  # 手动输入商品链接模式下,输入的商品链接
        super(UiMainWindow, self).__init__(parent)
        self.resize(1000, 700)  # 主界面大小

        # 反馈邮箱输入框
        self.lineEdit_email = QLineEdit(self)
        self.lineEdit_email.setObjectName("lineEdit")
        self.lineEdit_email.setGeometry(QRect(200, 330, 600, 50))
        self.lineEdit_email.setFont(QFont("幼圆", 11))
        self.lineEdit_email.setPlaceholderText("请输入接收邮箱(非必填,用于接收抢购结果通知)")
        self.lineEdit_email.setStyleSheet(
            "background-color: rgb(255, 255, 255);"
            "border-radius:4px;")
        self.lineEdit_email.textChanged.connect(self.lineEditEmailChange)

        # 购物平台用户名输入框
        self.lineEdit_id = QLineEdit(self)
        self.lineEdit_id.setObjectName("lineEdit")
        self.lineEdit_id.setGeometry(QRect(200, 385, 200, 50))
        self.lineEdit_id.setFont(QFont("幼圆", 11))
        self.lineEdit_id.setPlaceholderText("请输入购物网站用户名")
        self.lineEdit_id.setStyleSheet("background-color: rgb(255, 255, 255);"
                                       "border-radius:4px;")
        self.lineEdit_id.textChanged.connect(self.lineEditIdChange)

        # 购物平台选择框
        self.comboBox_platform = QComboBox(self)
        self.comboBox_platform.setGeometry(QRect(200, 445, 200, 50))
        self.comboBox_platform.setObjectName("comboBox")
        self.comboBox_platform.setPlaceholderText("请选择购物平台")
        self.comboBox_platform.addItem("淘宝")
        self.comboBox_platform.addItem("天猫")
        self.comboBox_platform.addItem("京东")
        # 优化ComboBox样式
        self.comboBox_platform.setStyleSheet(
            "QComboBox{"
            "border-color: rgb(158,158,158);"
            "background: white;"  # combobox背景色
            "border: 1px solid gray;"  # 边框宽度、颜色
            "border-radius: 3px;}"
            "QComboBox::drop-down{"
            "border: none;}"
            "QComboBox::down-arrow{"
            "image: url(./images/down_arrow.png);}"
            "QComboBox QAbstractItemView::item{"
            "height: 100px;"
            "background-color: rgb(0,0,0);}"
            "QComboBox QAbstractItemView{"
            "selection-background-color: rgb(64, 156, 255);"  # 选中项背景色
            "selection-color: rgb(255, 255, 255);"  # 选中项文字颜色"
            "background: rgb(255,255,255);"  # 下拉框背景色
            "border: 1px solid rgb(158,158,158);"  # 下拉框边框宽度及颜色
            "border-radius: 0px 0px 5px 5px;"
            "outline: 0px;}")  # 去选中项虚线
        self.comboBox_platform.setFont(QFont("幼圆", 12))
        self.comboBox_platform.setAttribute(Qt.WA_TranslucentBackground)
        self.comboBox_platform.setWindowFlags(Qt.FramelessWindowHint
                                              | Qt.NoDropShadowWindowHint)
        self.comboBox_platform.currentIndexChanged.connect(self.platformchange)

        # 购物模式选择框
        self.comboBox_mod = QComboBox(self)
        self.comboBox_mod.setGeometry(QRect(450, 445, 350, 50))
        self.comboBox_mod.setStyleSheet(
            "QComboBox{"
            "border-color: rgb(158,158,158);"
            "background: white;"  # combobox背景色
            "border: 1px solid gray;"  # 边框宽度、颜色
            "border-radius: 3px;}"
            "QComboBox::drop-down{"
            "border: none;}"
            "QComboBox::down-arrow{"
            "image: url(./images/down_arrow.png);}"
            "QComboBox QAbstractItemView::item{"
            "height: 100px;"
            "background-color: rgb(0,0,0);}"
            "QComboBox QAbstractItemView{"
            "selection-background-color: rgb(64, 156, 255);"  # 选中项背景色
            "selection-color: rgb(255, 255, 255);"  # 选中项文字颜色"
            "background: rgb(255,255,255);"  # 下拉框背景色
            "border: 1px solid rgb(158,158,158);"  # 下拉框边框宽度及颜色
            "border-radius: 0px 0px 5px 5px;"
            "outline: 0px;}")  # 去选中项虚线
        self.comboBox_mod.setObjectName("comboBox")
        self.comboBox_mod.setPlaceholderText("请选择秒杀模式")
        self.comboBox_mod.addItem("自动全选购物车")
        self.comboBox_mod.addItem("手动选择购物车内商品")
        self.comboBox_mod.addItem("手动输入商品链接")
        self.comboBox_mod.setFont(QFont("幼圆", 12))
        self.comboBox_mod.currentIndexChanged.connect(self.methodchange)

        # 模式为2时手动输入商品链接框
        self.lineEdit = QLineEdit(self)
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit.setGeometry(QRect(405, 385, 395, 50))
        self.lineEdit.setFont(QFont("幼圆", 11))
        self.lineEdit.setPlaceholderText("请输入商品链接")
        self.lineEdit.setStyleSheet("background-color: rgb(255, 255, 255);"
                                    "border-radius:4px;")
        # 默认method为0,所以
        self.lineEdit.setHidden(True)
        self.lineEdit.textChanged.connect(self.lineEditUrlChange)

        # 秒杀时间选择框
        self.dateTimeEdit = QDateTimeEdit(self)
        self.dateTimeEdit.setGeometry(QRect(200, 510, 600, 50))
        self.dateTimeEdit.setObjectName("dateTimeEdit")
        self.dateTimeEdit.setAccelerated(True)
        self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.dateTimeEdit.setStyleSheet(
            "QDateTimeEdit{"
            "border-color: rgb(158,158,158);"
            "background: white;"
            "border: 1px solid gray;"  # 边框宽度、颜色
            "border-radius: 3px;}"
            "QDateTimeEdit::up-button{"
            "image: url(./images/datetime_add.png);}"
            "QDateTimeEdit::down-button{"
            "image: url(./images/datetime_reduce.png);}")
        self.dateTimeEdit.setFont(QFont("幼圆", 14))
        # 设置最小日期时间为当前时间
        l_t = time_func.get_time()
        # 默认时间为距离当前时间最近的10min的倍数
        t = [
            int(l_t[0:4]),
            int(l_t[5:7]),
            int(l_t[8:10]),
            int(l_t[11:13]),
            int(l_t[14:16]),
            int(l_t[17:19])
        ]
        if t[4] // 10 == 5:
            if t[3] == 23:
                t[3] = 0
                t[4] = 0
            else:
                t[3] += 1
                t[4] = 0
        else:
            t[4] = (t[4] // 10 + 1) * 10
        self.dateTimeEdit.setDateTime(
            QDateTime(QDate(t[0], t[1], t[2]), QTime(t[3], t[4], 0)))
        self.set_time = self.dateTimeEdit.text()
        self.dateTimeEdit.setCurrentSection(QDateTimeEdit.MinuteSection)
        self.dateTimeEdit.dateTimeChanged.connect(self.datetimechange)
        # self.dateTimeEdit.setCalendarPopup(True)  # 弹出日历选择日期,时间无法使用键头调整

        # 按钮
        self.pushButton = QPushButton(self)
        self.pushButton.setGeometry(QRect(200, 580, 600, 60))
        self.pushButton.setStyleSheet("background-color: rgb(65, 205, 82);\n"
                                      "color: rgb(255, 255, 255);"
                                      "border-radius:10px;")
        self.pushButton.setFont(QFont("华文中宋", 16))
        self.pushButton.setText("开 始 秒 杀")
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.miaosha)