Exemplo n.º 1
0
    def buy(self, url=None, size=list(), wait_time=10):
        try:
            # self.browser.get(url)
            # time.sleep(5)
            self.browser.wait_for_element_loaded("size-grid-button", By.CLASS_NAME,
                                                 wait_time=wait_time)
            sizeEU = self.browser.find_elements("size-grid-button", By.CLASS_NAME)
            # todo:这里需要修改,需要实时验证,把sleep去掉
            # self.browser.wait_for_element_loaded("cta-btn", By.CLASS_NAME, wait_time=timeout)
            time.sleep(20)
            hassize = False
            sizenum = ""
            for one in sizeEU:
                try:
                    time.sleep(0.1)
                    ActionChains(self.browser.browser).move_to_element(one).perform()
                    if one.text in size:
                        sizenum = one.text
                        self.browser.click_elem(one)
                        hassize = True
                        break
                except:
                    logging.info("size error")
            if not hassize:
                result = {"username": self.username, "password": self.password, "url": url,
                          "msg": "No size for the shoe", "error": ""}
                return error_result(result)
            # save_button = browser.find_elements_by_class_name("save-button")[0]
            save_button = self.browser.find_elements("cta-btn", By.CLASS_NAME)[0]
            ActionChains(self.browser.browser).move_to_element(save_button).perform()
            # 得到鞋码数
            save_button.click()
            self.browser.wait_for_element_loaded("cta-btn", By.CLASS_NAME)
            # 获取配送地址
            addr = self.browser.find_elements("open-close", By.CLASS_NAME)[1]
            self.browser.wait_for_element_loaded("payment-provider-btn", By.CLASS_NAME,
                                                 wait_time=wait_time)
            alipay = self.browser.find_elements("payment-provider-btn", By.CLASS_NAME)[1]
            # 确定支付方式为支付宝
            alipay.click()
            self.browser.wait_for_element_loaded("save-button", By.CLASS_NAME, wait_time=wait_time)
            save_button = self.browser.find_elements("save-button", By.CLASS_NAME)[1]
            time.sleep(2)
            save_button.click()
            time.sleep(1)

            self.browser.wait_for_element_loaded("save-button", By.CLASS_NAME, wait_time=wait_time)
            save_button = self.browser.find_elements("save-button", By.CLASS_NAME)[2]
            print save_button.text
            # 提交订单并排队
            save_button.click()
            time.sleep(10)
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "wait in line", "sizenum": sizenum}
            return normal_result(result)
        except Exception as e:
            logging.exception(str(e))
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "buy defeatly", "error": str(e)}
            return error_result(result)
Exemplo n.º 2
0
 def order(self, url, wait_time=10):
     try:
         self.browser.get(url=url)
         self.browser.wait_for_element_loaded("product-base", By.CLASS_NAME,
                                              wait_time=int(wait_time) * 1.5)
         products = self.browser.find_elements("product-base", By.CLASS_NAME)
         order_info = ""
         for one in products:
             content = one.text
             if content:
                 order_info += "[%s] " % content
         result = {"username": self.username, "password": self.password, "url": url,
                   "msg": "order info", "order_info": order_info}
         return normal_result(result)
     except Exception as e:
         logging.exception(str(e))
         result = {"username": self.username, "password": self.password, "url": url,
                   "msg": "order info", "error": str(e)}
         return error_result(result)
