Selenium 登录淘宝账户密码输入失败
2020-02-08 本文已影响0人
Lorence
前一天文章提到,我曾尝试利用Selenium登录淘宝购物页面,可是登录需要手机扫描二维码。虽然能切换至账户密码页面,但点击登录按钮后,卡在了验证条这个问题上。至今仍无法解决。或许是淘宝的反爬虫机制太厉害了,反正我百度了一轮,也没找到合适的方法。求高人指点。
以下是我的拙略代码,不要笑。。。
# encoding:utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
class Spider: #定义一个叫Spider的类
def __init__(self, url):
self.__base_url = url
self.__headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'} #伪装成浏览器
def get_url(self): #获取URL链接,并打开
global driver
driver.get(self.__base_url)
def login(self):
global driver
if driver.find_element_by_link_text("亲,请登录"): #定位首页的登录文字
driver.find_element_by_link_text("亲,请登录").click() #模拟点击登录
driver.implicitly_wait(10)
#time.sleep(2) #等待一下,避免网页刷新慢时抓不到下面的定位
driver.find_element_by_xpath("//*[@id='J_LoginBox']/div[1]/div[1]").click() #定位登录表单中的切换账户密码位置,因为淘宝的默认登录为二维码扫描
account=driver.find_element_by_xpath("//*[@id='TPL_username_1']") #定位用户名输入框
account.send_keys("xxxxx") #输入账户
password=driver.find_element_by_xpath("//*[@id='TPL_password_1']") #定位密码输入框
password.send_keys("xxxxxx") #输入密码
#以下时尝试处理验证滑块,但失败
while True:
try:
#定位滑块元素
source=driver.find_element_by_xpath("//*[@id='nc_1_n1z']")
#定义鼠标拖放动作
ActionChains(driver).drag_and_drop_by_offset(source,400,0).perform()
#等待JS认证运行,如果不等待容易报错
time.sleep(2)
#查看是否认证成功,获取text值
text=driver.find_element_by_xpath("//div[@id='nc_1__scale_text']/span")
#目前只碰到3种情况:成功(请在在下方输入验证码,请点击图);无响应(请按住滑块拖动);失败(哎呀,失败了,请刷新)
if text.text.startswith(u'请在下方'):
print('成功滑动')
break
if text.text.startswith(u'请点击'):
print('成功滑动')
break
if text.text.startswith(u'请按住'):
continue
except Exception as e:
#这里定位失败后的刷新按钮,重新加载滑块模块
driver.find_element_by_xpath("//div[@id='nocaptcha']/div/span/a").click()
print(e)
time.sleep(3) # 等待停顿时间
driver.find_element_by_xpath("//*[@id='J_SubmitStatic']").click() #定位并点击登录按钮
time.sleep(30)
chromedriver_path = "C:/Users/Lorence/AppData/Local/Programs/Python/Python36-32/Scripts/chromedriver.exe"
option = webdriver.ChromeOptions() #创建Chrome浏览器对象
option.add_experimental_option('excludeSwitches', ['enable-automation']) #设置开发者模式
option.add_argument('--start-maximized') #最大化运行浏览器
driver = webdriver.Chrome(executable_path=chromedriver_path, options=option)
#driver = webdriver.Chrome(chrome_options=option)
spider = Spider("https://www.taobao.com")
spider.get_url()
spider.login()