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

python2自动打卡脚本

我司打卡比较奇葩,既不是钉钉,也不是刷卡,也不是刷脸,刷指纹,而是记工作日志,按你最后更新的时间算下班时间,因为近期没啥活,又不想加装很忙,就写了个自动打卡脚本,帮我更新日志,自动打卡,其实这时候,我人已经在家了,嘻嘻,python2写的,因为公司电脑没有 python3(流汗)

# -*- coding: utf-8 -*- from __future__ import print_function import os import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from datetime import datetime,date import sys from threading import Thread,Timer reload(sys) sys.setdefaultencoding('utf-8') CHROMEDRIVER_PATH = '/Users/dev/Documents/chromedriver-mac-x64/chromedriver' work_log = u"目前看 cpu 状态稳住了,没有持续上涨,但是还是过高,需要升级" delay = 5400 def auto_daka(): # 检查文件是否存在且有执行权限 if not os.path.exists(CHROMEDRIVER_PATH): raise Exception("ChromeDriver 文件不存在: " + CHROMEDRIVER_PATH) if not os.access(CHROMEDRIVER_PATH, os.X_OK): print("警告: ChromeDriver 可能没有执行权限,尝试添加...") os.chmod(CHROMEDRIVER_PATH, 0755) chrome_options = Options() # 无头模式 # chrome_options.add_argument("--headless") # 禁用沙箱(有时能解决启动问题) chrome_options.add_argument("--no-sandbox") # 禁用 GPU 加速 chrome_options.add_argument("--disable-gpu") # 指定 Chrome 二进制文件位置(如果系统有多个 Chrome) chrome_options.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" try: driver = webdriver.Chrome( executable_path=CHROMEDRIVER_PATH, chrome_options=chrome_options ) print("启动成功") driver.get("http://team/pages/viewpage.action?pageId=259228461") print("页面标题:", driver.title) time.sleep(2) id = 'os_username' password = 'os_password' # 查找用户名和密码输入框并填入信息 username_input = driver.find_element_by_id('os_username') password_input = driver.find_element_by_id('os_password') # 清空并填入用户名 username_input.clear() username_input.send_keys('xxx') # 清空并填入密码 password_input.clear() password_input.send_keys('xxx') print("已填入登录信息") # 查找登录按钮(假设有 id 或 class) login_button = driver.find_element_by_id('loginButton') # 或 find_element_by_class_name('btn-login') login_button.click() print("已点击登录") td_mon = str(datetime.now().month) td_d = str(datetime.now().day) td = str(date.today()) td_j = td[:7].replace('-','') # 找到月份链接 month_text = 'd322-张三-' + td[:7] link = driver.find_element_by_link_text(month_text) link.click() print("已点击链接") print("td",td) # 找到具体日期 h5_id = 'xxx张三'+ td_j +'-'+ td_j[:4]+'年'+td_mon+'月'+ td_d+'日' edit_btn = driver.find_element_by_xpath( '//h5[@id="{}"]//span[@title="编辑"]'.format(h5_id) ) edit_btn.click() time.sleep(5) from selenium.webdriver.common.keys import Keys # # 先检查有哪些 iframe iframes = driver.find_elements_by_tag_name("iframe") print("找到 %d 个 iframe" % len(iframes)) for i, iframe in enumerate(iframes): print("Iframe : id=, name=}",iframe.get_attribute('id')) # 如果没有 iframe,就不需要切换 if len(iframes) > 0: first_layer_iframe = iframes[0] driver.switch_to.frame(iframes[0]) # 切换到第一个 iframe print("切换到第一个 iframe") iframes = driver.find_elements_by_tag_name("iframe") if len(iframes) > 0: driver.switch_to.frame(iframes[0]) print("切换到第二个 iframe") #wysiwygTextarea_ifr # 先切换到 iframe(如果有的话) #driver.switch_to.frame('cipe-frame') # 或 iframe 的 id/name imgs = driver.find_elements_by_tag_name("img") print("imgs:",len(imgs)) # 查找元素 img = driver.find_element_by_css_selector('img[aria-label*="晚上"]') # 点击图片定位光标 img.click() time.sleep(0.5) # 按右箭头键将光标移到图片后面 img.send_keys(Keys.ARROW_RIGHT) # 输入内容 img.send_keys(work_log) # 保存 driver.switch_to.default_content() driver.switch_to.frame(first_layer_iframe) save_button = driver.find_element_by_id('rte-button-publish') save_button.click() # 操作完后切回主文档 driver.switch_to.default_content() time.sleep(5) driver.quit() os.system("shutdown -h now") sht_dwn() except Exception as e: print("错误详情:", str(e)) def shutdown_now(): from pynput.mouse import Controller as MouseController, Button from pynput.keyboard import Controller as KeyboardController, Key import time mouse = MouseController() keyboard = KeyboardController() # 鼠标移动到 (100, 200) mouse.position = (0, 0) time.sleep(1) # 点击左键 mouse.click(Button.left) print("已点击") def sht_dwn(): import subprocess print("正在关机...") subprocess.call([ 'osascript', '-e', 'tell application "System Events" to shut down' ]) if __name__ == '__main__': Timer(delay,auto_daka).start()
http://www.jsqmd.com/news/461438/

