selenium获取验证码截图
目标网站 https://starlink-pre.bytenew.com/login
完整代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/10/17
# @Author : chenghong.duo
# @File : selenium获取验证码截图.py
# @Description :
import os
import time
import ddddocr
from PIL import Image
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(service=Service("chromedriver.exe")) # 指向你的 Chrome 驱动程序的路径
driver.get("https://starlink-pre.bytenew.com/login")
# 等待账号输入框元素的出现,并且输入账号密码
account_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div/div/form/div[1]/div/div[1]/input')))
account_input.send_keys('administrator')
password_input = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div/div/form/div[2]/div/div[1]/input')
password_input.send_keys('password')
time.sleep(2)
# 获取图片验证码坐标,保存验证码图片
full_screenshot_path = "images/full_screenshot.png"
code_path = "images/code.png"
code_element = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div/div/form/div[3]/div/div[2]')
print(f"验证码的坐标为:{code_element.location} 验证码的大小为:{code_element.size}")
left, top = code_element.location['x'], code_element.location['y']
right, down = code_element.size['width'] + left, code_element.size['height'] + top
os.makedirs('images', exist_ok=True)
driver.save_screenshot(full_screenshot_path) # 页面截图并保存
image = Image.open(full_screenshot_path) # 打开刚才的页面截图
code_image = image.crop((left, top, right, down))
# code_image = image.crop((left * 1.5, top * 1.5, right * 1.5, down * 1.5)) # 如果电脑缩放是150%,此处要乘以1.5
code_image.save(code_path) # 截取的验证码图片保存为新的文件
# 找到验证码输入框,填写识别出的验证码
ocr = ddddocr.DdddOcr(show_ad=False)
code_value = ocr.classification(code_image)
print(f'识别出的验证码为:{code_value}')
code_input = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div/div/form/div[3]/div/div[1]/input')
code_input.send_keys(code_value)
time.sleep(2)
# 后续代码:
# 点击登录
# 页面出现“验证码识别错误”时,点击验证码进行刷新,重复以上操作重新识别...
# 按照此方法可以编写登录页面,登录成功后保存cookie
time.sleep(100)
driver.close()
注意:这里要注意电脑屏幕的缩放与布局的设置
code_image = image.crop((left, top, right, down))
# code_image = image.crop((left * 1.5, top * 1.5, right * 1.5, down * 1.5)) # 如果电脑缩放是150%,此处要乘以1.5
本文转自 https://www.cnblogs.com/liuyanhang/p/16969684.html,如有侵权,请联系删除。