python+selenium实现登录功能

2023-10-29

python+selenium实现登录功能

环境搭建

  1. 安装python(python3.7.2)
    测试是否安装成功:
python --version

在这里插入图片描述
2. 安装selenium (pip install selenium)
3. 安装chorm driver
①. 打开谷歌浏览器, 在地址栏输入 chrome://version/ 查看版本信息
我的版本信息为:
在这里插入图片描述
②. 选择合适版本的驱动下载(上图红框为版本号), 如果没有完全匹配的就选最相似匹配的版本下载。
下载地址:http://chromedriver.storage.googleapis.com/index.html
③. 解压下载的驱动放到指定目录,代码调用时指定该目录即可。
把它放在了selenium下的chrome,代码演示如下:

from selenium import webdriver
chrome_driver = r"C:\Python37\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe"
browser = webdriver.Chrome(executable_path=chrome_driver)

一、163邮箱登录

导包

#导入之前安装的selelnium包
from selenium import webdriver 
#从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠(推迟调用线程的运行)
from time import sleep 

登录163

1. 定位到右上角的密码登录div,通过id=“lbNormal”进行定位,如下图所示:

在这里插入图片描述
代码如下:

    url = 'https://mail.163.com/'
    driver.get(url)
    driver.find_element_by_id("lbNormal").click()

2. 163登陆框是使用iframe进行嵌套的,所以需要先切换到该iframe :

拓展
‘’’
总结一下常见iframe定位方法:
一、非动态的iframe,通常通过以下方式定位:
1.有id,如果唯一,可直接写id
  driver.switch_to.frame(“id”)
2.有name,如果唯一,可直接写name
  driver.switch_to.frame(“name”)
3.无id,无name,可先定位到iframe元素 (该方法也通常用于定位动态ID)
  iframe = driver.find_elements_by_tag_name(“iframe”)[0] (也可以通过Xpath、CSS等定位方法)
  driver.switch_to.frame(iframe)
二、遇到动态Id可以利用xpath等元素属性来定位,下面列举xpath中提供的三个非常好的方法:
1.contains(a, b) 如果a中含有字符串b,则返回true,否则返回false
  driver.find_element_by_xpath("//div[contains(@id, ‘btn-attention’)]")
2.starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false
  driver.find_element_by_xpath("//div[starts-with(@id, ‘btn-attention’)]")
3.ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false
  driver.find_element_by_xpath("//div[ends-with(@id, ‘btn-attention’)]")
‘’’
通过定位我们发现iframe的id为动态id:
#x-URS-iframe1574518750431.98
#x-URS-iframe1574518194045.8706
因此采用下面方式定位到iframe会报错
#driver.switch_to.frame(“x-URS-iframe1574518194045.8706”)
因此采用下面的方式进行定位:

     driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

3. 定位到用户名、密码

    driver.find_element_by_name('email').send_keys(name)
    driver.find_element_by_name('password').send_keys(passwd)

完整的实例代码参见:https://gitee.com/susucodehome/ceshi

二、京东登录

环境搭建

  1. 因为京东的登录涉及到图片滑块的验证,因此需要用到cv2这个包对图片进行处理,直接通过如下方式安装opencv即可。

    pip install opencv-python
    pip install requests
    
  2. 安装Firebug插件,此处我们用的是firebug2.0.19
    Firebug官方网址:https://www.getfirebug.com/

  3. 导包

    import cv2
    import time
    import numpy as np
    from selenium import webdriver
    from urllib import request
    from selenium.webdriver.common.action_chains import ActionChains
    
  4. 使用Firebug下的firepath进行定位,如下图所示:
    使用Firepath插件定位元素

    url = "https://passport.jd.com/new/login.aspx?"
    brower.get(url)
    time.sleep(3)
    #使用xpath定位账户登录
    s1 = r".//*[@id='content']/div[2]/div[1]/div/div[3]/a"
    userlogin = brower.find_element_by_xpath(s1)
    userlogin.click()
  1. 使用函数find_element_by_id()定位用户名密码
    #定位用户名
    username = brower.find_element_by_id("loginname")
    username.send_keys(userid)
    #定位密码
    userpswd = brower.find_element_by_id("nloginpwd")
    userpswd.send_keys(password)
    time.sleep(5)
    定位到登录按钮
    brower.find_element_by_id("loginsubmit").click()

注意:此时还没有登录成功,因为京东有滑块验证,因此接下来对滑块进行分析:
破解滑块验证码最为关键的地方在于找到滑块缺口的位置,找到缺口位置后就可以利用Selenium模拟拖动滑块到指定位置实现破解

----------使用Xpath定位到背景图片-------------

在这里插入图片描述

    # 用于找到登录图片的大图
    s2 = r".//*[@id='JDJRV-wrap-loginsubmit']/div/div/div/div[1]/div[2]/div[1]/img"
    bigimg = brower.find_element_by_xpath(s2).get_attribute("src")

----------使用Xpath定位到滑块图片-------------

在这里插入图片描述

    # 用来找到登录图片的小滑块图片
    s3 = r".//*[@id='JDJRV-wrap-loginsubmit']/div/div/div/div[1]/div[2]/div[2]/img"
    smallimg = brower.find_element_by_xpath(s3).get_attribute("src")

----------获取图片并灰度化-------------

    block = cv2.imread(slideimg, 0)
    template = cv2.imread(backimg, 0)

在这里插入图片描述在这里插入图片描述

