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实现爬虫下载漫画示例
Feb 16 Python
python自动化测试之setUp与tearDown实例
Sep 28 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python探索之修改Python搜索路径
Oct 25 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
详解Python的循环结构知识点
May 20 Python
python cumsum函数的具体使用
Jul 29 Python
Python使用pyenv实现多环境管理
Feb 05 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 Python
Python可视化学习之seaborn绘制矩阵图详解
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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
JS动画效果代码3
2008/04/03 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
PyQt5每天必学之弹出消息框
2018/04/19 Python
python 判断网络连通的实现方法
2018/04/22 Python
Python IDLE清空窗口的实例
2018/06/25 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
python如何运行js语句
2020/09/09 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
学校爱心捐款倡议书
2014/05/13 职场文书
小学运动会开幕词
2015/01/28 职场文书
会议通知范文
2015/04/15 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
服装店员工管理制度
2015/08/07 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS