当前位置: 首页 > article >正文

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

图样

简价:

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

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.kler.cn/a/454424.html

相关文章:

  • CSES-1687 Company Queries I(倍增法)
  • 【ES6复习笔记】rest参数(7)
  • Pinpoint 是一个开源的分布式追踪系统
  • Linux网络——TCP的运用
  • 虚幻引擎结构之UObject
  • LeetCode 83 :删除排链表中的重复元素
  • 设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo
  • CTFshow-SSRF文件上传
  • PDF书籍《手写调用链监控APM系统-Java版》第6章 链路的架构(Trace+TraceSegment+Span)
  • SQL进阶技巧:如何分析工厂制程顺序问题?
  • GXUOJ-算法-第一次作业
  • Mysql数据究竟是如何存储的
  • flink cdc各种数据库 jar下载地址
  • 【Java 学习】详细讲解---包和导包、Scanner类、输入源
  • 32. 线程、进程与协程
  • javaweb 04 springmvc
  • 【从零开始入门unity游戏开发之——C#篇30】C#常用泛型数据结构类——list<T>列表、`List<T>` 和数组 (`T[]`) 的选择
  • BFD综合详细实验配置案例
  • GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)
  • vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)
  • HTTP、HTTPS和SOCKS5代理協議
  • WSL2上Ubuntu22.04安装Docker
  • Windows 使用 非安装版MySQL 8
  • Linux网络——TCP的运用
  • QT集成intel RealSense 双目摄像头
  • NLP 中文拼写检测开源-01-基于贝叶斯公式的拼写检查器 CSC