Exemplo n.º 3
0
    def login(self, url=None):
        try:
            # https://www.nike.com/cn/launch/t/air-max-95-premium-throwback-future/

            self.browser.get(url=url)
            self.browser.wait_for_element_loaded(type_name="join-log-in", elem_type=By.CLASS_NAME)
            join_in_elem = self.browser.find_element("join-log-in", By.CLASS_NAME)
            self.browser.click_elem(join_in_elem)

            self.browser.wait_for_element_loaded(type_name="verifyMobileNumber",
                                                 elem_type=By.NAME)
            user = self.browser.find_element("verifyMobileNumber", By.NAME)
            pwd = self.browser.find_element("password", By.NAME)
            self.browser.send_keys(user, self.username)
            self.browser.send_keys(pwd, self.password)

            submit = self.browser.find_element("mobileLoginSubmit", By.CLASS_NAME)
            self.browser.click_elem(submit)
            try:
                self.browser.wait_for_element_loaded(type_name="test-profile-picture",
                                                     elem_type=By.CLASS_NAME)
            except:
                self.browser.wait_for_element_loaded(type_name="//input[@type='email']",
                                                     elem_type=By.XPATH)
                email_ = self.browser.find_element("//input[@type='email']", By.XPATH)
                save_ = self.browser.find_element("//input[@value='保存']", By.XPATH)
                self.browser.clear(email_)
                self.browser.send_keys(email_, "*****@*****.**" % self.username)
                self.browser.click_elem(save_)

            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "login successfully"}
            return normal_result(result)
        except Exception as e:
            logging.exception(str(e))
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "login defeatly", "error": str(e)}
            return error_result(result)
Exemplo n.º 4
0
    def regist(self, url, firstname="Lee", lastname="Jack", wait_time=10):
        try:
            self.browser.get(url=url)
            try:
                # 应对页面变小,转换为手机页面模式

                self.browser.wait_for_element_loaded(type_name="g72-menu", elem_type=By.CLASS_NAME)
                menu = self.browser.find_element("g72-menu", By.CLASS_NAME)
                self.browser.click_elem(menu)
            except Exception as e:
                logging.exception(str(e))

            self.browser.wait_for_element_loaded(type_name="join-log-in", elem_type=By.CLASS_NAME)
            join_in_elem = self.browser.find_element("join-log-in", By.CLASS_NAME)
            self.browser.click_elem(join_in_elem)

            self.browser.wait_for_element_loaded(type_name="mobileLoginJoinLink",
                                                 elem_type=By.CLASS_NAME)
            register_div_elem = self.browser.find_element("mobileLoginJoinLink", By.CLASS_NAME)
            register_a_elem = register_div_elem.find_element_by_xpath(".//a")
            self.browser.click_elem(register_a_elem)
            phone_number_elem = self.browser.find_element("phoneNumber", By.CLASS_NAME)
            send_code_elem = self.browser.find_element("sendCodeButton", By.CLASS_NAME)
            code_elem = self.browser.find_element("//input[@class='code']", By.XPATH)
            self.browser.send_keys(phone_number_elem, self.username)
            time.sleep(1)
            self.browser.click_elem(send_code_elem)
            self.browser.click_elem(send_code_elem)
            # 等待验证码
            ticks = 0
            code = "1"
            while code == "1":
                code = get_code(self.username)
                if code == "1":
                    time.sleep(5)
                    ticks += 5
                elif code == "0":
                    result = {"username": self.username, "password": self.password, "url": url,
                              "msg": "regist defeatly", "error": "Verification-code Error"}
                    return error_result(result)

                if ticks >= 60:
                    result = {"username": self.username, "password": self.password, "url": url,
                              "msg": "regist defeatly", "error": "Verification-code Timeout"}
                    return error_result(result)
            self.browser.send_keys(code_elem, code)
            join_continue_elem = self.browser.find_element("mobileJoinContinue ", By.CLASS_NAME)
            time.sleep(2)
            self.browser.click_elem(join_continue_elem)
            time.sleep(2)
            # 填写信息
            self.browser.wait_for_element_loaded("mobileJoinSubmit", elem_type=By.CLASS_NAME,
                                                 wait_time=wait_time)
            lastName_elem = self.browser.find_element("lastName", By.NAME)
            firstName_elem = self.browser.find_element("firstName", By.NAME)
            password_elem = self.browser.find_element("password", By.NAME)
            gender_div_elem = self.browser.find_element("shoppingGender", By.CLASS_NAME)
            man_elem = gender_div_elem.find_element_by_xpath(".//input[@type='button']")
            # ?mobileJoinSubmit: firefox width out of range

            register_div_elem = self.browser.find_element("mobileJoinSubmit", By.CLASS_NAME)
            ActionChains(self.browser.browser).move_to_element(register_div_elem).perform()
            self.browser.send_keys(lastName_elem, lastname)
            self.browser.send_keys(firstName_elem, firstname)
            self.browser.send_keys(password_elem, self.password)
            self.browser.click_elem(man_elem)
            self.browser.click_elem(register_div_elem)

            # 填写邮件
            self.browser.wait_for_element_loaded("captureEmailSubmit", elem_type=By.CLASS_NAME)
            email_elem = self.browser.find_element("emailAddress", By.NAME)
            save_elem = self.browser.find_element("captureEmailSubmit", By.CLASS_NAME)
            self.browser.send_keys(email_elem, self.username + "@qq.com")
            self.browser.click_elem(save_elem)

            # 验证邮件
            self.browser.wait_for_element_loaded("mobileJoinDobEmailSkipButton",
                                                 elem_type=By.CLASS_NAME)
            skip_elem = self.browser.find_element("mobileJoinDobEmailSkipButton", By.CLASS_NAME)
            self.browser.click_elem(skip_elem)

            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "regist successfully"}
            return normal_result(result)
        except Exception as e:
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "regist defeatly", "error": str(e)}
            return error_result(result)
