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

开发技术 作者:zzz 2024-05-10 19:25:02
本文小编为大家详细介绍“Python如何实现获取网页内容及自动填表单与登录功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现获取网页内容及自...

本文小编为大家详细介绍“Python如何实现获取网页内容及自动填表单与登录功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现获取网页内容及自动填表单与登录功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

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("登陆: 提交表单")

知识点补充

识别验证码的python 库有很多,用起来也并不简单,ddddocr 库是一个简单实用的识别验证码的库,推荐给大家

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如何实现获取网页内容及自动填表单与登录功能

读到这里,这篇“Python如何实现获取网页内容及自动填表单与登录功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注捷杰建站行业资讯频道。

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_26337.html
python