侧边栏壁纸
博主头像
平平无奇小陈博主等级

今天不想跑,所以才去跑。

  • 累计撰写 46 篇文章
  • 累计创建 49 个标签
  • 累计收到 33 条评论

Python + Selenium 实现自动打卡

平平无奇小陈
2020-10-07 / 0 评论 / 0 点赞 / 61 阅读 / 2,244 字
温馨提示:
本文最后更新于 2022-03-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Python + Selenium 实现自动打卡

前言

因为每天都要填写健康调查,数据历史不能保留,比较繁琐,而且忘记了会扣钱,所以写了个程序定制执行。

Selenium 简介

Selenium 是一个用于Web应用程序测试的工具。

Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),[Mozilla Firefox](https://baike.baidu.com/item/Mozilla Firefox/3504923),Safari,Google Chrome,Opera等。主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

操作过程

日期控件处理

image.png

<input type="text" style="padding-left:25px;" id="q1" 
name="q1" readonly="readonly" data-role="datebox" class="datebox">

如图,日期控件点击操作比较麻烦,所以我们通过执行 Javascript 脚本,去除日期控件只读属性。

# 日期控件:移除只读属性,直接填值
rm_read_only = "document.getElementById('q1').removeAttribute('readonly')"
# 执行 js 脚本
browser.execute_script(rm_read_only)

获取当天日期并格式化,直接赋值到对应input标签上。

# 获取今天日期,并格式化日期:2020-10-01
today = time.strftime("%Y-%m-%d", time.localtime(time.time()))
browser.find_element_by_id("q1").send_keys(today)

输入框处理

image.png

<input rowid="1" type="text" id="q3_0" name="q3_0" minword="2" maxword="5">

输入框的处理比较简单,我们直接通过对应的 id 获取元素,并赋值即可。

browser.find_element_by_id("q3_0").send_keys("yujian95.cn")

单选框点击

image.png

<div class="label" for="q7_1">正常</div>

单选框因为没有对应的 idname ,这里我们通过 xpath 查找对应的元素,并选择即可。

# 单选框点击
browser.find_element_by_xpath("//*[@for='q7_1']").click()

完整代码

代码执行直接增加了 time.sleep(s) 是为了模拟正式用户操作的耗时。

from selenium import webdriver
import time

browser = webdriver.Chrome()
# 网页链接
browser.get('https://www.wjx.top/m/995.aspx')
time.sleep(1)

# 日期控件:移除只读属性,直接填值
rm_read_only = "document.getElementById('q1').removeAttribute('readonly')"
# 执行 js 脚本
browser.execute_script(rm_read_only)
time.sleep(1)

# 获取今天日期,并格式化日期:2020-10-01
today = time.strftime("%Y-%m-%d", time.localtime(time.time()))
browser.find_element_by_id("q1").send_keys(today)
time.sleep(3)

# 输入框填值,为了模拟真实填写,这里设置了一下执行间隔
browser.find_element_by_id("q3_0").send_keys("china")
time.sleep(3)
browser.find_element_by_id("q3_1").send_keys("yujian95")
time.sleep(3)

# 单选框点击
browser.find_element_by_xpath("//*[@for='q7_1']").click()

# 点击提交按钮
browser.find_element_by_id("ctlNext").click()
time.sleep(3)

# 退出浏览器
browser.quit()

0

评论区