selenium模拟登录示例

案例1 登录B站

开发语言:Python3.6.5
框架:
selenium自动化测试工具+Chrome浏览器
PIL图形处理库

实现逻辑:
使用selenium驱动Chrome浏览器,访问登录首页,浏览器渲染页面后获取用户和密码输入框,使用selenium自动输入用户名、密码,然后点击登录。最后使用selenium自动完成滑块验证码的验证,完成自动化登录。

页面分析:

  1. 登录页面没有iframe技术,所以不用switch_to.frame
  2. 滑块验证码–验证
  3. selenium库的使用方法
    在这里插入图片描述
import selenium
#package:
#common
    #exceptions 
#webdriver
    #chrome
    #firefox
    #ie
    #opera
    #phantomjs...
    #common
        #action_chains
#导入web驱动
from selenuim.webdriver import Chrome
from selenium.webdriver import Firefox
from selenium.webdriver import Opera
from selenium.webdriver import Ie
from selenium.webdriver import Safari
#使用Chrome浏览器
#打开浏览器
browser = Chrome()

这里需要使用ActionChains类做一些鼠标的操作,具体使用方法如下:

action_chains = ActionChains(browser)
action_chains.click(node) #在当前元素上,点击一次左键
action_chains.click()#无参时在鼠标的当前位置,点击一次左键
action_chains.click_and_hold(node)#点击左键,不起来
action_chains.context_click(node)#右键一次
action_chains.double_click(node)#双击左键
action_chains.drag_and_drop(node1,node2)#拖拽node1到弄node2上
action_chains.drag_and_drop_by_offset(node,xoffset,yoffset) #拖拽node移动一段距离,瞬间完成

#因为是模拟人点击滑动,所以先click_and_hold,然后每次移动一点move_by_offset
action_chains.click_and_hold(node).perform()
#使用新对象移动
ActionChains(browser).move_by_offset(xoffset,yoffset).perform()
#最后释放
action_chains.pause(0.5).release().perform()
每个动作都要.perform()来执行

碰到的问题:

  1. 驱动版本不支持当前浏览器版本
    查看浏览器版本–>右上角三个点–>帮助–>关于Google Chrome
    版本 92.0.4515.131(正式版本) (64 位)
    下载对应版本的驱动:
    具体方式参考
    问题成功解决!!

  2. 滑块验证码,且缺口位置随机变化,很难确定滑动的距离。
    解决:找到验证码所在的位置,获取完整背景图和带缺口的图,对比两张图形的像素,获取滑块到缺口的距离。然后模拟人滑动滑块到缺口位置,完成验证。

项目代码

局部:

from selenium.webdriver import Chrome
url = "https://passport.bilibili.com/login?from_spm_id=333.788.top_bar.login"

#open browser
browser = Chrome()
#get request
browser.get(url)
browser.maximize_window()
#input username and pwd
#give time to browser to load page
time.sleep(random.uniform(1,3))

#no iframe here,so no need to switch_to
browser.find_element_by_xpath('//*[@id="login-username"]').send_keys("user")
time.sleep(random.uniform(1,2))
browser.find_element_by_xpath('//*[@id="login-passwd"]').send_keys("pwd")
time.sleep(random.uniform(0,1))
#click to login
browser.find_element_by_xpath('//*[@id="geetest-wrap"]/div/div[5]/a[1]').click()

完整项目代码

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值