第七讲案例

豆瓣登录

这里不直接选择官网登录页面,为了页面跳转好判断。首先登录进去,进入个人主页,退出账号就获得了我们测试的页面。去掉?后面的参数https://accounts.douban.com/passport/login
在这里插入图片描述
这里当前页面和跳转页面的标题是不同的,可以作为验证通过的条件进行判断。
验证程序主要进行了以下几步:
在这里插入图片描述
完整代码如下,新知识主要是鼠标操作和移动算法,在上文中进行了简要讲解,其余部分有较为齐全的注释,不再过度解读:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time


def slide_code():
    """
    滑动验证码
    :return: True
    """
    print('___________开始破解滑动验证码__________')
    # 切入iframe
    # 问题:找不到页面元素
    # 原因:有iframe标签
    # 解决:切入iframe,0表示第一个
    driver.switch_to.frame(0)
    # 找到滑块
    slider = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')
    print(slider)
    # 循环刷新滑动,直至成功
    while True:
        # 2、使用鼠标操作点住滑块并且使鼠标悬浮
        # perform:鼠标悬浮
        # click_and_hold:点住并且保持。
        ActionChains(driver).click_and_hold(on_element=slider).perform()
        # 3、计算滑动距离:230
        distance = 230
        # 滑动滑块
        ActionChains(driver).move_by_offset(xoffset=distance*0.5, yoffset=0).perform()
        # 4、移动的过程使用先加速后减速的过程
        tracks = get_tracks(distance*0.5)
        for s in tracks:
            ActionChains(driver).move_by_offset(xoffset=s,yoffset=0).perform()
        # 5、移动到目标位置之后释放鼠标(悬浮释放)
        # 模拟人在目标处停顿释放
        time.sleep(0.3)
        ActionChains(driver).release().perform()
        # 是否登录成功
        if not driver.title == '登录豆瓣':
            break
        # 点击刷新
        driver.find_element_by_id('reload').click()
        time.sleep(1)
    return True


def get_tracks(distance):
    """
    得到移动的轨迹&#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值