Exemplo n.º 5
0
    def address(self, url, lastname=None, firstname=None, province=None, city=None, district=None,
                phone=None, addressinfo=None, wait_time=10):
        wait_time = int(wait_time)
        isprovince = False
        iscity = False
        isdistrict = False
        try:
            self.browser.get(url=url)
            # 这里时间较长,特殊处理
            try:
                self.browser.wait_for_element_loaded("edit-button-container", By.CLASS_NAME,
                                                     wait_time=int(wait_time) * 1.5)
            except:
                self.browser.wait_for_element_loaded("add-button", By.CLASS_NAME,
                                                     wait_time=int(wait_time) * 1.5)
            self.browser.wait_for_element_loaded("addresses", By.CLASS_NAME, wait_time=wait_time)
            address = self.browser.find_element("addresses", By.CLASS_NAME)
            ActionChains(self.browser.browser).move_to_element(address).perform()
            self.browser.click_elem(address)

            try:
                self.browser.wait_for_element_loaded("edit-button-container", By.CLASS_NAME,
                                                     wait_time=wait_time)
                edit = self.browser.find_element("edit-button-container", By.CLASS_NAME)
                ActionChains(self.browser.browser).move_to_element(edit).perform()
                self.browser.click_elem(edit)
            except:
                self.browser.wait_for_element_loaded("add-button", By.CLASS_NAME,
                                                     wait_time=wait_time)
                add_address = self.browser.find_elements("add-button", By.CLASS_NAME)[2]
                ActionChains(self.browser.browser).move_to_element(add_address).perform()
                self.browser.click_elem(add_address)

            # todo:这里有可能需要加入等待元素加载
            lastname_elem = self.browser.find_element("address-lastname", By.ID)
            firstname_elem = self.browser.find_element("address-firstname", By.ID)
            self.browser.clear(lastname_elem)
            self.browser.clear(firstname_elem)
            self.browser.send_keys(lastname_elem, lastname)
            self.browser.send_keys(firstname_elem, firstname)

            self.browser.wait_for_element_loaded("state-container", By.CLASS_NAME,
                                                 wait_time=wait_time)
            self.browser.wait_for_element_loaded("city-container", By.CLASS_NAME,
                                                 wait_time=wait_time)
            self.browser.wait_for_element_loaded("district-container", By.CLASS_NAME,
                                                 wait_time=wait_time)

            time.sleep(0.5)
            state = self.browser.find_element("state-container", By.CLASS_NAME)
            ActionChains(self.browser.browser).move_to_element(state).perform()
            self.browser.click_elem(state)

            state_province = self.browser.find_elements(
                "//div[@class='input-wrapper state-container container2 js-addressState']/div/ul/li",
                By.XPATH)

            for one in state_province:
                if one.text == province:
                    ActionChains(self.browser.browser).move_to_element(one).perform()
                    self.browser.click_elem(one)
                    isprovince = True
                    break
            time.sleep(0.5)
            city_ = self.browser.find_element("city-container", By.CLASS_NAME)
            self.browser.click_elem(city_)
            state_city = self.browser.find_elements(
                "//div[@class='input-wrapper city-container container1 js-addressCity']/div/ul/li",
                By.XPATH)
            for one in state_city:
                if one.text == city:
                    ActionChains(self.browser.browser).move_to_element(one).perform()
                    self.browser.click_elem(one)
                    iscity = True
                    break
            time.sleep(0.5)
            district_ = self.browser.find_element("district-container", By.CLASS_NAME)
            self.browser.click_elem(district_)
            state_district = self.browser.find_elements(
                "//div[@class='input-wrapper district-container container2 js-addressDistrict']/div/ul/li",
                By.XPATH)
            for one in state_district:
                if one.text == district:
                    ActionChains(self.browser.browser).move_to_element(one).perform()
                    self.browser.click_elem(one)
                    isdistrict = True
                    break
            if not all([state_province, state_city, state_district]):
                result = {"username": self.username, "password": self.password, "url": url,
                          "msg": "address defeatly",
                          "error": "Cant load  province or city or county"}
                return error_result(result)
            elif not all([isprovince, iscity, isdistrict]):
                result = {"username": self.username, "password": self.password, "url": url,
                          "msg": "address defeatly",
                          "error": "Cant get province or city or county"}
                return error_result(result)
            else:
                pass

            addressinfo_ = self.browser.find_element("address-addressone", By.ID)
            self.browser.clear(addressinfo_)
            self.browser.send_keys(addressinfo_, addressinfo)

            phone_ = self.browser.find_element("address-phonenumber", By.ID)
            self.browser.clear(phone_)
            self.browser.send_keys(phone_, phone)

            save_button = self.browser.find_element(
                "//button[@data-qa='my_account.settings.addresses.shipping_address.save_button']",
                By.XPATH)
            ActionChains(self.browser.browser).move_to_element(save_button).perform()
            self.browser.click_elem(save_button)
            self.browser.wait_for_element_loaded("edit-button-container", By.CLASS_NAME,
                                                 wait_time=int(wait_time) * 1.5)
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "address successfully"}
            return normal_result(result)
        except Exception as e:
            logging.exception(str(e))
            result = {"username": self.username, "password": self.password, "url": url,
                      "msg": "address defeatly", "error": str(e)}
            return error_result(result)
