图样
简价:
简要说明这个程序的功能:
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)}')