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 ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python采用raw_input读取输入值的方法
Aug 18 Python
python 环境变量和import模块导入方法(详解)
Jul 11 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
Python numpy 点数组去重的实例
Apr 18 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
python 动态迁移solr数据过程解析
Sep 04 Python
Python缓存技术实现过程详解
Sep 25 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
php mysql索引问题
2008/06/07 PHP
php5.3 注意事项说明
2013/07/01 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
js CSS操作方法集合
2008/10/31 Javascript
详解js闭包
2014/09/02 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
python 网络爬虫初级实现代码
2016/02/27 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
工程概预算专业毕业生求职信
2013/10/04 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
筑梦中国心得体会
2016/01/18 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle
mysql查询结果实现多列拼接查询
2022/04/03 MySQL