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

图样

简价:

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

  1. **基本功能**:
  • 自动打开网站

  • 自动填写登录信息(号、公司名称、密码)

  • 显示半透明状态窗口实时提示操作进度

  1. **操作流程**:
  • 打开网站后自动点击两个位置(1515,130)和(990,355)

  • 依次填写:税号 → 公司名称 → 密码

  • 最后自动按回车确认

  1. **配置参数**:

```python

CONFIG = {

'tax_id': 'xxxxxxx', # 号

'company_name': '登记名字', # 公司名称

'password': 'abc', # 密码

'wait_time': 1, # 每步操作等待时间

'initial_delay': 3, # 初始等待时间

'url': 'https://xxxxxx/' # 网站地址

}

```

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

代码:

python 复制代码
# -*- 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)}')
相关推荐
hj2862516 分钟前
Linux学习方法论 + 系统安全加固与性能优化 完整版笔记(含案例)
运维
小江的记录本15 分钟前
【JVM虚拟机】类加载机制:类加载器、双亲委派模型、好处、破坏双亲委派的场景(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
刘某的Cloud16 分钟前
硬链接 和 软链接 区别
运维·系统·硬链接·软链接
jiayong2319 分钟前
harness 与 hermes-agent 扩展性、安全与运维
运维·人工智能·安全·ai·架构·智能体·harness
福建佰胜张工20 分钟前
3DX-RAY 便携式 X 射线系统系列技术解析与应用指南
3d·智能手机·自动化
小陶来咯22 分钟前
FunctionCall实现与Prompt调优
python·ai·prompt
STDD34 分钟前
Linux Namespace:容器隔离的底层原理,PID、网络、挂载隔离实战
linux·运维·网络
todoitbo35 分钟前
一台 2C2G 服务器上的 KingbaseES 安装记录
运维·服务器·数据库·国产数据库
AI 编程助手GPT38 分钟前
ChatGPT 新手入门与实战操作指南
开发语言·人工智能·git·python·chatgpt
原创小甜甜44 分钟前
OOM 排查复盘:Hutool 序列化 Request 导致 Java Heap Space
java·开发语言·python