Python 自动化 打开网站 填表登陆 例子

news2025/2/13 3:43:36

图样

简价:

简要说明这个程序的功能:

1. **基本功能**:
   - 自动打开网站
   - 自动填写登录信息(号、公司名称、密码)
   - 显示半透明状态窗口实时提示操作进度

2. **操作流程**:
   - 打开网站后自动点击两个位置(1515,130)和(990,355)
   - 依次填写:税号 → 公司名称 → 密码
   - 最后自动按回车确认

3. **配置参数**:
```python
CONFIG = {
    'tax_id': 'xxxxxxx',    # 号
    'company_name': '登记名字',       # 公司名称
    'password': 'abc',              # 密码
    'wait_time': 1,                 # 每步操作等待时间
    'initial_delay': 3,             # 初始等待时间
    'url': 'https://xxxxxx/'  # 网站地址
}
```

只需要修改 CONFIG 中的参数就可以适应不同的登录信息。
 

代码: 

# -*- coding: utf-8 -*-
import pyautogui
import time
import pyperclip
import logging
import webbrowser
import tkinter as tk
from typing import Optional

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

# 配置参数
CONFIG = {
    'tax_id': 'xxxxxxx号',
    'company_name': '登记名字',
    'password': 'abc',
    'wait_time': 1,
    'initial_delay': 3,
    'url': 'https://xxxxxxxx/'
}

class StatusWindow:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("自动操作状态")
        
        # 设置窗口大小和位置
        self.root.geometry("300x100+100+100")
        
        # 设置窗口透明度
        self.root.attributes('-alpha', 0.8)
        
        # 设置窗口置顶
        self.root.attributes('-topmost', True)
        
        # 创建标签
        self.label = tk.Label(
            self.root,
            text="准备开始...",
            font=('微软雅黑', 12),
            wraplength=280
        )
        self.label.pack(pady=20)

    def update_status(self, message: str):
        """更新状态信息"""
        self.label.config(text=message)
        self.root.update()

    def close(self):
        """关闭窗口"""
        self.root.destroy()

def open_tax_website() -> None:
    """打开网站"""
    try:
        logging.info("正在打开网站...")
        webbrowser.open(CONFIG['url'])
        # 等待浏览器加载
        time.sleep(CONFIG['initial_delay'])
        
        # 移动到第一个位置并点击
        logging.info("移动到第一个位置...")
        pyautogui.moveTo(1515, 130)
        pyautogui.click()
        
        # 等待5秒
        time.sleep(5)
        
        # 移动到第二个位置并点击
        logging.info("移动到第二个位置...")
        pyautogui.moveTo(990, 355)
        pyautogui.click()
        
        # 等待1秒
        time.sleep(1)
        
    except Exception as e:
        logging.error(f"打开网站或移动鼠标时发生错误: {str(e)}")
        raise

def safe_paste(text: str, wait_time: Optional[float] = None) -> None:
    """安全地执行复制粘贴操作"""
    wait_time = wait_time or CONFIG['wait_time']
    try:
        pyperclip.copy(text)
        time.sleep(wait_time)
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(wait_time)
    except Exception as e:
        logging.error(f"粘贴文本 '{text}' 时发生错误: {str(e)}")
        raise

def safe_key_press(key: str, wait_time: Optional[float] = None) -> None:
    """安全地执行按键操作"""
    wait_time = wait_time or CONFIG['wait_time']
    try:
        pyautogui.press(key)
        time.sleep(wait_time)
    except Exception as e:
        logging.error(f"按键 '{key}' 操作发生错误: {str(e)}")
        raise

def fill_tax_form() -> None:
    """填写表单的主要函数"""
    status_window = StatusWindow()
    
    try:
        status_window.update_status("开始填写表单...")
        logging.info("开始填写表单...")
        
        # 首先打开网站
        status_window.update_status("正在打开税务网站...")
        open_tax_website()
        
        status_window.update_status("正在进行页面操作...")
        # 等待页面加载完成
        status_window.update_status("等待页面加载...")
        time.sleep(CONFIG['initial_delay'])
        
        # 输入税号
        status_window.update_status("正在输入税号...")
        logging.info("正在输入号...")
        safe_paste(CONFIG['tax_id'])
        safe_key_press('tab')
        
        # 输入公司名称
        status_window.update_status("正在输入公司名称...")
        logging.info("正在输入公司名称...")
        safe_paste(CONFIG['company_name'])
        safe_key_press('tab')

        # 输入密码
        status_window.update_status("正在输入密码...")
        logging.info("正在输入密码...")
        safe_paste(CONFIG['password'])
        safe_key_press('enter')  # 直接按回车确认
        
        status_window.update_status("表单填写完成!")
        logging.info("表单填写完成")
        time.sleep(2)  # 显示完成信息2秒
        
    except Exception as e:
        status_window.update_status(f"发生错误: {str(e)}")
        logging.error(f"填写表单时发生错误: {str(e)}")
        time.sleep(3)  # 显示错误信息3秒
        raise
    finally:
        status_window.close()

if __name__ == "__main__":
    try:
        fill_tax_form()
        print('表单填写已完成')
    except Exception as e:
        print(f'程序执行出错: {str(e)}')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本原多项式

将 G F ( p ) GF(p) GF(p)延伸为有 p m p^m pm个元素的域,称之为 G F ( p ) GF(p) GF(p)的扩域,表示为 G F ( p m ) GF(p^m) GF(pm). G F ( p ) GF(p) GF(p)是 G F ( p m ) GF(p^m) GF(pm)的子集。 G F ( p m ) GF(p^m) GF(pm)元素个数为 p m p^m pm。 …

