python3.7+selenium模拟淘宝登录功能的实现


Posted in Python onMay 26, 2020

在使用selenium去获取淘宝商品信息时会遇到登录界面

python3.7+selenium模拟淘宝登录功能的实现

这个登录界面处理的难度在于滑动验证的实现,有的人使用微博登录,避免了滑动验证,那可不可以使用密码登录呢?答案是可以的

实现思路

首先导入需要的库

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

1. 定位登录元素,点击跳转

python3.7+selenium模拟淘宝登录功能的实现

代码如下:

password_login = self.wait.until(
 EC.presence_of_element_located((By.XPATH,"//div[@class='site-nav-sign']//a[@class='h']")))
 password_login.click()

这样就可以从首页跳转到登录页面

2. 获取用户和密码输入框,并输入信息

input_user = self.wait.until(
 EC.presence_of_element_located((By.XPATH,"//div[@class='input-plain-wrap input-wrap-loginid ']//input[@class='fm-text']")))
 input_user.send_keys('用户')

 input_password = self.browser.find_element_by_xpath("//div[@class='input-plain-wrap input-wrap-password']//input[@class='fm-text']")
 input_password.send_keys('密码')

3. 获取滑块元素

slider = self.wait.until(
 EC.element_to_be_clickable(
 (By.XPATH, '//div[@class="scale_text slidetounlock"]//span[@class="nc-lang-cnt"]')))

4. 滑块运动路径的实现

distance = 260
 track = []
 current = 0
 # mid = distance*3/13
 t = 1
 v= 260
 if current < distance:
 x = v*t
 current = current+x
 track.append(round(x))

这里的260是根据框的大小计算出来的

python3.7+selenium模拟淘宝登录功能的实现

从图中我们可以看出来,框的大小是300*40,所以滑动距离是260

5. 按照运动路径拖动滑块

ActionChains(self.browser).click_and_hold(slider).perform()
 for i in tracks:
 ActionChains(self.browser).move_by_offset(xoffset=i,yoffset=0).perform()
 time.sleep(1)
 ActionChains(self.browser).release().perform()

6. 最后一步:获取登录按钮,点击登录

button = self.wait.until(
 EC.element_to_be_clickable((By.XPATH,"//div[@class='fm-btn']//button[@type='submit']")))
 button.click()

代码整理

# encoding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
import time
class Taobao_login(object):
 def __init__(self):
 self.browser = webdriver.Chrome()
 self.browser.get('https://www.taobao.com')
 self.wait = WebDriverWait(self.browser,10)
 #登录操作
 def _put_info(self):
 #等待密码登录选项出现并跳转登录页面
 password_login = self.wait.until(
 EC.presence_of_element_located((By.XPATH,"//div[@class='site-nav-sign']//a[@class='h']")))
 password_login.click()
 #登录
 input_user = self.wait.until(
 EC.presence_of_element_located((By.XPATH,"//div[@class='input-plain-wrap input-wrap-loginid ']//input[@class='fm-text']")))
 input_user.send_keys('用户')
 input_password = self.browser.find_element_by_xpath("//div[@class='input-plain-wrap input-wrap-password']//input[@class='fm-text']")
 input_password.send_keys('密码')
 def _get_track(self):
 '''
 获取运动轨迹
 :return: 运动轨迹
 '''
 #滑动验证
 distance = 260
 track = []
 current = 0
 # mid = distance*3/13
 t = 1
 v= 260
 if current < distance:
 x = v*t
 current = current+x
 track.append(round(x))
 return track
 def _get_slider(self):
 '''
 获取滑块
 :return: 滑块对象
 '''
 slider = self.wait.until(
 EC.element_to_be_clickable(
 (By.XPATH, '//div[@class="scale_text slidetounlock"]//span[@class="nc-lang-cnt"]')))
 return slider
 def _move_to_gap(self,slider,tracks):
 '''
 按照tracks拖动滑块
 :param spider: 滑块
 :param tracks: 轨迹
 :return:
 '''
 ActionChains(self.browser).click_and_hold(slider).perform()
 for i in tracks:
 ActionChains(self.browser).move_by_offset(xoffset=i,yoffset=0).perform()
 time.sleep(1)
 ActionChains(self.browser).release().perform()
 def _login(self):
 #点击登录
 button = self.wait.until(
 EC.element_to_be_clickable((By.XPATH,"//div[@class='fm-btn']//button[@type='submit']")))
 button.click()
 time.sleep(1)
 def run(self):
 self._put_info()
 time.sleep(1)
 # tracks = self._get_track()
 # slider = self._get_slider()
 # self._move_to_gap(slider,tracks)
 # time.sleep(1)
 # self._login()
if __name__ == '__main__':
 login = Taobao_login()
 login.run()

总结

到此这篇关于python3.7+selenium模拟登录淘宝的文章就介绍到这了,更多相关Python selenium模拟淘宝登陆内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python3 与python2 异常处理的区别与联系
Jun 19 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
python设置 matplotlib 正确显示中文的四种方式
May 10 Python
Python语言内置数据类型
Feb 24 Python
TensorFlow固化模型的实现操作
May 26 #Python
Python 如何批量更新已安装的库
May 26 #Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 #Python
Python自定义聚合函数merge与transform区别详解
May 26 #Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 #Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 #Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 #Python
You might like
高亮度显示php源代码
2006/10/09 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
java直接调用python脚本的例子
2014/02/16 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
CSS3 分类菜单效果
2019/05/27 HTML / CSS
物流管理专业应届生求职信
2013/11/21 职场文书
优秀员工表扬信
2014/01/17 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
2016七夕情人节感言
2015/12/09 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android