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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
python实现类的静态变量用法实例
May 08 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
Python网络编程 Python套接字编程
Sep 13 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
python如何删除文件中重复的字段
Jul 16 Python
Python中bisect的用法及示例详解
Jul 20 Python
详解Python中第三方库Faker
Sep 25 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信息函数
2015/10/21 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
vue观察模式浅析
2018/09/25 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
毕业生自我鉴定
2013/12/04 职场文书
给物业的表扬信
2014/01/21 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
简单租房协议书
2014/04/09 职场文书
股权转让协议书范本
2014/04/12 职场文书
干部考核工作总结
2015/08/12 职场文书
详解Python中的for循环
2022/04/30 Python
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript