Пример #1
0
 def do_after_place_order_success(self, confirm_pay_filename):
     logger.info('确认订单已成功支付,正在获取订单的相关信息,更新刷单状态...')
     order_no = self.driver.find_element_by_xpath(
         '//*[@id="buyer-ordertable"]//tr[1]/td[2]/p[1]/span[2]').text
     logger.info("订单号为:%s" % order_no)
     price_text = self.driver.find_element_by_xpath(
         '//*[@id="buyer-ordertable"]/tbody[1]/tr[1]/td[4]/div/p[2]'
     ).text.strip()
     actual_order_amount = re.sub(r'\$ ', '', price_text)
     logger.info('订单总价:%s' % actual_order_amount)
     payment_date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     logger.info('下单时间:%s' % payment_date)
     brushing_data = {
         str(self.task_id): {
             "task_id": self.task_id,
             "status": 2,
             "order_no": order_no,
             "payment_date": payment_date,
             "actual_order_amount": float(actual_order_amount)
         }
     }
     self.update_brushing_status(json.dumps(brushing_data))
     # 新增刷单操作日志
     data = {
         "task_id": self.task_id,
         "info": "下单成功!",
         'ip': self.get_ip_info(proxies={'https': self.proxy})
     }
     self.create_task_order_log(json.dumps(data))
     os.remove(confirm_pay_filename)
     logger.info('删除了一个文件:%s' % confirm_pay_filename)
Пример #2
0
 def do_after_set_user_info_success(self):
     self.driver.get(self.index_url)
     time.sleep(10)
     logger.info('%s用户注册成功!' %
                 self.user_info['data']['email']["login_aliexpress_email"])
     data = {
         'data': {
             "aliexpress_password": self.password,
             "email_id": self.user_info['data']['email']['id'],
             "credit_id": self.user_info['data']["credit"]['id'],
             "address_id": self.user_info['data']["address"]['id'],
             "ip_id": self.user_info['data']["ip"]['id'],
             "register_city": self.register_city,
             "header": json.dumps(self.headers),
             "cookies": json.dumps(self.driver.get_cookies()),
             "status_code": "200"
         }
     }
     # print(json.dumps(data))
     self.save_success_register_info(json.dumps(data))
     self.driver.quit()
     dir = os.path.join(os.path.dirname(__file__), 'data')
     last_domain_json_file = dir + '/' + 'last_email_domain.json'
     with open(last_domain_json_file, 'w', encoding='utf-8') as f:
         domain_index_data = {'last_index': self.index}
         f.write(json.dumps(domain_index_data))
 def fill_in_payment_information2(self):
     logger.info('正在进入支付信息的填写流程...')
     WebDriverWait(driver=self.driver, timeout=60).until(
         EC.element_to_be_clickable((By.XPATH, '//input[@name="cardNum"]'))
     )
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('cardNum').send_keys(
         self.task_infos[str(self.task_id)]["payment"]["CreditCardNumber"])
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('dateM').send_keys(self.task_infos[str(self.task_id)]["payment"]["ccMonth"])
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('dateY').send_keys(self.task_infos[str(self.task_id)]["payment"]["ccYear"])
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('cvv2').send_keys(self.task_infos[str(self.task_id)]["payment"]["cvv"])
     # 切割全名并判断长度
     FullName_text = self.task_infos[str(self.task_id)]["address"]["FullName"].split()
     if len(FullName_text) == 1:
         time.sleep(random.uniform(2, 4))
         self.driver.find_element_by_name('cardHolderF').send_keys(FullName_text[0])
         time.sleep(random.uniform(2, 4))
         self.driver.find_element_by_name('cardHolderL').send_keys(FullName_text[0])
     else:
         time.sleep(random.uniform(2, 4))
         self.driver.find_element_by_name('cardHolderF').send_keys(FullName_text[0])
         time.sleep(random.uniform(2, 4))
         self.driver.find_element_by_name('cardHolderL').send_keys(FullName_text[1])
     time.sleep(random.uniform(3, 5))
     try:
         self.driver.find_element_by_xpath('//div[@class="checkout-button"]/button[2]').send_keys(Keys.ENTER)
         logger.info('完成支付信息的填写!')
     except Exception as e:
         print(e)
Пример #4
0
 def modify_one_address_invalid(self, address_id):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressModifyOneAddress&address_id=%s' % address_id
     resp = requests.get(url)
     if resp.json().get('code') == 200:
         logger.info('成功让地址失效!')
     else:
         logger.info('未能让地址失效')
