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 转义字符详细介绍
Mar 21 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
Apr 02 Python
python查看列的唯一值方法
Jul 17 Python
Python中的Numpy矩阵操作
Aug 12 Python
python批量复制图片到另一个文件夹
Sep 17 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
对python3中, print横向输出的方法详解
Jan 28 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 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
Zend studio文件注释模板设置方法
2013/09/29 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
什么是数据抽象
2016/11/26 面试题
业务部主管岗位职责
2014/01/29 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
公司离职证明范本
2014/10/17 职场文书
师范生见习报告范文
2014/11/03 职场文书
公司总经理岗位职责
2015/04/01 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
小学生暑假生活总结
2015/07/13 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js