亚马逊模拟登陆,这里使用的是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)