zoukankan      html  css  js  c++  java
  • Amazon后台登陆以及跟卖

    亚马逊模拟登陆,这里使用的是selenium来登陆,并判断是否登陆成功,以及是否有验证码,并破解验证码登陆。

    跟卖主要解决的难题是selenium的新窗口弹出问题,在

    # 点击“出售您的”
    browser.find_element_by_id("a-autoid-2-announce").click()
    

    会弹出一个新的标签页,而browser还是定位在原来的标签页,所以要对标签页进行切换,这里是用到了句柄:

    # 获得当前打开所有窗口的句柄handles
    # handles为一个数组
    handles = browser.window_handles
    # print(handles)
    # 切换到当前最新打开的窗口
    browser.switch_to_window(handles[-1])
    # 输出查看当前窗口的句柄
    # 看看是否切换成功
    # print(browser.current_window_handle)
    # input("是否切换成功...")
    

    最终的跟卖代码如下:

      1 # !/usr/bin/python3.4
      2 # -*- coding: utf-8 -*-
      3 
      4 from selenium import webdriver
      5 import random
      6 from selenium.webdriver.support.select import Select
      7 import time
      8 
      9 
     10 # 打开浏览器并跟卖
     11 def openbrowser(url):
     12     global browser
     13 
     14     # 打开谷歌浏览器
     15     # Firefox()
     16     # Chrome()
     17     browser = webdriver.Chrome()
     18     # 输入网址
     19     browser.get(url)
     20     # 打开浏览器时间
     21     # print("等待10秒打开浏览器...")
     22     # time.sleep(10)
     23 
     24     # 找到id="ap_email"的对话框
     25     # 清空输入框
     26     browser.find_element_by_id("ap_email").clear()
     27     browser.find_element_by_id("ap_password").clear()
     28 
     29     # 输入账号密码
     30     # 输入账号密码
     31     account = []
     32     try:
     33         fileaccount = open("../sellYours/account.txt")
     34         accounts = fileaccount.readlines()
     35         for acc in accounts:
     36             account.append(acc.strip())
     37         fileaccount.close()
     38     except Exception as err:
     39         print(err)
     40         input("请正确在account.txt里面写入账号密码...")
     41         exit()
     42     browser.find_element_by_id("ap_email").send_keys(account[0])
     43     browser.find_element_by_id("ap_password").send_keys(account[1])
     44 
     45     # 点击登陆sign in
     46     # id="signInSubmit"
     47     print("等待网址加载完毕...")
     48     browser.find_element_by_id("signInSubmit").click()
     49 
     50     # 等待登陆10秒
     51     # print('等待登陆10秒...')
     52     # time.sleep(10)
     53 
     54     select = input("请观察浏览器网站是否已经登陆(y/n):")
     55     while 1:
     56         if select == "y" or select == "Y":
     57             print("登陆成功!")
     58 
     59             # 成功登陆后跳出该循环
     60             break
     61 
     62         elif select == "n" or select == "N":
     63             selectno = input("账号密码错误请按0,验证码出现请按1...")
     64             # 账号密码错误则重新输入
     65             if selectno == "0":
     66 
     67                 # 找到id="ap_email"的对话框
     68                 # 清空输入框
     69                 browser.find_element_by_id("ap_email").clear()
     70                 browser.find_element_by_id("ap_password").clear()
     71 
     72                 # 输入账号密码
     73                 account = []
     74                 try:
     75                     fileaccount = open("../sellYours/account.txt")
     76                     accounts = fileaccount.readlines()
     77                     for acc in accounts:
     78                         account.append(acc.strip())
     79                     fileaccount.close()
     80                 except Exception as err:
     81                     print(err)
     82                     input("请正确在account.txt里面写入账号密码")
     83                     exit()
     84 
     85                 browser.find_element_by_id("ap_email").send_keys(account[0])
     86                 browser.find_element_by_id("ap_password").send_keys(account[1])
     87                 # 点击登陆sign in
     88                 # id="signInSubmit"
     89                 print("等待网址加载完毕...")
     90                 browser.find_element_by_id("signInSubmit").click()
     91 
     92             elif selectno == "1":
     93                 # 验证码的id为id="ap_captcha_guess"的对话框
     94                 input("请在浏览器中输入验证码并登陆...")
     95                 select = input("请观察浏览器网站是否已经登陆(y/n):")
     96 
     97         else:
     98             print("请输入“y”或者“n”!")
     99             select = input("请观察浏览器网站是否已经登陆(y/n):")
    100 
    101             # return cookiestr
    102 
    103 
    104 def inputinfo(LoginWhere=0):
    105     # 判断是美国还是日本
    106     Loginurl = ""
    107     if LoginWhere == 0:
    108         Loginurl = "https://sellercentral.amazon.com/"
    109 
    110     elif LoginWhere == 1:
    111         Loginurl = "https://sellercentral.amazon.co.jp/"
    112 
    113     asins = []
    114 
    115     # 读取本地txt的asin
    116     file = open("../sellYours/Asin.txt")
    117     asininfos = file.readlines()
    118     for item in asininfos:
    119         asins.append(item.strip())
    120     file.close()
    121 
    122     # 这里开始登陆
    123     openbrowser(Loginurl)
    124     time.sleep(5)
    125 
    126     for asin in asins:
    127         print("跟卖Asin:" + str(asin))
    128 
    129         # 不知道这样子的referer会不会有事
    130         # 先测试一下子
    131         url = "https://sellercentral.amazon.com/productsearch?q=" + str(asin)
    132         # 输入网址
    133         browser.get(url)
    134 
    135         # 防止未加载完成
    136         time.sleep(5)
    137 
    138         # 点击“出售您的”
    139         browser.find_element_by_id("a-autoid-2-announce").click()
    140 
    141         # 防止未加载完成
    142         time.sleep(5)
    143 
    144         # 获得当前打开所有窗口的句柄handles
    145         # handles为一个数组
    146         handles = browser.window_handles
    147         # print(handles)
    148         # 切换到当前最新打开的窗口
    149         browser.switch_to_window(handles[-1])
    150         # 输出查看当前窗口的句柄
    151         # 看看是否切换成功
    152         # print(browser.current_window_handle)
    153         # input("是否切换成功...")
    154 
    155         # 清空价格数量的输入框
    156         browser.find_element_by_name("standard_price").clear()
    157         browser.find_element_by_name("quantity").clear()
    158 
    159         # 防止未加载完成
    160         time.sleep(1)
    161 
    162         # 随机生成price和quantity
    163         price = str(random.randint(100, 200))
    164         quantity = str(random.randint(30, 100))
    165 
    166         # 填入价格和数量
    167         browser.find_element_by_name("standard_price").send_keys(price)
    168         browser.find_element_by_name("quantity").send_keys(quantity)
    169 
    170         # 定位到下拉框,选择new
    171         sel = browser.find_element_by_xpath("//select[@id='condition_type']")
    172         Select(sel).select_by_value('new, new')
    173 
    174         print("正在写入信息...")
    175         # 防止未加载完成
    176         time.sleep(5)
    177 
    178         # 点击save and finish
    179         browser.find_element_by_id("main_submit_button").click()
    180 
    181         # 判断是否已经跟卖成功
    182         input("看看是否跟卖成功...")
    183 
    184         # 关闭当前打开的新窗口
    185         browser.close()
    186         # 切换回搜索的那个窗口
    187         browser.switch_to_window(handles[0])
    188 
    189 
    190 if __name__ == "__main__":
    191     # 抓取美国为0
    192     # 抓取日本为1
    193     inputinfo(LoginWhere=0)
  • 相关阅读:
    Spring Boot|Async
    SonarQube使用
    大数据|linux权限chmod和chown
    Spring Boot|监控-Actuator
    Docker|部署及简单使用
    Spring|IOC启动流程
    Spring|注解
    Spring|@Autowired与new的区别
    Spring|Spring MVC
    个人站点
  • 原文地址:https://www.cnblogs.com/TTyb/p/6007252.html
Copyright © 2011-2022 走看看