Python学习内容整理

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()
上一篇 下一篇

猜你喜欢

热点阅读