网站需要验证码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()