# 获取偏移量
result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED)
# 查找block在template中的位置,返回result是一个矩阵,是每个点的匹配结果
x, y = np.unravel_index(result.argmax(), result.shape)
# 获取滑块
element = brower.find_element_by_xpath(s3)
ActionChains(brower).click_and_hold(on_element=element).perform()
ActionChains(brower).move_to_element_with_offset(to_element=element, xoffset=y, yoffset=0).perform()
ActionChains(brower).release(on_element=element).perform()
time.sleep(3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python+selenium实现登录功能 的相关文章

  • 详细分析vcoco2014HOI数据集

    vcoco images 图片 train2014 共82783张 COCO train2014 000000581921 jpg COCO train2014 000000581922 jpg COCO train2014 0000005
  • 记录ubuntu启动卡在logo界面有鼠标进不了桌面的经历,以及安装ubuntu踩的坑

    出现问题前 我之前安装过很多次ubuntu 不管是虚拟机 4 5次 还是双系统 3 4次 每次都是我自己搞崩的 就是我和之前一样开始安装搜狗输入法 之前没出过问题 然后就是这次安装完 我感觉和之前不一样 就是之前不知道为什么安装完会有pin
  • 波兰表达式 - 前,中,后缀表达式计算转换

    先看一个算术题 3 4 5 6 29 前缀表达式 3456 中缀表达式 3 4 5 6 你会算的 后缀表达式 34 5 6 利用栈的特性来运算表达式 当前我只拿到了 3 4 5 6 让我求它的前缀和后缀 求后缀口诀 1 从左到右看 数字忙显
  • ubuntu 提示 Could not get lock /var/lib/dpkg/lock-frontend.的处理办法

    今天可能操作删除某个程序的时候提示无法删除 给锁定了 一直显示 Waiting for cache lock Could not get lock var lib dpkg lock frontend It is held by proce
  • Optimizer trance—mysql进阶(五十三)

    前面介绍了 如果加个format JOSN会把数据以json的格式返回 如果想看查询的额外信息 还可以在explain之后加个show warning查看 其中如果code为1003 则代表message里的内容是mysql优化器优化之后的
  • Python学习十二:Flask框架

    文章目录 一 Flask 简介 1 1 安装虚拟环境 1 1 1 安装Virtualenv 1 1 2 创建虚拟环境 1 1 3 激活虚拟环境 1 2 安装Flask 1 3 第一个Flask 二 Flask基础 2 1 开启调试模式 2
  • Java测试(1)

    1 什么是软件测试 软件测试就是软件测试人员验证软件是否满足用户的需求 测试的时候要测试满足和不满足的数据 2 软件测试和软件开发的区别 1 本身 开发 广度小 专业度高 测试 所需技能比价广泛 但是专业度低 2 软件测试和软件调式 目的
  • 阿里版GPT来袭——“通义千问”

    4月7日 阿里云在官方公众号中宣布 大模型 通义千问 开始邀请测试 你好 我叫通义千问 在 通义千问 的自我介绍中可知 它是达摩院自主研发的预训练语言模型 能够回答问题 创作文字 还能表达观点 撰写代码 基于上述能力 通义千问 认为其可以在
  • 数据仓库的选择

    author skate time 2010 03 11 数据仓库的选择 数据仓库的选择单从技术方面要从服务器硬件 数据库软件 ETL和前端展示软件 存储系统 仓库的架构设计几方面综合考虑 根据数据库的操作类型不同 数据库一般分为OLAP和
  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor解决方式

    启动项目连接oracle数据报 ORA 12505 TNS listener does not currently know of SID given in connect descriptor ORA 12505 TNS 监听程序当前无法
  • .NET网站部署到阿里云服务器经验分享

    由于笔者需要将自己的网站上线 所以第一步就是去买了一个阿里云服务器 想要远程访问的话 首先是云数据库的部署 然后是网站的部署 1 云数据库的部署 过程 在云服务器上下载SQLServer 然后把本地的数据库 架构和数据 使用脚本导出保存 再
  • 【千律】OpenCV基础:Hough圆检测

    环境 Python3 8 和 OpenCV 内容 Hough圆检测 将直角坐标系中的一个圆映射为新坐标系中的一个点 对于原直角坐标系中的每一个圆 可以对应 a b r 这样一个点 这个点即为新三维中的点 标准法实现步骤 1 获取原图像的边缘
  • 如果判断服务器是否在被CC攻击?

    什么是CC攻击 CC攻击的前身名为Fatboy攻击 是利用不断对网站发送连接请求致使形成拒绝服务的目的 攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包 造成对方服务器资源耗尽 一直到宕机崩溃 怎么判断是否被CC攻击 CC攻击主要
  • php怎么获取微信code,PHP tp3.2微信公众号静默授权获取code 获取openid

    PHP tp3 2微信公众号静默授权获取code 获取openid 发布时间 2018 02 24 14 46 浏览次数 1530 标签 PHP tp code openid 一 调用静默授权接口 基于thinkphp3 2的 1 获取co
  • [C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)

    C语言 字符串处理 以指定的字符串分割字符串 支持中文字符 函数StringSplit 分割字符串到一个字符串数组中 其中该数组第0位为分割后字符串的个数 函数StringSplit Struct 以定义一个新结构的方式来实现该函数 C代码
  • 单片机----

    开启内部上拉电阻 pbph 0 1
  • C++多线程并发总结

    文章目录 1 线程创建与管理 1 1 并发与并行 1 2 多线程并发与多进程并发 2 C 线程创建 2 1 std thread 线程同步之互斥锁 std mutex std unique lock lock与unlock保护共享资源 lo
  • Java封装OkHttp3工具类

    一 准备工作 Maven项目在pom文件中引入jar包
  • 阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

    开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立 目前合资股东分别为大众汽车 中国 投资有限公司 中国第一汽车股份有限公司 一汽 大众汽车有限公司 增资扩股将在取得适当监督 包括反垄断 审批后完成 万帮数字能源股份有限公司和安

随机推荐