selenium模拟登录qq空间滑块验证不释放求解决

在今天写了一个用selenium模拟qq空间登录,破解滑块验证的时候鼠标拖到了位置,但不释放,我用了click点击代替了,不知道我那个释放鼠标的事件是不是哪里写错了(释放在下图黄框38行)

img

完整代码:


```python
from selenium.webdriver import Chrome, ActionChains
from selenium.webdriver.common.by import By
from time import sleep

sleep(1)

# 创建一个对象
web = Chrome()
web.maximize_window()       # 最大化浏览器窗口
web.get("https://qzone.qq.com/")
web.implicitly_wait(1)  # 设置等待时间,防止因为页面没加载出来而获取不到网页元素
web.switch_to.frame("login_frame")  # 加载嵌入在页面中的iframe定位元素

# 获取元素
web.find_element(By.CSS_SELECTOR, '#switcher_plogin').click()  # 点击账号密码登录
sleep(1)  # 延时一秒
qq_name = web.find_element(By.CSS_SELECTOR, '#u')  # 定位账号框
qq_pswd = web.find_element(By.CSS_SELECTOR, '#p')  # 定位密码框
qq_name.send_keys('账号')  # 输入账号
qq_pswd.send_keys('密码')  # 输入密码
sleep(1)
web.find_element(By.CSS_SELECTOR, '#login_button').click()  # 点击登录
print('点击登录')
sleep(1)
iframe = web.find_element(By.CSS_SELECTOR, '#tcaptcha_iframe')  # 找到“嵌套”的iframe
web.switch_to.frame(iframe)  # 切换到iframe
sleep(2)
print("寻找滑块")
button = web.find_element(By.CSS_SELECTOR, '#tcaptcha_drag_thumb')  # 寻找滑块
sleep(1)
print("开始拖动")
# 开始拖动 perform()用来执行ActionChains中存储的行为
distance = 170
action = ActionChains(web)
action.reset_actions()  # 清除之前的action
action.click_and_hold(button).perform()  # click_and_hold 点击并保持
action.move_by_offset(distance, 0).perform()
action.release().perform()  # 释放action        # 这个释放有点问题,所以用下一行代码代替
# button.click()      # 点击滑块(作为释放)
print('登录成功!')
sleep(10)
web.quit()  # 推出浏览器