【物联网技术与应用】实验15:电位器传感器实验

实验15 电位器传感器实验 【实验介绍】 电位器可以帮助控制Arduino板上的LED闪烁的时间间隔。 【实验组件】 ● Arduino Uno主板* 1 ● 电位器模块* 1 ● USB电缆*1 ● 面包板* 1 ● 9V方型电池* 1 ● 跳线若干 【实验原理】 模拟电位器是模拟电子元件,模…

能省一点是一点 - 享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) 享元模式(Flyweight Pattern)享元模式(Flyweight Pattern)概述享元模式包含的角色:享元模式应用场景 talk is cheap, show you my code总结 享元模式&a…

学习C++:变量

变量: 作用:给一段指定的内存空间起名,方便操作这段内容 (变量存在的意义:方便我们管理内存空间) 语法:数据类型 变量名 初始值; 实例:

蓝桥杯物联网开发板硬件组成

第一节 开发板简介 物联网设计与开发竞赛实训平台由蓝桥杯大赛技术支持单位北京四梯科技有限公司设计和生产,该产品可用于参加蓝桥杯物联网设计与开发赛道的竞赛实训或院校相关课程的 实践教学环节。 开发板基于STM32WLE5无线微控制器设计,芯片提供了25…

Day35汉明距离

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 class Solution {public int hammingDistance(int x, int y) {int cnt 0;while (Math.max(x, y) ! 0) {if ((x & 1) ! (y &…

matplotlib pyton 如何画柱状图,利用kimi,直接把图拉倒上面,让他生成

要绘制类似于您提供的图像的柱状图,您可以使用Python中的Matplotlib库,这是一个非常流行的绘图库。以下是一个简单的示例代码,展示如何使用Matplotlib来创建一个类似的柱状图: python import matplotlib.pyplot as plt import nu…

计算机网络——期末复习(3)4-6章考试重点

第四章 根据IPv4第1个十进制数值判断,127以下为A类,128~191为B类,192~223为C类不能分配给主机或路由器接口的:A类网络号0和127,主机号全为0或全为1私有地址(Private IP Address)是指一类专门保…

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题,答案在文末 防止重放攻击最有效的方法是( )。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准,或者…

【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别

写在前面的话 感慨一下, WebXR的发展是真的快,20年的时候,大多都在用AR.js做WebAR。随着WebXR标准发展,现在诸如Threejs、AFrame、Unity等多个平台都支持里WebXR。 本文将介绍在Unity中使用 Image Tracker实现Web端的AR图像识别功…

HTML5实现好看的圣诞节网站源码

HTML5实现好看的圣诞节网站源码 前言一、设计来源1.1 主界面1.2 圣诞节由来界面1.3 圣诞活动界面1.4 圣诞活动门票界面1.5 团队介绍界面1.6 圣诞照片墙界面1.7 圣诞留言界面1.8 圣诞趣事界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好…

go下载依赖提示连接失败

1、现象 Go下载模块提示连接失败 dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.…

分布式事务入门 一

分布式事务入门 一 您好,我是今夜写代码,今天学习下分布式事务相关理论,以及常见的解决方案,为后续掌握Seata分布式事务框奠定基础。 为什么需要分布式事务? 分布式事务主要由于存储资源的分布性,通常涉及多个数据库。 分布式…

VSCode设置Playwright教程

1.安装扩展 打开VS Code,在扩展—>搜索"Playwright Test for VSCode",点击安装 按快捷键CommandShiftP,输入install playwright,点击安装Playwright 安装成功会有如下提示 2.调试脚本 打开tests/example.spec.ts文…

在一个C工程文件中,如果一个函数要引用另一个文件中的函数,并不是用extern进行声明,而是在包含的头文件中进行声明

在C语言的某个工程中,一个不是主函数的函数如果引用另一个文件中的某个函数,是不是要先用extern引入?比如下面的代码: void DisplayInit(void) {extern void FramebufferInit(void);FramebufferInit(); }在C语言中,不…

Qt天气预报系统设计_更改窗口名称和图标

Qt 天气预报系统 1、更改窗口名称2、更改窗口图标2.1先把资源加入项目2.2选择资源文件更改窗口图标 1、更改窗口名称 更改MainWindow下的windowTitle即可 2、更改窗口图标 2.1先把资源加入项目 右键项目文件夹,选择 Add New... 选择Qt,接着选择 Qt …

数据仓库工具箱—读书笔记02(Kimball维度建模技术概述04、使用一致性维度集成)

Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 第二章前言部分作者提到:技术的介绍应该通过涵盖各种行业的熟悉的用例展开(赞同…

Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的

文章目录 一、前言二、主要内容三、小结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 在早期的计算机科学中,数组索引从 1 开始是很常见的。例如,Fortran 和 Pascal 等编程语言也采用了从 1 开始的索引。 这种索引…

Redis - Token JWT 概念解析及双token实现分布式session存储实战

Token 定义:令牌,访问资源接口(API)时所需要的资源凭证 一、Access Token 定义:访问资源接口(API)时所需要的资源凭证,存储在客户端 组成 组成部分说明uid用户唯一的身份标识time…

vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)

1.安装video-player npm install video.js videojs-player/vue --save在main.js中配置全局引入 // 导入视频播放组件 import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssconst app createApp(App) // 视频播放组件 app.use(VueVideoPlayer)2…