Пример #5
0
 def create_task_order_log(self, data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressCreateTaskOrderLog'
     resp = post(requests.session(), url=url, post_data=data)
     if resp.json()['status'] == 0:
         logger.info('[taskid: %s]新增刷单操作日志成功!' % self.task_id)
     else:
         logger.info('[taskid: %s]新增刷单操作日志失败!' % self.task_id)
 def fill_in_pament_information(self):
     logger.info('正在创建支付信息...')
     # WebDriverWait(self.driver, 40).until(
     #     EC.element_to_be_clickable((By.XPATH, '//div[@class="payment-info mini"]/div[@class="mini-title"]'))
     # )
     # self.driver.find_element_by_xpath('//div[@class="payment-info mini"]/div[@class="mini-title"]').click()
     WebDriverWait(self.driver, 40).until(
         EC.element_to_be_clickable((By.ID, 'cardNo'))
     )
     self.driver.find_element_by_id('cardNo').send_keys(self.task_infos[str(self.task_id)]["payment"]["CreditCardNumber"])
     time.sleep(random.uniform(2, 4))
     #卡持有者强制用空格隔开firstname 与 lastname
     # 切割全名并判断长度
     FullName_text = self.task_infos[str(self.task_id)]["address"]["FullName"].split()
     print(FullName_text[0] + ' ' + FullName_text[0])
     if len(FullName_text) == 1:
         self.driver.find_element_by_id('cardHolder').send_keys(FullName_text[0] + ' ' + FullName_text[0])
         time.sleep(random.uniform(2, 4))
     else:
         self.driver.find_element_by_id('cardHolder').send_keys(self.task_infos[str(self.task_id)]["address"]["FullName"])
         time.sleep(random.uniform(2, 4))
     expireDate = self.task_infos[str(self.task_id)]["payment"]["ccMonth"] + self.task_infos[str(self.task_id)]["payment"]["ccYear"]
     self.driver.find_element_by_id('expire').send_keys(expireDate)
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_id('cvc').send_keys(self.task_infos[str(self.task_id)]["payment"]["cvv"])
     time.sleep(2)
     #//*[@id="main"]/div[2]/div/div/div[2]/div[2]/div[2]/button
     self.driver.find_element_by_xpath('//div[@class="save"]/button[@type="button"]').click()
     logger.info('完成支付信息的创建!')
Пример #7
0
 def run(self):
     for i in range(1, 5):
         url = self.base_search_url + self.key_words + "&page=" + str(i)
         logger.info('[%s] [%s] 正在搜索第 [%d] 页中的广告...' %
                     (self.id, self.key_words, i))
         html = self.get_search_list_page(url)
         if html:
             num = self.parse_search_list_page(html, i)
             # print('第%d页中广告个数为%d' % (i, num))
             logger.info('[%s] [%s] 第 [%d] 页中广告个数为 [%d]' %
                         (self.id, self.key_words, i, num))
             if num == 0:
                 logger.info('[%s] [%s] 第 [%d] 页未搜索到广告,停止搜索!' %
                             (self.id, self.key_words, i))
                 break
         else:
             logger.info('[%s] [%s] 跳转到登录页,停止搜索!' %
                         (self.id, self.key_words))
             break
     logger.info('[%s] [%s] 总共搜索到的广告个数:[%d]' %
                 (self.id, self.key_words, len(self.AD_data)))
     print(json.dumps(self.AD_data))
     ad_data = {
         'data': {
             "id": self.id,
             "status": "1",
             "attack_result": json.dumps(self.AD_data)
         }
     }
     self.update_ad_data(json.dumps(ad_data))
Пример #8
0
 def create_task_order_log(data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressCreateTaskOrderLog'
     resp = requests.post(url, data)
     if resp.json()['status'] == 0:
         logger.info('新增刷单操作日志成功!')
     else:
         logger.info('新增刷单操作日志失败!')
Пример #9
0
 def update_brushing_status(self, data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressModifyTaskOrderStatus'
     resp = post(requests.session(), url=url, post_data=data)
     # print(resp.text)
     if resp.json()['msg'] == 'ok':
         logger.info('[taskid: %s]刷单状态更新成功!' % self.task_id)
     else:
         logger.info('[taskid: %s]刷单状态更新失败!' % self.task_id)
Пример #10
0
 def save_success_register_info(data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressAutoCreateAccountPost'
     resp = tools.post(requests.session(), url=url, post_data=data)
     if resp:
         if resp.text.strip() == "success" and resp.status_code == 200:
             # print(resp.text)
             logger.info('注册信息已成功入库!')
         else:
             logger.info('注册信息入库失败!')
Пример #11
0
 def update_brushing_status(data):
     # 测试机
     # url = 'http://testthird.gets.com:8383/api/index.php?sec=20171212getscn&act=aliexpressModifyTaskOrderStatus'
     # 线上
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressModifyTaskOrderStatus'
     resp = post(requests.session(), url=url, post_data=data)
     if resp.json()['msg'] == 'ok':
         logger.info('刷单状态更新成功!')
     else:
         logger.info('刷单状态更新失败!')
Пример #12
0
 def do_after_place_order_failed(self, confirm_pay_filename):
     logger.info('支付失败!')
     self.driver.save_screenshot('PayFailed.png')
     # logger.info('支付失败的url:%s' % self.driver.current_url)
     # 新增刷单操作日志
     data = {
         "task_id": self.task_id,
         "info": "支付失败!导致下单失败!",
         'ip': self.get_ip_info(proxies={'https': self.proxy})
     }
     self.create_task_order_log(json.dumps(data))
Пример #13
0
 def update_ad_data(self, data):
     # url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=modifyAliexpressAdvertisingAttack'
     url = 'http://testthird.gets.com:8383/api/index.php?sec=20171212getscn&act=modifyAliexpressAdvertisingAttack'
     resp = post(requests.session(), url=url, post_data=data)
     print("result", resp.text)
     if resp:
         if resp.json().get('msg') == "OK":
             logger.info('[%s] [%s] 搜索到的广告数据入库成功!' %
                         (self.id, self.key_words))
         else:
             logger.info('[%s] [%s] 搜索到的广告数据入库失败!' %
                         (self.id, self.key_words))
Пример #14
0
 def update_kill_data(self, data):
     # url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=modifyAliexpressAdvertisingAttackURL'
     url = 'http://testthird.gets.com:8383/api/index.php?sec=20171212getscn&act=modifyAliexpressAdvertisingAttackURL'
     resp = post(requests.session(), url=url, post_data=data)
     print("result", resp.text)
     if resp:
         if resp.json().get('msg') == "OK":
             logger.info('[master_id: %s] [id: %s] 广告点击的数据入库成功!' %
                         (self.task.get("master_id"), self.task.get('id')))
         else:
             logger.info('[%s] [%s] 广告点击的数据入库失败!' %
                         (self.task.get("master_id"), self.task.get('id')))
Пример #15
0
 def fill_in_address_infomation(self):
     # self.driver.refresh()
     WebDriverWait(self.driver, 40).until(
         EC.element_to_be_clickable((By.ID, 'contactPerson')))
     self.driver.find_element_by_id('contactPerson').send_keys(
         self.task_infos[str(self.task_id)]["address"]["FullName"])
     time.sleep(random.uniform(2, 4))
     # 电话号码需要处理,若有"+1"前缀,则去掉"+1"前缀
     PhoneNumber = self.task_infos[str(
         self.task_id)]["address"]["PhoneNumber"]
     if re.search(r'\+1|\s|\(|\)|-', PhoneNumber):
         PhoneNumber = re.sub(r'\+1|\s|\(|\)|-', '', PhoneNumber)
     self.driver.find_element_by_id('mobileNo').send_keys(PhoneNumber)
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('address').send_keys(
         self.task_infos[str(self.task_id)]["address"]["AddressLine1"])
     time.sleep(random.uniform(2, 4))
     if self.task_infos[str(self.task_id)]["address"]["AddressLine2"]:
         self.driver.find_element_by_name('address2').send_keys(
             self.task_infos[str(self.task_id)]["address"]["AddressLine2"])
     # else:
     #     self.driver.find_element_by_name('address2').send_keys("Al Bada'a Park 1")
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_xpath(
         '//*[@id="main"]/div[1]/div/div/div[2]/div/div[2]/div[3]/div/div/div[1]/span/span/span/span[1]/span/input'
     ).click()
     time.sleep(5)
     #显示7个
     # self.driver.find_element_by_xpath('//*[@id="main"]/div[1]/div/div/div[2]/div/div[2]/div[3]/div/div/div[1]/span/div/div/div/ul/li[5]').click()
     self.driver.find_element_by_xpath('//li[text()="California"]').click()
     time.sleep(4)
     self.driver.find_element_by_xpath(
         '//*[@id="main"]/div[1]/div/div/div[2]/div/div[2]/div[3]/div/div/div[2]/span/span/span/span[1]/span/input'
     ).click()
     # self.driver.find_element_by_xpath('//li[text()="3 points"]').click()
     time.sleep(5)
     # self.driver.find_element_by_xpath(
     # '//*[@id="main"]/div[1]/div/div/div[2]/div/div[2]/div[3]/div/div/div[2]/span/div/div/div/ul/li[5]').click()
     # self.driver.find_element_by_xpath('//li[text()="3 points"]').click()
     self.driver.find_element_by_xpath('//li[text()="%s"]' %
                                       random.choice(City_List)).click()
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_name('zip').send_keys(self.task_infos[str(
         self.task_id)]["address"]["PostalCode"].strip())
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_xpath('//input[@type="checkbox"]').click()
     time.sleep(random.uniform(2, 4))
     self.driver.find_element_by_xpath(
         '//div[@class="save"]/button[@type="button"]').click()
     logger.info('完成收货地址信息的填写!')
 def parse_list_page(self,html):
     parseHtml = etree.HTML(html)
     good_detail_urls = parseHtml.xpath('//ul[@id="hs-below-list-items"]/li/div[1]/div[1]/div/a/@href')
     #绑定当前页的所有商品详情链接
     self.good_detail_urls = good_detail_urls
     for detail_url in good_detail_urls:
         if re.search(self.target_id,detail_url):
             detail_url = "https:" + detail_url
             self.target_good_detail_url = detail_url
             logger.info('目标商品的详情链接是:%s' % self.target_good_detail_url)
             # logger.info('搜索页中找到了目标商品!')
             self.good_detail_urls = good_detail_urls
             # logger.info('目标商品所在列表页的所有商品的详情链接是:%s' % self.good_detail_urls)
             return True
     return False
Пример #17
0
 def do_after_order_close(self):
     logger.info('[taskid: %s] 订单已关闭,无法留评!!' % self.task_id)
     review_data = {
         str(self.task_id): {
             "task_id": self.task_id,
             "status": 61,
         }
     }
     # 更新刷单状态
     self.update_brushing_status(json.dumps(review_data))
     # 新增刷单操作日志
     log_data = {
         "task_id": self.task_id,
         "info": "留评失败!",
         'ip': self.get_ip_info(proxies={'https': self.proxy})
     }
     self.create_task_order_log(json.dumps(log_data))
Пример #18
0
 def do_after_review_success(self):
     logger.info('[taskid: %s]留评成功!' % self.task_id)
     # 更新刷单状态
     review_data = {
         str(self.task_id): {
             "task_id": self.task_id,
             "status": 6,
         }
     }
     self.update_brushing_status(json.dumps(review_data))
     # 新增刷单操作日志
     log_data = {
         "task_id": self.task_id,
         "info": "留评成功!",
         'ip': self.get_ip_info(proxies={'https': self.proxy})
     }
     self.create_task_order_log(json.dumps(log_data))
 def delete_other_goods_from_cart(self):
     try:
         WebDriverWait(driver=self.driver, timeout=20).until(
             EC.element_to_be_clickable((By.XPATH, '//div[contains(@class,"nav-cart nav-cart-box")]/a[1]'))
         )
         self.driver.find_element_by_xpath('//div[contains(@class,"nav-cart nav-cart-box")]/a[1]').send_keys(Keys.ENTER)
     except TimeoutException:
         logger.info('进入购物车等待超时,程序退出!')
         sys.exit(0)
     time.sleep(10)
     items = self.driver.find_elements_by_xpath('//div[@class="store-list single"]')
     # print(len(items))
     try:
         for item in items:
             good_detail_url = item.find_element_by_xpath('.//div[@class="product-title"]/a').get_attribute('href')
             if not re.search(self.target_id,good_detail_url):
                 #非目标商品,直接从购物车删除
                 item.find_element_by_xpath('.//div[@class="opt-group"]/button[2]').click()
                 time.sleep(2)
                 print('点击删除!')
                 #点击ok
                 WebDriverWait(driver=self.driver, timeout=20).until(
                     EC.element_to_be_clickable((By.XPATH, '//div[@class="next-dialog-footer next-align-left"]/button[1]'))
                 )
                 self.driver.find_element_by_xpath('//div[@class="next-dialog-footer next-align-left"]/button[1]').send_keys(
                     Keys.ENTER)
                 logger.info('点击OK,确认删除非目标商品!')
                 logger.info('非目标商品已从购物车中删除!')
                 time.sleep(2)
     # 点击删除后,网页会刷新,元素已发生改变,需捕获异常并处理
     except StaleElementReferenceException:
         self.delete_other_goods_from_cart()
Пример #20
0
 def do_after_review_failed(self, confirm_receive_filename,
                            confirm_leavefeedback_filename):
     logger.info('[taskid: %s]留评失败!' % self.task_id)
     review_data = {
         str(self.task_id): {
             "task_id": self.task_id,
             "status": 61,
         }
     }
     # 更新刷单状态
     self.update_brushing_status(json.dumps(review_data))
     # 新增刷单操作日志
     log_data = {
         "task_id": self.task_id,
         "info": "留评失败!",
         'ip': self.get_ip_info(proxies={'https': self.proxy})
     }
     self.create_task_order_log(json.dumps(log_data))
     self.driver.save_screenshot('LeaveFeedbackFailed.png')
     os.remove(confirm_receive_filename)
     logger.info('[taskid: %s]删除了一个文件:%s' %
                 (self.task_id, confirm_receive_filename))
     os.remove(confirm_leavefeedback_filename)
     logger.info('[taskid: %s]删除了一个文件:%s' %
                 (self.task_id, confirm_leavefeedback_filename))
Пример #21
0
    def run(self):
        #先请求主页,点击注册链接进行注册,需要判断是否有弹窗
        try:
            self.driver.get(self.index_url)
            try:
                WebDriverWait(self.driver, 15).until(
                    EC.element_to_be_clickable((By.CLASS_NAME, 'close-layer')))
                self.driver.find_element_by_class_name('close-layer').click()
            except TimeoutException:
                pass
            self.driver.execute_script(
                'window.scrollTo(document.body.scrollWidth,0 );')
            time.sleep(3)

            element = self.driver.find_element_by_xpath(
                '//div[@id="nav-user-account"]/div[1]')
            actions = ActionChains(self.driver)
            actions.move_to_element(element)
            actions.perform()
            # time.sleep(1)
            # self.driver.save_screenshot('before.png')
            WebDriverWait(self.driver, 60).until(
                EC.element_to_be_clickable(
                    (By.XPATH,
                     '//div[@id="nav-user-account"]/div[2]/dl/dd/a')))
            self.driver.find_element_by_xpath(
                '//div[@id="nav-user-account"]/div[2]/dl/dd/a').click()
            # time.sleep(1)
            # self.driver.save_screenshot('after.png')
            logger.info(
                '当前正在注册的用户是%s' %
                self.user_info['data']['email']["login_aliexpress_email"])
            self.register(self.driver.current_url)
        except (TimeoutException, NoSuchElementException):
            #注册链接不可点击导致超时,设置回调,重新请求主页并进行相关操作
            logger.info('元素未加载,或者网络延迟导致超时,关闭当前浏览器,杀死当前线程,准备创建新的线程继续执行任务!')
            self.driver.quit()
            sys.exit(0)
Пример #22
0
 def run(self):
     s = requests.session()
     for key in self.cookies:
         s.cookies.set(key, self.cookies[key])
     url = self.task.get('attack_url')
     res = get(s, url=url, headers=self.headers, proxies=self.proxies)
     if res and 'Add to Cart' in res.text:
         logger.info('成功点击广告 [1] 次!')
         attack_info = {
             "id": self.task.get("id"),
             "click_number": "1",
             "brand_name": self.task.get("attack_brand_name"),
             "asin": self.task.get("attack_asin"),
             "log": '成功点击广告1次!',
             "ip": self.get_ip_info(proxies=self.proxies)
         }
         kill_data = {
             'data': {
                 "master_id": self.task.get("master_id"),
                 "attack_info": json.dumps(attack_info)
             }
         }
         self.update_kill_data(json.dumps(kill_data))
Пример #23
0
    def run(self):
        try:
            self.driver.get('http://www.aliexpress.com/')
            #过滤弹窗
            try:
                WebDriverWait(self.driver, 40).until(
                    EC.element_to_be_clickable((By.CLASS_NAME, 'close-layer')))
                self.driver.find_element_by_class_name('close-layer').click()
            except TimeoutException:
                pass
            WebDriverWait(self.driver, 40).until(
                EC.element_to_be_clickable(
                    (By.XPATH, '//span[@class="register-btn"]/a')))
            #点击登录
            self.driver.find_element_by_xpath(
                '//span[@class="register-btn"]/a').click()
            time.sleep(10)
            #切换到子iframe
            self.driver.switch_to.frame('alibaba-login-box')
            #输入登录信息
            WebDriverWait(self.driver, 40).until(
                EC.element_to_be_clickable(
                    (By.XPATH, '//input[@id="fm-login-id"]')))
            time.sleep(random.uniform(4, 8))
            self.driver.find_element_by_id('fm-login-id').send_keys(
                self.task_infos[str(
                    self.task_id)]["account"]["login_aliexpress_email"])
            time.sleep(random.uniform(4, 8))
            self.driver.find_element_by_id('fm-login-password').send_keys(
                self.task_infos[str(
                    self.task_id)]["account"]["login_aliexpress_password"])
            time.sleep(random.uniform(4, 8))
            self.driver.find_element_by_id('fm-login-submit').click()
            #此处判断登录过程中是否有滑块验证码,有则终止程序
            if 'display: block' in self.driver.find_element_by_id(
                    'fm-login-checkcode-title').get_attribute('style'):
                logger.info('登录时发现滑块验证码,程序退出!')
                self.driver.quit()
                sys.exit(0)
            #弹窗处理
            try:
                WebDriverWait(self.driver, 40).until(
                    EC.element_to_be_clickable((By.CLASS_NAME, 'close-layer')))
                self.driver.find_element_by_class_name('close-layer').click()
            except TimeoutException:
                pass
            if self.driver.current_url == 'https://www.aliexpress.com/':
                #插入账号登录日志
                login_log_data = {
                    'data': {
                        "account_id":
                        self.task_infos[str(
                            self.task_id)]["account"]["account_id"],
                        "header":
                        self.task_infos[str(
                            self.task_id)]['account']['header'],
                        "cookies":
                        json.dumps(self.driver.get_cookies()),
                        "login_status":
                        "1",
                        "note":
                        "登录成功"
                    }
                }
                self.insert_account_login_log(json.dumps(login_log_data))
                #当账户成功登录时, 把登录的header和cookie修改对应账户表的字段
                login_success_info_data = {
                    'data': {
                        "account_id":
                        self.task_infos[str(
                            self.task_id)]["account"]["account_id"],
                        "header":
                        self.task_infos[str(
                            self.task_id)]['account']['header'],
                        "cookies":
                        json.dumps(self.driver.get_cookies())
                    }
                }
                self.update_account_login_success_info(
                    json.dumps(login_success_info_data))

            elif 'passport.aliexpress.com' in self.driver.current_url:
                logger.info('登录后发现验证码,账户已被封!')
                #账户被封,也更新刷单状态
                brushing_data = {
                    str(self.task_id): {
                        "task_id": self.task_id,
                        "status": 10,
                        # "order_no": '',
                        # "payment_date": '',
                        # "actual_order_amount": 0.00
                    }
                }
                self.update_brushing_status(json.dumps(brushing_data))
                self.driver.quit()
                logger.info('程序退出!')
                sys.exit(0)

            self.refund()
            logger.info('当前账户操作完毕,关闭当前浏览器!')
            self.driver.quit()
        except NoSuchFrameException:
            logger.info('切换到登录的frame超时,正在重新请求主页,继续执行登录操作')
            self.run()

        except TimeoutException:
            # 在操作过程中等待超时,先退出当前登录状态,再重新执行run方法回调,重新走流程。也可直接结束程序,但更适合在多线程的情况下操作。
            logger.info('等待超时,正在检查登录状态,若已登录,则退出登录状态,重新走流程!')
            self.driver.execute_script(
                'window.scrollTo(document.body.scrollWidth,0 );')
            time.sleep(3)
            try:
                element = self.driver.find_element_by_xpath(
                    '//div[@id="nav-user-account"]/div[1]')
                actions = ActionChains(self.driver)
                actions.move_to_element(element)
                actions.perform()
                WebDriverWait(self.driver, 60).until(
                    EC.element_to_be_clickable(
                        (By.XPATH,
                         '//div[@id="nav-user-account"]/div[2]/div[1]/a')))
                self.driver.find_element_by_xpath(
                    '//div[@id="nav-user-account"]/div[2]/div[1]/a').click()
                time.sleep(4)
                # 此处必须有关闭浏览器的操作,否则登录状态退出不彻底,不能正常run回调
                self.driver.close()
            except NoSuchElementException:
                pass
            self.run()
Пример #24
0
 def update_account_login_success_info(data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressUpdateAccountLoginSuccessInfo'
     requests.post(url, data)
     logger.info('对应账户的header和cookies字段已成功修改!')
Пример #25
0
                index = json.loads(json_data)['last_index'] + 1
                if index == len(Email_Domains):
                    index = 0
            else:
                index = 0
        # Email = random.choice(Upper_Letter_List) + ''.join(random.sample(Lower_Letter_List,7)) + ''.join(random.sample(Digit_List,3)) + '@' + Email_Domains[index]
        Email = random.choice(names) + random.choice(names) + ''.join(
            random.sample(Digit_List, 3)) + '@' + Email_Domains[index]
        print(Email)
        url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressAutoCreateAccountGet&country_code={country_code}&validate_email={validateEmail}&dynamic_ip={dynamicIp}'.format(
            country_code='DE', validateEmail=Email, dynamicIp=ip)
        resp = tools.get(s, url=url)
        if resp:
            if resp.json().get('code') == 200:
                user_infos = resp.json()
                #由于接口一次只返回一个待注册用户的数据,默认只创建一个子线程去执行注册流程
                for i in range(0, 1):
                    t = threading.Thread(target=main,
                                         args=(user_infos, proxies['https'],
                                               index, register_city))
                    t.start()
                    t.join()
            else:
                # logger.info('未获取到待注册账户的数据,程序结束!')
                # sys.exit(0)
                logger.info('当前无注册任务,程序[sleep 10m]...')
                time.sleep(60 * 10)
        else:
            logger.info('任务系统出错,程序[sleep 10m]...')
            time.sleep(60 * 10)
Пример #26
0
 def insert_account_login_log(data):
     url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressInsertAccountLoginLog'
     requests.post(url, data)
     logger.info('账户登录日志已成功插入!')
Пример #27
0
 def refund(self):
     # 点击首页中的"My Orders",进入个人订单页面
     WebDriverWait(self.driver, 40).until(
         EC.element_to_be_clickable(
             (By.XPATH, '//div[@id="user-benefits"]//ul/li[2]/a')))
     self.driver.find_element_by_xpath(
         '//div[@id="user-benefits"]//ul/li[2]/a').click()
     #搜索按钮可点击
     WebDriverWait(self.driver, 40).until(
         EC.element_to_be_clickable((By.ID, 'id="search-btn"')))
     #先找到所有的订单items,再根据订单号或者商品asin,定位到目标订单所在的item
     items = self.driver.find_elements_by_xpath(
         '//*[@id="buyer-ordertable"]/tbody')
     for item in items:
         if item.find_element_by_xpath(
                 './tr[1]/td[2]/p[1]/span[2]').text == orderno:
             logger.info('找到目标订单所在的tbody!')
             #根据当前订单的状态做判断
             if item.find_element_by_xpath('./tr[2]/td[3]/span').text.strip(
             ) == 'Fund Processing':
                 #点击'Open Dispute',此时会打开一个新的页面,需要进行窗口的切换
                 item.find_element_by_xpath('./tr[2]/td[2]/span/a').click()
                 self.driver.switch_to.window(self.driver.window_handles[1])
                 time.sleep(5)
                 #在新页面中执行下拉滚动条,再次点击'Open Dispute'
                 self.driver.execute_script(
                     'window.scrollTo(0,document.body.scrollHeight)')
                 WebDriverWait(self.driver, 40).until(
                     EC.element_to_be_clickable(
                         (By.XPATH,
                          '//*[@id="TP_ProductTable"]/tbody/tr/td[5]/a')))
                 self.driver.find_element_by_xpath(
                     '//*[@id="TP_ProductTable"]/tbody/tr/td[5]/a').click()
                 #页面跳转,点击'Refund Only'按钮
                 WebDriverWait(self.driver, 40).until(
                     EC.element_to_be_clickable((By.ID, 'submit-ro')))
                 self.driver.find_element_by_id('submit-ro').click()
                 #页面跳转,进入refund页面
                 #url: https://trade.aliexpress.com/issue/fastissue/createIssueStep2.htm?orderId=99723247396644&issueId=400930414496644&solutionType=ro
                 #i want to apply for: 下拉列表选择默认即可,不操作
                 #Did you receive the item? 选择是
                 WebDriverWait(self.driver, 40).until(
                     EC.element_to_be_clickable((
                         By.XPATH,
                         '//div[@id="is_received_c"]/div[2]/div[1]/input')))
                 self.driver.find_element_by_xpath(
                     '//div[@id="is_received_c"]/div[2]/div[1]/input'
                 ).click()
                 #选择否
                 # self.driver.find_element_by_xpath('//div[@id="is_received_c"]/div[2]/div[2]/input').click()
                 #做出选择后,下方会插入一个下拉选择,Reason for refund request
                 time.sleep(5)
                 self.driver.find_element_by_id('problem_type2').click()
                 time.sleep(3)
                 #点击'Product not as described'
                 self.driver.find_element_by_xpath(
                     '/html/body/div[9]/ul/li[2]').click()
                 time.sleep(5)
                 #点击'Please specify the reason'
                 time.sleep(3)
                 #点击'Style not as described'
                 self.driver.find_element_by_xpath(
                     '/html/body/div[10]/ul/li[2]').click()
                 time.sleep(random.randint(2, 5))
                 #Refund Amount
                 self.driver.find_element_by_id('refund-amount').send_keys(
                     actual_order_amount)
                 time.sleep(random.randint(2, 5))
                 self.driver.find_element_by_id(
                     'request-detail-txt').send_keys(
                         'very bad qualiy,and the style is not as described'
                     )
                 #上传图片
                 time.sleep(random.randint(2, 5))
                 self.driver.find_element_by_xpath(
                     '//*[@id="imageUploader"]/button').send_keys('图片路径')
                 time.sleep(10)
                 self.driver.find_element_by_id('videoUploader').send_keys(
                     '视频路径')
                 time.sleep(30)
                 #点击提交
                 self.driver.find_element_by_id('submit').submit()
                 #提交后的url:https://trade.aliexpress.com/issue/fastissue/Detail.htm?issueId=400930414496644&buyerAliid=1959146644
                 time.sleep(15)
                 if 'fastissue/Detail' in self.driver.current_url:
                     logger.info('已成功提交退款申请!')
         break
         self.driver.quit()
         logger.info('当前账户操作完毕,关闭当前浏览器!')
Пример #28
0

def main(task_infos, task_id):
    spider = AliexpressRefundSpider(task_infos, task_id)
    spider.run()


if __name__ == '__main__':
    # 多线程循环模式:默认一次最多获取5个待评论任务,自动根据获取到的任务数量创建相应数量的线程数,去执行各自分配到的刷单任务;当获取不到任务时,程序退出。
    #修改limit参数即可设置获取的任务数量,现在是1
    # while True:
    url = 'http://third.gets.com/api/index.php?sec=20171212getscn&act=aliexpressGetTaskOrdersList2&get_type=3&limit=1&debug_list=0&debug_allot=0'
    resp = requests.get(url)
    try:
        if resp.json() == []:
            logger.info('未获取到待刷单列表的数据,程序结束!')
            sys.exit(0)
        else:
            task_infos = resp.json()
            task_id_str_list = []
            for task_id_str in task_infos:
                task_id_str_list.append(task_id_str)
            logger.info('成功获取到%d条待评论的数据!' % len(task_id_str_list))
            logger.info('将创建%d个线程来分别执行评论任务!' % len(task_id_str_list))
            threads = []
            for i in range(len(task_id_str_list)):
                task_id = int(task_id_str_list[i])
                t = threading.Thread(target=main, args=(task_infos, task_id))
                threads.append(t)
                t.start()
Пример #29
0
    def register(self):
        try:
            self.driver.get(
                'https://login.aliexpress.com/join/buyer/expressJoin.htm')
            WebDriverWait(driver=self.driver, timeout=30).until(
                EC.element_to_be_clickable(
                    (By.XPATH, '//input[@placeholder="Email address"]')))
            self.driver.find_element_by_xpath(
                '//input[@placeholder="Email address"]').send_keys(
                    self.user_info['data']['email']["login_aliexpress_email"])
            time.sleep(random.uniform(4, 6))
            self.driver.find_element_by_xpath(
                '//input[@placeholder="Password"]').send_keys(self.password)
            time.sleep(random.uniform(4, 6))
            js = 'document.getElementById("ws-xman-register-submit").click();'
            self.driver.execute_script(js)
            time.sleep(10)
            self.driver.get(self.index_url)
            try:
                WebDriverWait(self.driver, 20).until(
                    EC.element_to_be_clickable((By.CLASS_NAME, 'close-layer')))
                self.driver.find_element_by_class_name('close-layer').click()
            except TimeoutException:
                pass
            # time.sleep(5)
            # self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            # time.sleep(3)
            # if  'Hi, US' in self.driver.page_source:
            # time.sleep(10)
            try:
                WebDriverWait(driver=self.driver, timeout=30).until(
                    EC.element_to_be_clickable(
                        (By.XPATH, '//div[@class="username"]/a[1]')))
                text = self.driver.find_element_by_xpath(
                    '//div[@class="username"]/a[1]/span').text.strip()
                if 'DE' in text:
                    self.set_user_info()
                    time.sleep(10)
                    if 'successfully submitted' in self.driver.page_source:
                        logger.info('个人信息设置成功!success!')
                        self.do_after_set_user_info_success()
                        self.driver.quit()
                        sys.exit(0)
                    else:
                        logger.info('个人信息设置失败!failed,Quit!')
                        self.driver.quit()
                        sys.exit(0)
                else:
                    logger.info('注册出错,程序结束!')
                    self.driver.quit()
                    sys.exit(0)
            except TimeoutException:
                pass

            if re.search(r', DE!', self.driver.page_source):
                self.set_user_info()
                time.sleep(10)
                if 'successfully submitted' in self.driver.page_source:
                    logger.info('个人信息设置成功!success!')
                    self.do_after_set_user_info_success()
                    self.driver.quit()
                    sys.exit(0)
                else:
                    logger.info('个人信息设置失败!failed,Quit!')
                    self.driver.quit()
                    sys.exit(0)
            else:
                logger.info('注册出错,程序结束!')
                self.driver.quit()
                sys.exit(0)
        except TimeoutException:
            logger.info('等待超时,程序终止!')
            self.driver.quit()
            sys.exit(0)
Пример #30
0
    def set_user_info(self):
        logger.info('正在设置用户的基本信息...')
        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.element_to_be_clickable(
                (By.XPATH, '//div[@class="fast-entry"]/ul/li[1]/a')))
        self.driver.find_element_by_xpath(
            '//div[@class="fast-entry"]/ul/li[1]/a').click(
            )  #'My Aliexpress/Accout'

        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.element_to_be_clickable((By.ID, 'headMenu_account')))
        self.driver.find_element_by_id('headMenu_account').click()  #'Account'

        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.element_to_be_clickable(
                (By.XPATH,
                 '//div[@class="me-menu-body"]/p[@class="me-menu-title"]/a')))
        self.driver.find_element_by_xpath(
            '//div[@class="me-menu-body"]/p[@class="me-menu-title"]/a').click(
            )  #'Edit Settings'
        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.element_to_be_clickable(
                (By.XPATH, '//div[@id="settings-panel"]/div[1]/ul/li[2]/a')))
        self.driver.find_element_by_xpath(
            '//div[@id="settings-panel"]/div[1]/ul/li[2]/a').click(
            )  #'Edit Member Profile'
        time.sleep(5)
        # 此处切换选项卡
        self.driver.switch_to.window(self.driver.window_handles[1])
        #点击"edit"
        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.element_to_be_clickable(
                (By.XPATH, '//a[@class="dpl-btn to-edit-btn"]')))
        self.driver.find_element_by_xpath(
            '//a[@class="dpl-btn to-edit-btn"]').click()
        #开始编辑
        WebDriverWait(driver=self.driver, timeout=30).until(
            EC.presence_of_element_located(
                (By.XPATH,
                 '//table[@class="tables V"]/tbody/tr[1]/td/div[1]/input')))
        time.sleep(10)
        truename = self.user_info['data']['address']['truename']
        if re.search(r"[^A-Za-z\s]", truename):
            truename = re.sub(r"[^A-Za-z\s]", '', truename)
        print(truename)
        # time.sleep(60)
        if len(truename.split()) == 1:
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[1]/input'
            ).clear()
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[1]/input'
            ).send_keys(truename.split()[0])
            time.sleep(random.uniform(0.5, 1.0))
            # time.sleep(60)
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[2]/input'
            ).clear()
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[2]/input'
            ).send_keys(truename.split()[0])
        else:
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[1]/input'
            ).clear()
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[1]/input'
            ).send_keys(truename.split()[0])
            time.sleep(random.uniform(0.5, 1.0))
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[2]/input'
            ).clear()
            self.driver.find_element_by_xpath(
                '//table[@class="tables V"]/tbody/tr[1]/td/div[2]/input'
            ).send_keys(truename.split()[1])
        time.sleep(random.uniform(0.5, 1.0))
        # sys.exit(0)
        self.driver.find_element_by_id('mr').click()  #性别,选女
        time.sleep(random.uniform(0.5, 1.0))
        street = self.user_info['data']['address']["address_line1"]
        if re.search(r"[^A-Za-z\s]", street):
            street = re.sub(r"[^A-Za-z\s]", '', street)
        self.driver.find_element_by_xpath(
            '//table[@class="contact-address"]/tbody/tr[1]/td/input'
        ).send_keys(street)  #街道
        time.sleep(random.uniform(0.5, 1.0))
        city = self.user_info['data']['address']["city"]
        if re.search(r"[^A-Za-z\s]", city):
            city = re.sub(r"[^A-Za-z\s]", '', city)
        self.driver.find_element_by_xpath(
            '//table[@class="contact-address"]/tbody/tr[2]/td/input'
        ).send_keys(city)  #城市
        time.sleep(random.uniform(0.5, 1.0))
        state_region = self.user_info['data']['address']["state_region"]
        if re.search(r"[^A-Za-z\s]", state_region):
            state_region = re.sub(r"[^A-Za-z\s]", '', state_region)
        self.driver.find_element_by_xpath('//input[@id="province"]').send_keys(
            state_region)  # 省或州,非select
        # state_selectBtn = Select(self.driver.find_element_by_id('usProvinceList'))#州或者省
        # try:
        #     state_selectBtn.select_by_visible_text(self.user_info['data']['address']["state_region"])
        # except Exception:
        #     logger.info('从接口获取的StateOrRegion信息对应不上,默认为下拉列表的第一个州或地区!')
        #     StateOrRegion = self.driver.find_element_by_xpath('//select[@id="usProvinceList"]/option[2]').text
        #     print(StateOrRegion)
        #     state_selectBtn.select_by_visible_text(StateOrRegion)
        time.sleep(random.uniform(0.5, 1.0))
        self.driver.find_element_by_xpath(
            '//table[@class="contact-address"]/tbody/tr[5]/td/input'
        ).send_keys(self.user_info['data']['address']["postal_code"])  #邮编
        # 电话号码需要处理,若有"+4"前缀,则去掉"+4"前缀
        PhoneNumber = self.user_info['data']['address']["mobile"]
        if re.search(r'\+4|\s|\(|\)|Â|\+', PhoneNumber):
            PhoneNumber = re.sub(r'\+4|\s|\(|\)|Â|\+', '', PhoneNumber)
        time.sleep(random.uniform(0.5, 1.0))
        self.driver.find_element_by_xpath(
            '//*[@id="GroupListForm"]/table/tbody/tr[6]/td/table/tbody/tr/td[3]/input'
        ).send_keys(PhoneNumber)
        time.sleep(random.uniform(0.5, 1.0))
        self.driver.find_element_by_id('formSubmit').submit()
        logger.info('点击提交个人信息的设置!')