Amazon后台登陆以及跟卖

2019-07-02 10:53:56 浏览数 (1)

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

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

代码语言:javascript复制
# 点击“出售您的”
browser.find_element_by_id("a-autoid-2-announce").click()

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

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

最终的跟卖代码如下:

代码语言:javascript复制
  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)

0 人点赞