Python 实现自动登录+点击+滑动验证功能

1. 简介

随着互联网技术的不断发展,越来越多的网站开始采用人机验证机制来防止机器人恶意攻击。这种机制最常见的就是滑动验证,即用户需要滑动图形验证码才能进行相关操作。然而,在自动化测试或批量操作时,这种验证机制会成为一个严重的问题。为了解决这个问题,我们可以使用 Selenium 和 Python,编写自动化脚本来模拟人类操作,实现自动登录+点击+滑动验证功能。

2. 安装与导入

首先,我们需要安装 Python 和 Selenium。

pip install selenium

安装完成后,我们可以在 Python 中导入 Selenium 模块。

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

3. 自动登录功能

我们可以使用 Python 和 Selenium 来模拟网页上的登录操作。首先,我们需要打开登录页面。

driver = webdriver.Chrome()

driver.get('https://www.example.com/login')

然后,我们需要定位用户名和密码输入框,并将其填入相应的值。

username = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'username')))

username.send_keys('your_username')

password = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'password')))

password.send_keys('your_password')

最后,我们可以通过定位登录按钮,用 click() 函数来登录。

login_button = driver.find_element_by_xpath("//button[contains(text(), 'Login')]")

login_button.click()

4. 自动点击功能

当我们成功登录后,有时需要进一步点击其他按钮或链接才能执行相关操作。我们也可以使用 Python 和 Selenium 来实现自动点击功能。

首先,我们需要定位到需要点击的按钮或链接,然后使用 click() 函数来执行点击操作。

elem = driver.find_element_by_xpath('//a[@id="button"]')

elem.click()

5. 滑动验证码功能

当我们需要滑动验证码时,我们可以通过 Python 和 Selenium 来模拟人类的操作,来实现自动滑动验证。

首先,我们需要定位到验证码图片和滑块。

driver = webdriver.Chrome()

driver.get('https://www.example.com/validation')

slider = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="slider"]')))

img = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="captcha"]/img')))

然后,我们需要使用 Python 代码将验证码图片下载下来,并使用 Python 图像处理库(Pillow)来识别验证码中的缺口位置。

接着,我们可以使用 Selenium 来移动滑块,模拟用户拖动滑块来验证。这里我们需要使用 ActionChains 类的 drag_and_drop_by_offset() 函数来移动滑块。drag_and_drop_by_offset() 函数需要两个参数:元素 to\_element,偏移量 x\_offset 和 y\_offset。x\_offset 和 y\_offset 代表需要在 x 和 y 轴上拖动的距离。

from PIL import Image

import time

# 下载验证码图片

img_url = img.get_attribute('src')

img_data = requests.get(img_url).content

with open('captcha.png', 'wb') as f:

f.write(img_data)

# 处理验证码图片

img = Image.open('captcha.png')

img = img.convert('RGB')

width, height = img.size

# 模拟人类滑动验证码

distance = get_slider_offset(img)

slider_button = driver.find_element_by_xpath('//*[@id="slider"]/div[2]')

ActionChains(driver).click_and_hold(slider_button).perform()

ActionChains(driver).move_by_offset(distance, 0).perform()

time.sleep(0.5)

ActionChains(driver).release().perform()

完整的实现过程可以在以下代码中找到。

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from PIL import Image

import requests

import time

def get_slider_offset(img):

# 获取缺口位置

# ...

return offset

driver = webdriver.Chrome()

driver.get('https://www.example.com/validation')

# 输入用户名和密码

username = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'username')))

username.send_keys('your_username')

password = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'password')))

password.send_keys('your_password')

# 点击登录

login_button = driver.find_element_by_xpath("//button[contains(text(), 'Login')]")

login_button.click()

# 自动点击其他链接或按钮

elem = driver.find_element_by_xpath('//a[@id="button"]')

elem.click()

# 下载验证码图片

img_url = img.get_attribute('src')

img_data = requests.get(img_url).content

with open('captcha.png', 'wb') as f:

f.write(img_data)

# 处理验证码图片

img = Image.open('captcha.png')

img = img.convert('RGB')

width, height = img.size

# 模拟人类滑动验证码

distance = get_slider_offset(img)

slider_button = driver.find_element_by_xpath('//*[@id="slider"]/div[2]')

ActionChains(driver).click_and_hold(slider_button).perform()

ActionChains(driver).move_by_offset(distance, 0).perform()

time.sleep(0.5)

ActionChains(driver).release().perform()

6. 总结

通过使用 Python 和 Selenium,我们可以实现自动化登录、自动点击和自动滑动验证码,大大提高了工作效率。除了以上的例子之外,Selenium 还支持很多其他的操作,例如填写表单、模拟鼠标移动和键盘敲击等。Selenium 常用于网站自动化测试、爬虫和自动化操作等,是一个非常有用的工具。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签