Exemplo n.º 6
0
    def regist(self, url, firstname="Lee", lastname="Jack", wait_time=10):
        try:
            self.browser.get(url=url)
            self.browser.wait_for_element_loaded("btn-block", By.CLASS_NAME)
            regist_btn = self.browser.find_element("btn-block", By.CLASS_NAME)

            input_ = self.browser.find_elements("input-flat", By.CLASS_NAME)
            code_btn = self.browser.find_element("btn-lg", By.CLASS_NAME)
            self.browser.send_keys(input_[0], self.username)
            time.sleep(0.5)
            self.browser.click_elem(code_btn)
            # 等待验证码
            ticks = 0
            code = "1"
            while code == "1":
                code = get_code(self.username)
                if code == "1":
                    time.sleep(5)
                    ticks += 5
                elif code == "0":
                    result = {
                        "username": self.username,
                        "password": self.password,
                        "url": url,
                        "msg": "regist defeatly",
                        "error": "Verification-code Error"
                    }
                    return error_result(result)

                if ticks >= 60:
                    result = {
                        "username": self.username,
                        "password": self.password,
                        "url": url,
                        "msg": "regist defeatly",
                        "error": "Verification-code Timeout"
                    }
                    return error_result(result)
            self.browser.send_keys(input_[1], code)
            self.browser.send_keys(input_[2], self.password)
            self.browser.click_elem(regist_btn)

            self.browser.wait_for_element_loaded("user-name", By.CLASS_NAME)

            result = {
                "username": self.username,
                "password": self.password,
                "url": url,
                "msg": "regist successfully",
                "Cookie": self.browser.browser.get_cookies()
            }
            return normal_result(result)
        except Exception as e:
            result = {
                "username": self.username,
                "password": self.password,
                "url": url,
                "msg": "regist defeatly",
                "error": str(e)
            }
            return error_result(result)