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

这篇文章主要为大家详细介绍了如何利用Python实现模拟浏览器启动,获取网页内容、自动填表单、自动登录、自动过验证码等功能,需要的可以参考一下

  • 源码

  • 知识点补充

食用前准备

python 3.10.10 #二维码的库ddddocr 需要

  1. import time

  2. import ddddocr

源码​​​​​

  1. # import threading # 导入threading模块

  2. # from Feishu_SendMsg import *

  3. # Identification verification code

  4. import time

  5. import ddddocr

  6. interval = 100 * 60

  7. # def delayCall(): # 定义方法

  8. # SendMsg("选题 快快快!!!")

  9. # timer=threading.Timer(interval,delayCall) # 每秒运行

  10. # timer.start() # 执行方法

  11. # if __name__ == '__main__': #

  12. # t1=threading.Timer(interval,function=delayCall) # 创建定时器

  13. # t1.start() # 开始执行线程

  14. from selenium import webdriver

  15. from selenium.webdriver.common.by import By

  16. from selenium.webdriver.support.ui import WebDriverWait

  17. from selenium.webdriver.support import expected_conditions as EC

  18. from selenium.webdriver.common.keys import Keys

  19. # SendMsg("自动填表单")

  20. options = webdriver.ChromeOptions()

  21. options.add_argument('--enable-automation')

  22. options.add_argument('--no-sandbox')

  23. options.add_argument('--disable-extensions')

  24. options.add_argument('--start-maximized')

  25. options.add_argument('--disable-infobars')

  26. prefs = {"profile.default_content_setting_values.autocomplete_enabled": 2}

  27. options.add_experimental_option("prefs", prefs)

  28. # SendMsg("创建 Chrome 浏览器实例")

  29. # 创建 Chrome 浏览器实例

  30. browser = webdriver.Chrome(options=options)

  31. # SendMsg("打开网页")

  32. browser.get('www.tttttttt.com')

  33. # SendMsg("找到账号和密码框元素并输入指定字符串")

  34. username = browser.find_element("name","username")

  35. password = browser.find_element("name","userpass")

  36. usercode = browser.find_element("name","usercode")

  37. img_verifycode = browser.find_element("id","img_verifycode")

  38. # SendMsg("自动填充账号密码")

  39. username.send_keys("11111")

  40. password.send_keys("11111")

  41. verifycodeBase64 = img_verifycode.screenshot_as_base64

  42. ocr = ddddocr.DdddOcr()

  43. res = ocr.classification(verifycodeBase64)

  44. usercode.send_keys(res)

  45. # SendMsg(f"识别并填写验证码: {res}")

  46. # SendMsg("提交表单")

  47. password.send_keys(Keys.RETURN)

  48. # SendMsg("登陆: 提交表单")

知识点补充

下面为大家介绍一下文中用到的ddddocr库的相关使用吧

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

