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)}')
相关推荐
学也不会2 分钟前
Ubuntu-安装redis
linux·运维·ubuntu
代码的乐趣1 小时前
支持selenium的chrome driver更新到135.0.7049.42
chrome·python·selenium
小徐Chao努力2 小时前
【centos】经常使用的脚本
linux·运维·centos
SsummerC4 小时前
【leetcode100】数组中的第K个最大元素
python·算法·leetcode
伊玛目的门徒4 小时前
解决backtrader框架下日志ValueError: I/O operation on closed file.报错(jupyternotebook)
python·backtrader·量化·日志管理·回测
java1234_小锋4 小时前
一周学会Pandas2 Python数据处理与分析-编写Pandas2 HelloWord项目
python·pandas·python数据分析·pandas2
rainFFrain4 小时前
日志与策略模式
linux·运维·vscode·策略模式
凯强同学6 小时前
第十四届蓝桥杯大赛软件赛省赛Python 大学 C 组:7.翻转
python·算法·蓝桥杯
无情白7 小时前
k8s运维面试总结(持续更新)
运维·面试·kubernetes
独好紫罗兰8 小时前
洛谷题单3-P1217 [USACO1.5] 回文质数 Prime Palindromes-python-流程图重构
开发语言·python·算法