这篇文章主要为大家详细介绍了如何利用Python实现模拟浏览器启动,获取网页内容、自动填表单、自动登录、自动过验证码等功能,需要的可以参考一下
-
库
-
源码
-
知识点补充
食用前准备
python 3.10.10 #二维码的库ddddocr 需要
库
-
import time
-
import ddddocr
源码
-
# import threading # 导入threading模块
-
# from Feishu_SendMsg import *
-
# Identification verification code
-
import time
-
import ddddocr
-
interval = 100 * 60
-
# def delayCall(): # 定义方法
-
# SendMsg("选题 快快快!!!")
-
# timer=threading.Timer(interval,delayCall) # 每秒运行
-
# timer.start() # 执行方法
-
# if __name__ == '__main__': #
-
# t1=threading.Timer(interval,function=delayCall) # 创建定时器
-
# t1.start() # 开始执行线程
-
from selenium import webdriver
-
from selenium.webdriver.common.by import By
-
from selenium.webdriver.support.ui import WebDriverWait
-
from selenium.webdriver.support import expected_conditions as EC
-
from selenium.webdriver.common.keys import Keys
-
# SendMsg("自动填表单")
-
options = webdriver.ChromeOptions()
-
options.add_argument('--enable-automation')
-
options.add_argument('--no-sandbox')
-
options.add_argument('--disable-extensions')
-
options.add_argument('--start-maximized')
-
options.add_argument('--disable-infobars')
-
prefs = {"profile.default_content_setting_values.autocomplete_enabled": 2}
-
options.add_experimental_option("prefs", prefs)
-
# SendMsg("创建 Chrome 浏览器实例")
-
# 创建 Chrome 浏览器实例
-
browser = webdriver.Chrome(options=options)
-
# SendMsg("打开网页")
-
browser.get('www.tttttttt.com')
-
# SendMsg("找到账号和密码框元素并输入指定字符串")
-
username = browser.find_element("name","username")
-
password = browser.find_element("name","userpass")
-
usercode = browser.find_element("name","usercode")
-
img_verifycode = browser.find_element("id","img_verifycode")
-
# SendMsg("自动填充账号密码")
-
username.send_keys("11111")
-
password.send_keys("11111")
-
verifycodeBase64 = img_verifycode.screenshot_as_base64
-
ocr = ddddocr.DdddOcr()
-
res = ocr.classification(verifycodeBase64)
-
usercode.send_keys(res)
-
# SendMsg(f"识别并填写验证码: {res}")
-
# SendMsg("提交表单")
-
password.send_keys(Keys.RETURN)
-
# SendMsg("登陆: 提交表单")
知识点补充
下面为大家介绍一下文中用到的ddddocr库的相关使用吧
识别验证码的python 库有很多,用起来也并不简单,ddddocr (带带弟弟ocr)库是一个简单实用的识别验证码的库,推荐给大家
ddddocr具体使用方法
-
import os
-
import ddddocr
-
from time import sleep
-
from PIL import Image
-
from selenium import webdriver
-
from selenium.webdriver.common.by import By
-
class GetVerificationCode:
-
def __init__(self):
-
self.res = None
-
url = '要登录的地址'
-
self.driver = webdriver.Chrome()
-
self.driver.maximize_window() # 将浏览器最大化
-
self.driver.get(url)
-
# 获取验证码信息
-
def getVerification(self):
-
# 获取当前文件的位置、并获取保存截屏的位置
-
current_location = os.path.dirname(__file__)
-
screenshot_path = os.path.join(current_location, "..", "VerificationCode")
-
# 截取当前网页并放到自定义目录下,并命名为printscreen,该截图中有我们需要的验证码
-
sleep(1)
-
self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png')
-
sleep(1)
-
# 定位验证码
-
imgelement = self.driver.find_element(By.XPATH, '验证码图片的Xpath定位')
-
# 获取验证码x,y轴坐标
-
location = imgelement.location
-
# 获取验证码的长宽
-
size = imgelement.size
-
# 写成我们需要截取的位置坐标
-
rangle = (int(location['x'] + 430),
-
int(location['y'] + 200),
-
int(location['x'] + size['width'] + 530),
-
int(location['y'] + size['height'] + 250))
-
# 打开截图
-
i = Image.open(screenshot_path + '//' + 'printscreen.png')
-
# 使用Image的crop函数,从截图中再次截取我们需要的区域
-
fimg = i.crop(rangle)
-
fimg = fimg.convert('RGB')
-
# 保存我们截下来的验证码图片,并读取验证码内容
-
fimg.save(screenshot_path + '//' + 'code.png')
-
ocr = ddddocr.DdddOcr()
-
with open(screenshot_path + '//' + 'code.png', 'rb') as f:
-
img_bytes = f.read()
-
self.res = ocr.classification(img_bytes)
-
print('识别出的验证码为:' + self.res)
-
# 判断验证码错误时的提示信息是否存在
-
def isElementPresent(self, by, value):
-
try:
-
element = self.driver.find_element(by=by, value=value)
-
except NoSuchElementException:
-
pass
-
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
-
return False
-
else:
-
# 没有发生异常,表示在页面中找到了该元素,返回True
-
return True
-
# 登录
-
def login(self):
-
self.getVerification()
-
self.driver.find_element(By.XPATH, '用户名输入框Xpath定位').send_keys('用户名')
-
self.driver.find_element(By.XPATH, '密码输入框Xpath定位').send_keys('密码')
-
self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)
-
sleep(1)
-
self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()
-
sleep(2)
-
isFlag = True
-
while isFlag:
-
try:
-
isPresent = self.isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位')
-
if isPresent is True:
-
codeText = self.driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位').text
-
if codeText == "验证码不正确":
-
self.getVerification()
-
sleep(2)
-
self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').clear()
-
sleep(1)
-
self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)
-
sleep(1)
-
self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()
-
sleep(2)
-
tips = self.driver.find_element(By.XPATH,
-
'未输入验证码时的提示信息Xpath定位').text
-
if tips == "请输入验证码":
-
self.getVerification()
-
sleep(2)
-
self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').click()
-
sleep(1)
-
self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)
-
sleep(1)
-
self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()
-
sleep(2)
-
continue
-
else:
-
print("验证码正确,登录成功!")
-
except NoSuchElementException:
-
pass
-
else:
-
isFlag = False
-
sleep(5)
-
self.driver.quit()
-
if __name__ == '__main__':
-
GetVerificationCode().login()
识别结果
到此这篇关于Python实现获取网页内容及自动填表单与登录功能的文章就介绍到这了,希望大家以后多多支持!
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!