ddddocr具体使用方法

  1. import os

  2. import ddddocr

  3. from time import sleep

  4. from PIL import Image

  5. from selenium import webdriver

  6. from selenium.webdriver.common.by import By

  7. class GetVerificationCode:

  8. def __init__(self):

  9. self.res = None

  10. url = '要登录的地址'

  11. self.driver = webdriver.Chrome()

  12. self.driver.maximize_window() # 将浏览器最大化

  13. self.driver.get(url)

  14. # 获取验证码信息

  15. def getVerification(self):

  16. # 获取当前文件的位置、并获取保存截屏的位置

  17. current_location = os.path.dirname(__file__)

  18. screenshot_path = os.path.join(current_location, "..", "VerificationCode")

  19. # 截取当前网页并放到自定义目录下,并命名为printscreen,该截图中有我们需要的验证码

  20. sleep(1)

  21. self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png')

  22. sleep(1)

  23. # 定位验证码

  24. imgelement = self.driver.find_element(By.XPATH, '验证码图片的Xpath定位')

  25. # 获取验证码x,y轴坐标

  26. location = imgelement.location

  27. # 获取验证码的长宽

  28. size = imgelement.size

  29. # 写成我们需要截取的位置坐标

  30. rangle = (int(location['x'] + 430),

  31. int(location['y'] + 200),

  32. int(location['x'] + size['width'] + 530),

  33. int(location['y'] + size['height'] + 250))

  34. # 打开截图

  35. i = Image.open(screenshot_path + '//' + 'printscreen.png')

  36. # 使用Image的crop函数,从截图中再次截取我们需要的区域

  37. fimg = i.crop(rangle)

  38. fimg = fimg.convert('RGB')

  39. # 保存我们截下来的验证码图片,并读取验证码内容

  40. fimg.save(screenshot_path + '//' + 'code.png')

  41. ocr = ddddocr.DdddOcr()

  42. with open(screenshot_path + '//' + 'code.png', 'rb') as f:

  43. img_bytes = f.read()

  44. self.res = ocr.classification(img_bytes)

  45. print('识别出的验证码为:' + self.res)

  46. # 判断验证码错误时的提示信息是否存在

  47. def isElementPresent(self, by, value):

  48. try:

  49. element = self.driver.find_element(by=by, value=value)

  50. except NoSuchElementException:

  51. pass

  52. # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False

  53. return False

  54. else:

  55. # 没有发生异常,表示在页面中找到了该元素,返回True

  56. return True

  57. # 登录

  58. def login(self):

  59. self.getVerification()

  60. self.driver.find_element(By.XPATH, '用户名输入框Xpath定位').send_keys('用户名')

  61. self.driver.find_element(By.XPATH, '密码输入框Xpath定位').send_keys('密码')

  62. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  63. sleep(1)

  64. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  65. sleep(2)

  66. isFlag = True

  67. while isFlag:

  68. try:

  69. isPresent = self.isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位')

  70. if isPresent is True:

  71. codeText = self.driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位').text

  72. if codeText == "验证码不正确":

  73. self.getVerification()

  74. sleep(2)

  75. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').clear()

  76. sleep(1)

  77. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  78. sleep(1)

  79. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  80. sleep(2)

  81. tips = self.driver.find_element(By.XPATH,

  82. '未输入验证码时的提示信息Xpath定位').text

  83. if tips == "请输入验证码":

  84. self.getVerification()

  85. sleep(2)

  86. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').click()

  87. sleep(1)

  88. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  89. sleep(1)

  90. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  91. sleep(2)

  92. continue

  93. else:

  94. print("验证码正确,登录成功!")

  95. except NoSuchElementException:

  96. pass

  97. else:

  98. isFlag = False

  99. sleep(5)

  100. self.driver.quit()

  101. if __name__ == '__main__':

  102. GetVerificationCode().login()

识别结果

 到此这篇关于Python实现获取网页内容及自动填表单与登录功能的文章就介绍到这了,希望大家以后多多支持!

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/591575.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware虚拟机安装Linux(CentOS)【超详细】

参考大佬文章:VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客 目录 一、获取映射文件 二、新建虚拟机 三、安装操作系统 四、切换系统用户 一、获取映射文件 参考大佬文章获取映射文件,以及对应修改后缀名的方法 二、新建虚拟…

python项目==一个web项目,配置模板指定文件清洗规则,调用模板规则清洗文件

代码地址 一个小工具。 一个web项目,配置模板指定文件清洗规则,调用模板规则清洗文件 https://github.com/hebian1994/csv-transfer-all 技术栈: SQLite python flask vue3 elementplus 功能介绍: A WEB tool for cleaning…

C#图像:1.图像区域分割与提取

(1)创建一个名为SplitImage的窗体的应用程序,将窗体改名为FormSplitImage。 (2)创建一个名为ImageProcessingLibrary的类库程序,为该工程添加名为ImageProcessing的静态类 (3)为Imag…

leetcode-滑动窗口的最大值-95

题目要求 思路 1.这个题是可以暴力求解的,但是时间复杂度比较高,因此,这里说一个时间复杂度为O(n)的方法 2.因为这个代码是优化后的结果,第一次写如果直接写成这样着实不容易,因此,我直接讲每一行的含义。…

光伏光热一体化技术PVT

1、PVT集热器简介 太阳能光伏光热一体化组件主要由光伏与光热两个部分组成。光伏部分采用技术成熟的太阳能光伏面板,通过控制系统为建筑提供所需电能,主要包括光伏电池、蓄电池、逆变器和控制器等构件。光热部分主要为集热器,将太阳能转换为热…

手写一个uart协议——rs232

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1 波形设计1.3.2 代码实现与tb1.3.4 顶层设计1.3.3 仿真 本篇内容: 一、RS232的回环测试 上位机…

