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