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)}')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32-笔记10-手写延时函数(SysTick)

1、什么是SysTick Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的倒计数定时器‌。它从设定的初值(即重载值)开始计数,每经过一个系统时钟周期&#xff0…

【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点

etcd 是一个高可用的分布式键值存储,广泛应用于存储服务发现、配置管理等场景。为了确保集群的稳定性和可扩展性,管理成员节点的添加、删除和更新变得尤为重要。本文将指导您如何在etcd集群中处理成员管理,帮助您高效地维护集群节点。 目录 …

反应力场的生成物、反应路径分析方法

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…

GIT与github的链接(同步本地与远程仓库)

1.官网下载GIT Git - 安装 Git 2.GIT生成密钥 2.1 打开gitbash配置邮箱与用户名(非初次使用GIT跳过这一步) git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 2.2 生成ssh密匙 1&#xff0…

从虚拟到现实:AI与AR/VR技术如何改变体验经济?

引言:体验经济的崛起 在当今消费环境中,产品与服务早已不再是市场竞争的唯一焦点,能够提供深刻感知和独特体验的品牌,往往更能赢得消费者的青睐。这种转变标志着体验经济的崛起。体验经济不仅仅是简单的买卖行为,而是通…

利用Python爬虫速卖通按关键字搜索AliExpress商品

在当今互联网时代,数据的价值不言而喻,尤其是在电子商务领域。对于从事市场研究、数据分析或者个人项目开发的人士来说,能够从电商平台如速卖通(AliExpress)获取商品数据是一项非常有用的技能。Python以其简洁明了的语…

qt QZipWriter详解

1、概述 QZipWriter是Qt框架中用于创建ZIP文件的类。它允许开发者将多个文件和目录压缩成一个ZIP文件,支持多种压缩算法,并且易于集成到现有的Qt项目中。通过QZipWriter,开发者可以轻松实现文件的压缩、管理压缩包中的文件等功能。 需要注意…

HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index代码 import { authen…

【Java】Jackson序列化案例分析

1.Jackson介绍 Jackson 是一个流行的 Java 库,用于处理 JSON 数据。它提供了高效的序列化和反序列化功能,能够将 Java 对象转换为 JSON 格式,反之亦然。 它由 FasterXML 开发和维护。Jackson 的设计目标是提供高效、灵活且易于使用的 JSON 处…

Java反射学习(2)(“反射“机制获取构造方法及内部信息(Constructor类))

目录 一、"Class"对象实例化的常见三种方式以及使用时机。 (1)源代码(编写)阶段——使用全限定类名.forName()。 (2)加载阶段——使用类名.class。 (3)运行阶段——使用对象.getClass()。 二、Ja…

洛谷 P1595 信封问题 C语言dp

题目描述 某人写了 n 封信和 n 个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。 输入格式 一个信封数 n,保证 n≤20。 输出格式 一个整数,代表有多少种情况。 输入输出样例 输入 #1 2 输出 #1 1 输入 #2 3 输…

【LuaFramework】服务器模块相关知识

目录 一、客户端代码 二、本地服务器代码 三、解决服务器无法多次接收客户端消息问题 一、客户端代码 连接本地服务器127.0.0.1:2012端口(如何创本地服务器,放最后说),连接成功后会回调 协议号Connect是101,其他如下…

解决Ascend上vllm运行时出现urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]

背景 尝试使用vllm模型,脚本代码如下: from vllm import LLM, SamplingParamsprompts ["Hello, my name is","The president of the United States is","The capital of France is","The future of AI is", …

【卷积神经网络】常用评价指标总结

评估指标 概述 该评价指标适合分类任务与目标检测,主要用于评估模型的性能。该文章对相关指标进行总结,同时对输出的图片进行学习分析 混淆矩阵的组成 TP(True Positives,真正例):实际为正例,…

HarmonyOS NEXT 的技术发展和市场趋势:打造1+8+N的万物互联新世界

随着5G、AI、物联网等技术的飞速发展,全球智能设备和操作系统的竞争也日益激烈。在这一背景下,华为推出的HarmonyOS NEXT正逐渐成为智能设备生态中一个重要的参与者,其独特的18N战略布局以及跨设备、跨平台的互联互通理念,正在塑造…

免费 IP 归属地接口

免费GEOIP,查询IP信息,支持IPV4 IPV6 ,包含国家地理位置,维度,asm,邮编 等,例如 例如查询1.1.1.1 http://geoip.91hu.top/?ip1.1.1.1 返回json 对象

以太网通信--读取物理层PHY芯片的状态

PHY芯片通过MDIO接口进行读写,框图如下所示: 原理很简单,就是按照时序将PHY芯片的指定寄存器信息读出或者写入。 MDC时钟需要输出到PHY芯片,一般不低于80MHz。 MDIO是双向接口,FPGA读出状态信息时为输入,FP…

Docker服务发现新纪元:探索Consul的无限魅力

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 •座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元个人主页:团儿.-CSDN博客 目录 前言&…

OpenHarmony-6.IPC/RPC组件

IPC/RPC组件机制 1.基本概念 IPC:设备内的进程间通信(Inter-Process Communication)。 RPC:设备间的进程间通信(Remote Procedure Call)。 IPC/RPC用于实现跨进程通信,不同的是前者使用Binder驱…

0.机顶盒晶晨s905l3b芯片--刷入第三方系统+安卓9 root教程+armbian写入EMMC教程

机顶盒s905l3b芯片刷第三方系统安卓9 root教程刷armbian写入EMMC教程 声明: 由于固件、软件、镜像等持续更新,本文仅代表当前所使用版本的流畅安装记录。行文略长,关键代码处会配以截图展示,请自行对比是否存在差异导致安装失败…