记录:git上传自己的本地项目

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

顺序循环队列--c语言实现

#include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define MAX_SIZE 100 // 假设队列的最大长度为100// 队列结构体 typedef struct {int data[MAX_SIZE]; // 存储队列元素的数组int front; // 队头指针int rear; // 队尾指针 } SeqQueue;// 初…

Python爬虫--爬取糗事百科段子

爬取糗事百科段子&#xff1a; 段子在 <div class"content"> 里面的 <span> 标签里面 不过这里有个坑&#xff0c;div 标签跟 span 标签 之间有很多空行 普通 .*? 是匹配不了的&#xff0c;需要使用模式修饰符 S S 的意思 让 .(点) 匹配&#xff0c…

C语言零基础快速入门视频教程

C语言零基础快速入门视频教程 介绍C语言C语言零基础视频教程领取教程下期更新预报 介绍C语言 C语言零基础快速入门&#xff1a;探索C语言的起源、特性与魅力 在编程世界中&#xff0c;C语言犹如一座古老而坚实的桥梁&#xff0c;连接着计算机科学的过去与现在。作为一门历史悠…

项目管理【环境】过程

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】过程 一、规划和管理项目的合规性 1.1 规划和管理项目的合规性 1.2 确认合规要求 1.3 审计&#xff1a;衡量合规的程度 二、项目管理计划和项目文件 2.1 项目管理计划和…

中华科技控股集团:人工智能标准化引领者与数字化服务新航程的启航者

4月30日, 矗立于时代科技潮头的中华科技控股集团&#xff0c;自2010年在香港这片国际金融沃土上诞生以来&#xff0c;便以其独特的国资背景与全球化视野&#xff0c;肩负起推动中国科技进步与产业升级的重任。作为国资委麾下的重要一员&#xff0c;中华科技始终坚持创新驱动发展…

[C++初阶]string类

1. 为什么要学习string类 1.1 C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(面向对象)的思想&…

基于HSI模型的水下图像增强算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

MYSQL从入门到精通(二)

1、MYSQL高级概述 【1】架构概述 【2】索引优化 【3】查询截取 【4】mysql锁机制 【5】主从复制 2、MYSQL概述 【1】mysql内核 【2】sql优化工程师 【3】mysql服务器的优化 【4】各种参数常量设定 【5】查询语句优化 【6】主从复制 【7】软硬件升级 【8】容灾百分 【9】sql编…

自动安装环境shell脚本使用和运维基础使用讲解

title: 自动安装环境shell脚本使用和运维基础使用讲解 tags: [shell,linux,运维] categories: [开发记录,系统运维] date: 2024-3-27 14:10:15 description: 准备和说明 确认有网。 依赖程序集&#xff0c;官网只提供32位压缩包&#xff0c;手动编译安装后&#xff0c;在64位机…

springboot整合mybatis配置多数据源(mysql/oracle)

目录 前言导入依赖坐标创建mysql/oracle数据源配置类MySQLDataSourceConfigOracleDataSourceConfig application.yml配置文件配置mysql/oracle数据源编写Mapper接口编写Book实体类编写测试类 前言 springboot整合mybatis配置多数据源&#xff0c;可以都是mysql数据源&#xff…

QT:布局管理器

文章目录 垂直布局使用QVBoxLayout来管理多个控件 水平布局使用QHBoxLayout管理控件 网格布局创建QGridLayout管理四个按钮设置元素的大小比例 表单布局 在之前QT的界面控件中&#xff0c;都是使用绝对定位来完成的&#xff0c;也就是说是用绝对坐标的方式来设置进去的 这样并…

网站高级认证页面模板(自定义安全认证)

网站高级认证页面模板&#xff08;自定义安全认证&#xff09; 仅限于源码测试&#xff0c;不代表真实性 下载地址&#xff1a; https://yuncv.lanzouw.com/i98qC1xm8u4j

ue引擎游戏开发笔记(29)——实现第三人称角色随手柄力度进行移动

1.需求分析 角色可以随手柄力量大小进行走路和跑步&#xff0c;不动时保持角色停顿。 2.操作实现 1.思路&#xff1a;通过动画蓝图和动画混合实现角色移动和输入的联系。 2.建立动画蓝图和混合空间&#xff1a; 3.在混合空间中对角色移动进行编辑&#xff1a; 4.在蓝图中设定变…