豆瓣登录
这里不直接选择官网登录页面,为了页面跳转好判断。首先登录进去,进入个人主页,退出账号就获得了我们测试的页面。去掉?后面的参数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):
"""
得到移动的轨迹&#