相关文章:

  • Minio分布式集群+nginx+keepalived部署
  • 前端八股文面经大全:字节跳动前端二面部分(2026-01-13)·面经深度解析
  • 为什么PHP的浮点数运算(如0.1+0.2)结果不是精确的0.3?IEEE浮点数标准是如何表示小数的?
  • OpenClaw 在 Windows 系统下的完整安装部署指南
  • 2026年3月东莞试验箱厂家靠谱推荐:恒温恒湿、交变湿热热、两箱式冷热冲击、三箱式冷热冲击、盐雾试验箱,艾博仪器解锁东莞试验箱优质之选 - 海棠依旧大
  • 2026实测|8款封神PPT工具,AI博主私藏,职场/学生/技术党直接抄作业
  • GESP / CSP-J入门讲解:题目的 题意分析 + C++题解
  • 2026软考资料,看这一篇就够了
  • 数字遗体化妆师:给去世程序员的代码做美容
  • python字符串、列表介绍
  • 为什么同一个类中方法互调,@Transacational会失效
  • ARM处理器指令系统——指令流水线(下,指令流水线的发展简介、影响流水线性能的因素)
  • 学鸿蒙开发好找工作吗?—— 百万人才缺口,引爆黄金职业风口
  • 国内GitHub镜像站搭建全攻略
  • 20260310_165916_网络安全:全网最全渗透测试指南,让你彻底看懂系统漏洞
  • 回归疫情预测
  • 深度学习卷积神经网络车牌识别系统
  • SQLAlchemy 高级批量插入笔记(标量子查询 + 显式参数绑定)
  • 类和动态内存分配(在构造函数中使用new 时应注意的事项)
  • Java常用API之String类
  • 图解最常用的 10 个机器学习算法!线性回归、逻辑回归、决策树、随机森林...
  • 喊着“全面拥抱AI”,可我连从哪下手都不知道——一位制造业软件工程师的真心话
  • 找当下口碑好的卡式风机盘管公司?2026年这些受认可,卧式暗装风机盘管/工业暖风机,卡式风机盘管批发厂家怎么选择 - 品牌推荐师
  • Druid 1.2.28发布,多项性能优化升级
  • Go语法练习小项目
  • 核心接口使用(四)Tool和MCP(2)MCP Server
  • Flutter 组件 ipaddr 适配鸿蒙 HarmonyOS 实战:高性能 IP 地址解析,构建子网掩码治理与网络边界安全架构
  • 票务预约系统代码3
  • 携程任我行礼品卡快速变现秘诀,这些回收渠道你知道吗? - 团团收购物卡回收
  • 基于Java springboot果蔬种植销售服务平台系统(源码+文档+运行视频+讲解视频)