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 解析XML文件
Apr 15 Python
Python3基础之函数用法
Aug 13 Python
用Python编写一个基于终端的实现翻译的脚本
Apr 24 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python脚本处理空格的方法
Aug 08 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
JavaScript window.location对象
2014/11/14 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
Python解析xml中dom元素的方法
2015/03/12 Python
Python调用C语言开发的共享库方法实例
2015/03/18 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
Django如何使用redis作为缓存
2020/05/21 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
岗位聘任书范文
2014/03/29 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
html5实现点击弹出图片功能
2021/07/16 HTML / CSS