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

作者:极客柒 时间:2023-10-23 23:55:27 

食用前准备

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

来源:https://blog.csdn.net/qq_39162566/article/details/129707575

标签:Python,网页,自动,登录
0
投稿

猜你喜欢

  • MySQL数据类型enum 枚举类型

    2024-01-14 22:23:52
  • Django使用HTTP协议向服务器传参方式小结

    2023-03-08 11:31:20
  • vue混入mixin流程与优缺点详解

    2024-05-02 16:35:12
  • 教你为SQL Server数据库构造安全门

    2009-01-20 11:34:00
  • numpy中np.dstack()、np.hstack()、np.vstack()用法

    2021-08-27 11:47:42
  • SQL Server 2012 sa用户登录错误18456的解决方法

    2024-01-21 03:51:29
  • 一篇文章介绍redux、react-redux、redux-saga总结

    2023-08-22 16:56:32
  • ASP开发中有用的函数(function)集合(2)

    2008-10-14 17:17:00
  • 对python中Json与object转化的方法详解

    2022-11-13 23:42:35
  • .Net行为型设计模式之策略模式(Stragety)

    2024-05-13 09:18:07
  • Python3实现将文件归档到zip文件及从zip文件中读取数据的方法

    2021-07-03 18:21:00
  • Python处理时间日期坐标轴过程详解

    2021-04-28 08:05:27
  • 详解Python中sorted()和sort()的使用与区别

    2022-05-06 17:39:09
  • PHP convert_uudecode()函数讲解

    2023-06-12 15:53:51
  • python实现12306抢票及自动邮件发送提醒付款功能

    2021-03-12 19:01:46
  • Python urllib 入门使用详细教程

    2023-03-02 10:48:35
  • 详解如何在ChatGPT内构建一个Python解释器

    2022-06-18 21:37:38
  • node.js使用免费的阿里云ip查询获取ip所在地【推荐】

    2024-05-13 09:30:23
  • python numpy存取文件的方式

    2021-04-15 18:31:56
  • php浅析反序列化结构

    2023-11-17 17:34:37
  • asp之家 网络编程 m.aspxhome.com