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 常用于网站自动化测试、爬虫和自动化操作等,是一个非常有用的工具。