淘宝模拟登陆实现

由于淘宝使用了滑动验证码,需要进行模糊手动滑动,因此考虑使用selenium+chromedriver进行模拟登陆。

淘宝的登陆网址:https://login.taobao.com/member/login.jhtml

项目运行准备:

安装python3开发环境,官网自行下载,博主版本为3.7

安装chrome游览器,下载地址:https://www.google.cn/chrome/

安装selenium模块,在终端中输入pip3 install selenium

安装chromedriver驱动,下载地址:http://npm.taobao.org/mirrors/chromedriver/

注意:

  • 在下载chromedriver驱动的时候,需要与chrome游览器的版本尽量保持一致,查看chrome游览器版本方法,在谷歌游览器访问:chrome://settings/help这个网址

项目需要使用的所有模块

import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

初始化selenium并加载chromedriver驱动

class TB(object):
def __init__(self, *args, **kwargs):
"""
初始化游览器版本
"""
option = webdriver.ChromeOptions()
self.webdriver_obj = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=option)
# 跳过阿里滑动验证码对selenium的校验
self.webdriver_obj.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
'''
})

封装隐式等待进行xpath定位

由于selenium隐式等待进行xpath定位找不到会报错,项目中多次使用这一段代码,因此对这一部分代码进行封装,封装之后的代码如下:

def xpath(self, xpath_bas):
try:
element = WebDriverWait(self.webdriver_obj, 10).until(
EC.presence_of_element_located((By.XPATH, xpath_bas))
)
except:
element = []
finally:
return element

进行登录标签的定位,输入账号,密码操作

    def login(self,username='', password=''):
url = 'https://login.taobao.com/member/login.jhtml'
self.webdriver_obj.get(url)
self.xpath('//*[@id="fm-login-id"]').send_keys(username) # 定位账号输入框,并输入账号
self.xpath('//*[@id="fm-login-password"]').send_keys(password) # 定位密码输入框,并输入密码
self.xpath('//*[@id="login-form"]/div[4]/button').click() # 第一次点击登录按钮
time.sleep(5)
check_yzm_span = self.xpath('//*[@id="nc_1_n1z"]') # 延时定位滑动验证码标签,避免点击登录按钮之后,出现滑动验证码,不需要验证的情况
if bool(check_yzm_span):
print('登录发现滑动验证码')
self.check_yzm(check_yzm_span) # 处理滑动验证码
else:
print('登录未发现滑动验证码')
try:
frame = self.xpath('//*[@id="content"]/div/div[1]/iframe') # 定位iframe标签,由于iframe没有id,name这种唯一的属性,因此只能通过先定位,在切换实现
self.webdriver_obj.switch_to.frame(frame) # 由于手机验证页面出现了页面的嵌套,因此需要进行页面跳转到iframe下
check_phone_button = self.xpath('//*[@id="J_GetCode"]')
print('登录发现手机验证码')
self.check_phone_yzm(check_phone_button) # 处理手机登录验证码
except:
print('登录未发现手机验证码')
finally:
print('登陆成功')

处理滑动验证码

定位到滑块的标签



定位滑动槽的标签



通过定位发现滑动槽的长度是300,滑块的长度是40,因此需要滑动的距离大约是260.

因此可以通过ActionChains动作链实现对滑动的拖动操作,具体代码如下:

    def check_yzm(self, check_yzm_span):
"""
处理滑动验证码,没有测试
:param check_yzm_span:
:return:
"""
# 实例化一个动作链关联游览器
action = ActionChains(self.webdriver_obj)
# 使用鼠标动作链进行点击并悬浮
action.click_and_hold(check_yzm_span)
# 滑动验证码
action.move_by_offset(xoffset=258, yoffset=0).perform()
time.sleep(1)
# 再次点击登录按钮
self.xpath('//*[@id="login-form"]/div[4]/button').click()

处理手机验证码

在点击登录之后,淘宝会进行身份验证,就是让你输入手机验证码,然后对验证码进行输入后,才能让你登录成功。



发现,淘宝这个页面出现了页面的嵌套,并且iframe没有id,name这样唯一的属性值,因此只能通过先对iframe标签进行定位,然后通过switch_to进行页面的切换。

切换页面之后,剩下的思路就是点击获取验证码按钮,输入验证码,点击确认按钮。具体实现代码如下:

    def check_phone_yzm(self, check_phone_button):
check_phone_button.click()
yzm = input('请输入手机验证码:')
self.xpath('//*[@id="J_Phone_Checkcode"]').send_keys(yzm)
self.xpath('//*[@id="submitBtn"]').click()

最后登陆成功之后的截图如下:

selenium模拟淘宝登陆,过所有验证的更多相关文章

  1. 【Python】selenium模拟淘宝登录

    # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By f ...

  2. 使用selenium实现模拟淘宝登陆

    from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.w ...

  3. php单点登录之模拟淘宝天猫同步登录

    说到单点登录大家都很了解,一个站点登录其他域会自动登录. 单点登录SSO(Single Sign On)的方法有很多,比如:p3p.共享session.共享cookice.第三方OAuth认证. 这里 ...

  4. selenium实现淘宝的商品爬取

    一.问题 本次利用selenium自动化测试,完成对淘宝的爬取,这样可以避免一些反爬的措施,也是一种爬虫常用的手段.本次实战的难点: 1.如何利用selenium绕过淘宝的登录界面 2.获取淘宝的页面 ...

  5. 模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能

    Login <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  6. 【Python】使用Selenium实现淘宝抢单

    最近,小明为了达成小姐姐的愿望,在某宝买到心仪的宝贝,再加上又迷上了python,就通过python轻而易举地实现了(个人声明:对Java来说,这并不是背叛). 需求分析&前期准备 需求其实很 ...

  7. 九、Python+Selenium模拟用QQ登陆腾讯课堂,并提取报名课程(练习)

    研究QQ登录规则的话,得分析大量Javascript的加密解密,比较耗时间.自己也是练习很少,短时间成功不了.所以走了个捷径. Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏 ...

  8. 爬虫实战【8】Selenium解析淘宝宝贝-获取多个页面

    作为全民购物网站的淘宝是在学习爬虫过程中不可避免要打交道的一个网站,而是淘宝上的数据真的很多,只要我们指定关键字,将会出现成千上万条数据. 今天我们来讲一下如何从淘宝上获取某一类宝贝的信息,比如今天我 ...

  9. 模拟淘宝购物,运用cookie,记录登录账号信息,并且记住购物车内所选的商品

    1.登录界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

随机推荐

  1. Vue+nodejs+npm完美结合入门==vue入门

    因为我的是win7系统 64位 只能下载低版本的nodjs: 传送门:https://nodejs.org/dist/v9.7.1/ 一.使用之前,我们先来掌握3个东西是用来干什么的. npm: No ...

  2. 安装vmware tool

    首先简单介绍一下vmware tool的作用: 1.最大的好处是可以直接把windows界面的文件拖进linux虚拟机内. 2.鼠标可以直接从虚拟机移动到windows等等好处. 步骤 1.点击虚拟机 ...

  3. BurpSuite多重代理的情形

    有时候为了隐藏自己的真实IP,访问目标网站需要走代理.比如说,通过代理IP访问目标网站并且代理IP可以随时切换,这样可以避免IP被封堵后无法访问目标网站的尴尬. 一. 首先把代理切换为全局模式 操作步 ...

  4. Android10_原理机制系列_Activity窗口添加到WMS过程

    前言 首先看一个Android界面的布局层次结构,最直观的看一下: 我们能清晰看到,这个界面分成了3部分:顶部状态栏(statusbar).底部导航栏(navigationbar).应用界面. 题外话 ...

  5. Redis 未授权访问漏洞批量提权

    一.getshell前提 ①能有对 /root/.ssh/目录写入的权限 ②目标机开启22端口 二.安装依赖 sudo easy_install redis 三.使用 redis python hac ...

  6. Python:安装Bio库不成功,出现ModuleNotFoundError: No module named 'Bio'

    Bio库的安装并不是pip install bio,而是biopython. ./anaconda3/bin/pip3 install biopython -i https://pypi.douban ...

  7. [转载]Redis 持久化之RDB和AOF

    原文链接:https://www.cnblogs.com/itdragon/p/7906481.html 温馨提示 在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb ...

  8. BT下载器Folx中删除任务与删除文件的功能区别

    当用户使用Folx完成了任务下载后,该任务仍会保留在下载列表中,并标注"已结束"的标记.随着使用时间的增长,Folx下载列表中会包含过多的"已结束"任务,用户需 ...

  9. 使用CleanMyMac快速管理应用程序 优化Mac

    CleanMyMac作为一款专业的苹果电脑清理软件,它不仅仅能单纯的卸载不用.少用的应用,同时还支持:1.清理应用程序的数据文件,将应用重置回初始状态,减少空间占用:2.自动检查应用更新,保持应用的最 ...

  10. 利用css3和js实现旋转木马图片小demo

    先看效果图: 上源码 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...