python3.7+selenium模拟淘宝登录功能的实现
作者:执孤灯立彻明 发布时间:2022-03-05 01:26:27
标签:Python,selenium,登陆
在使用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. 定位登录元素,点击跳转
代码如下:
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是根据框的大小计算出来的
从图中我们可以看出来,框的大小是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()
来源:https://blog.csdn.net/weixin_45671865/article/details/106315545
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- SQL的扩展的删除与恢复 删除 代码如下:use master exec spdropextendedproc “xpcmdshell“ e
- SqlBulkCopy 来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。 在网上找了下,大都说是因为数
- 由于计算机软件的非法复制,通信的泄密、数据安全受到威胁。一般为了安全,会要求将数据库名称、密码等信息进行加密。所以加密在开发过程中是经常使用
- 《Patterns for Sign Up &Ramp Up》很早就读完了,之所以今天才写读后感,细细读完了发现,它更为接近吸引注册
- 选择自 xinyuxin912 的 Blog将一个图片以二进制值的形式存入Xml文件中try { &nbs
- CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position。1. positio
- asp三天学好ADO对象之第二天 今天来说一下Recordset对象的一些方法。1、AddNew 方法创建可更新 Recordset 对象的
- 1 硬件设备TTL串口摄像头(VC0706)USB转TTL烧录器2 serial安装第一次安装的是serial的包导包的时候发现下载错了,正
- 做网站数据库,是选SQL Server还是Access好,可能您会说:选MySQL好,不过现在只是讨论IIS+ASP这种架构下的选择,不讨论
- 如何剔除HTML标识?这里没有使用正则表达式来去除,当然大家用正则"<.+?>"也可以实现这个功能只留下干净
- 前面已经了解了关于PL/SQL编程的基础,本文将结合一个案例来加深对这些知识点的理解。一. 案例介绍 某数据库有两张表,是关于某公司员工资料
- 我们在做表单的时候经常会使用到这样的结构:<fieldset> <lege
- 下面给出ORACLE的一种实现方式,要分2步走:1. 建立 SEQUENCE CREATE [ OR REPLACE ] SEQUENCE
- JavaScript游戏开发之键盘控制层的移动截图:<html> <head> <meta http-equi
- 鉴于ASP脚本语言是在服务器端IIS或PWS中解释和运行,并可动态生成普通的HTML网页,然后再传送到客户端供浏览的这一特点。我们要在本机上
- 本人就职于一个本地门户网站,每天网站上的天气都得更新。久而久之感到相当麻烦,于是写了一个定时的新闻小偷,帖出来大家参考一下系统
- 首先介绍下比较简单但必不可少且实用的知识,可以当手册查询,适合像我一样的新手看。PHP常用库函数介绍一、PHP字符串操作常用函数1.确定字符
- 由于XML本身的诸多优点,XML技术已被广泛的使用,目前的好多软件技术同XML紧密相关,比如微软的.net 平台对xml提供了强大的支持,提
- 要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多IE下的显示错误,就
- 本文实例讲述了php基于协程实现异步的方法。分享给大家供大家参考,具体如下:github上php的协程大部分是根据这篇文章实现的:http: