环境使用
python 3.8
pycharm
模块使用
- selenium
pip install selenium==3.141.0
- ddddocr
pip install ddddocr
- 谷歌浏览器 以及 谷歌驱动(版本和浏览器版本对应)
图片验证功能
- 导入ddddocr识别模块
import ddddocr
缺点:准确率不高
- 实例化对象
ocr = ddddocr.DddddOcr()
- 读取图片内容
f = open('填入文件地址', mode = 'rb')
img = f.read()
mode = 'rb'
以二进制方法读取内容
- 识别图片内容
result = ocr.classification(img)
print(result)
- 识别结果
实现登录功能
- 启动浏览器并访问指定页面
url = '需要访问的url'
driver = webdriver.Chrome()
driver.maximize_window() # 将浏览器最大化
driver.get(url)
webdriver.Chrome()
创建一个基于Google Chrome浏览器的WebDriver对象。也可以是webdriver.Edge()
、webdriver.Firefox()
,基于Edge浏览器、火狐浏览器。
- 定位用户名、密码、验证码框并接收
user_input = driver.find_element(by.By.XPATH, value='//input[@type="text"]')
pw_input = driver.find_element(by.By.XPATH, value='//input[@type="password"]')
code_input = driver.find_element(by.By.XPATH, value='//input[@name="regImageCode"]')
a) 使用XPath定位元素: XPath是一种在XML和HTML文档中查找信息的语言,常用于在Selenium中精确地定位网页中的元素。这里的代码使用了XPath表达式来定位所需的输入框。
b) driver.find_element(by.By.XPATH, value=...)
:调用driver
对象的find_element
方法,指定定位策略为By.XPATH
,即使用XPath表达式来查找元素。
c) '//input[@type="text"]'
:提供的XPath表达式表示查找文档中所有type
属性值为"text"
的<input>
元素。在登录页面场景下,通常这样的元素对应于用户名输入框。
- 验证码识别
ocr = ddddocr.DdddOcr()
wait = WebDriverWait(driver, 10)
imgCode = driver.find_element(by.By.XPATH, value='//img[@src="/api/captcha"]')
imgCode.screenshot('code.png')
time.sleep(0.5)
with open('code.png', 'rb') as fp:
image = fp.read()
result = ocr.classification(image)
通过xpath定位到验证码图片并使用ddddocr识别验证码,识别结果result
为字符串形式
- 用户名、密码、验证码填充
user_input.send_keys('输入的用户名')
pw_input.send_keys('输入的密码')
code_input.send_keys(result)
- 模拟点击登录
driver.find_element(by.By.XPATH, '//button[normalize-space()="登录"]').click()
通过xpath定位登录按钮,模拟人为点击。
完整代码
url = '需要访问的url'
driver = webdriver.Chrome()
driver.maximize_window() # 将浏览器最大化
driver.get(url)
# 定位用户名、密码、验证码框并接收
user_input = driver.find_element(by.By.XPATH, value='//input[@type="text"]')
pw_input = driver.find_element(by.By.XPATH, value='//input[@type="password"]')
code_input = driver.find_element(by.By.XPATH, value='//input[@name="regImageCode"]')
# 验证码识别
ocr = ddddocr.DdddOcr()
wait = WebDriverWait(driver, 10)
imgCode = driver.find_element(by.By.XPATH, value='//img[@src="/api/captcha"]')
imgCode.screenshot('code.png')
time.sleep(0.5)
with open('code.png', 'rb') as fp:
image = fp.read()
result = ocr.classification(image)
# 用户名、密码、验证码填充
user_input.send_keys('输入的用户名')
pw_input.send_keys('输入的密码')
code_input.send_keys(result)
time.sleep(1)
# 点击登录
driver.find_element(by.By.XPATH, '//button[normalize-space()="登录"]').click()
结语
本人资历尚浅,有问题还请大家指出。谢谢观看,欢迎留言交流。