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序列之list和tuple常用方法以及注意事项
Jan 09 Python
python学习数据结构实例代码
May 11 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
Python global全局变量函数详解
Sep 18 Python
python实现名片管理系统
Nov 29 Python
在python中实现强制关闭线程的示例
Jan 22 Python
Python shelve模块实现解析
Aug 28 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
Django 如何实现文件上传下载
Apr 08 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
提升PHP执行速度全攻略
2006/10/09 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
mongodb和php的用法详解
2019/03/25 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
Python实现句子翻译功能
2017/11/14 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Django自带的用户验证系统实现
2020/12/18 Python
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
中间件的定义
2016/08/09 面试题
联谊活动策划书
2014/01/26 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
成龙洗发水广告词
2014/03/14 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
大学生入党自传2015
2015/06/26 职场文书
《春酒》教学反思
2016/02/22 职场文书