网站需要验证码Python简单测试自动通过验证
网站需要验证码Python简单测试自动通过验证
随着技术的发展,验证码越来越复杂,接下来我们解决常用的几种,需要用到的库有selenium、PIL
通常可以使用openca或者tesserocr,但是对于新手来说,他们的安装和使用有些难度。下面就介绍一个更加简单的ddddocr,首先是安装:
pip install ddddocr
为了演示效果,我们这里提前准备好了一个图片验证码
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from PIL import Image
# 初始化 Chrome 浏览器
driver = webdriver.Chrome()
driver.maximize_window()
# 打开目标网站,等待加载
driver.get("https://test.com/")
time.sleep(1)
# 选择账号、密码输入栏,输入对应的账号密码
input_user=driver.find_element_by_xpath('//input[@name="username"]')
input_user.send_keys('账号')
input_pwd=driver.find_element_by_xpath('//input[@name="password"]')
# 输入密码
input_pwd.send_keys('密码')
# 将当前页面截图
driver.save_screenshot('code.png')
# 选择验证码图片的元素
code_btn = driver.find_element_by_xpath('//input[@name="password"]/span')
# 获取图片元素的位置
loc = code_btn.location
# 获取图片的宽高
size = code_btn.size
# 获取验证码上下左右的位置
left = loc['x']*1.25
top = loc['y']*1.25
right = (loc['x'] + size['width'])*1.25
botom = (loc['y'] + size['height'])*1.25
val = (left, top, right, botom)
# 打开网页截图
login_pic = Image.open('code.png')
# 通过上下左右的值,去截取验证码
code_img = login_pic.crop(val)
code_img.save('code.png')
# 识别验证码
with open('code.png,'rb') as f:
img_content = f.read()
result = ddddocr.Dddd0cr(res = ocr.classification(img_bytes)
code=res[-4:] #看你的验证码是几位,截取验证码后4位
# 在输入框输入验证码
driver.find_element_by_xpath('/html/body/div[3]/form/p/input')
yzm_input.send_keys(code)
# 点击登录
submit = driver.find_element_by_xpath('/input[@class="submit"]/input')
submit.click()
# 等待 2 秒钟查看结果
time.sleep(2)
# 关闭浏览器
driver.quit()
使用selenium打开浏览器来模拟这个滑动流程
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
# 初始化 Chrome 浏览器
driver = webdriver.Chrome()
driver.maximize_window()
# 打开目标网站,等待加载
driver.get("https://test.com/")
time.sleep(1)
# 定位滑块元素和背景图片元素
slider = driver.find_element_by_xpath("//*[@id='slider']")
bg = driver.find_element_by_xpath("//*[@id='sliderBackground']")
# 计算滑块需要移动的距离
distance = slider.location['x'] - bg.location['x']
# 模拟人的拖动操作
action = ActionChains(driver)
action.click_and_hold(slider).perform()
action.move_by_offset(distance, 0).perform()
action.release().perform()
# 等待 5 秒钟查看结果
time.sleep(5)
# 关闭浏览器
driver.quit()
