您的位置:首页 > 技术中心 > 其他 >

Python怎么实现获取网页内容及自动填表单与登录功能

时间:2023-05-17 00:08

import timeimport ddddocr

源码

# import threading  # 导入threading模块# from Feishu_SendMsg import *# Identification verification codeimport timeimport ddddocrinterval = 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 webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom 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_base64ocr = 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 osimport ddddocrfrom time import sleepfrom PIL import Imagefrom selenium import webdriverfrom selenium.webdriver.common.by import Byclass 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怎么实现获取网页内容及自动填表单与登录功能

以上就是Python怎么实现获取网页内容及自动填表单与登录功能的详细内容,更多请关注Gxl网其它相关文章!

热门排行

今日推荐

热门手游