自动填写学校每日体温上报的问卷星
准备工作
代码内容主要是操作我们学校的问卷星
主要是通过selenium操作浏览器
驱动下载(注意和自己浏览器的版本对应)
Edge驱动下载 Microsoft Edge Driver - Microsoft Edge Developer
谷歌的驱动的下载镜像 ChromeDriver Mirror (taobao.org)
其他下载地址自行百度就好
将下载好的驱动放到python目录下或者在代码中指明驱动路径
from time import sleep
from selenium import webdriver
#如果放到python目录下
#driver = webdriver.Edge()
driverfile_path = r'D:\conda\envs\SSM-Study\msedgedriver.exe'
driver = webdriver.Edge(executable_path=driverfile_path)
driver.get(r'https://www.baidu.com/')
sleep(5)
driver.close()
selenium安装
忽略本地缓存安装或者升级
pip --no-cache-dir install -U selenium
pip --no-cache-dir install -U selenium -i https://mirrors.aliyun.com/pypi/simple/
测试是否可用 代码参照上面
操作过程
启动浏览器
driver = webdriver.Chrome()
#以谷歌为例,其他的浏览器类似
#edge driver = webdriver.Edge()
访问页面
driver.get(r'xxx')
操作页面
常用的两个函数
driver.find_element_by_xpath("xxx") # HTML元素的路径?应该可以这么说吧
driver.find_element_by_id("xxx") # HTML元素的id
常用的操作
driver.find_element_by_id("kw").clear() # 清除文本
driver.find_element_by_id("kw").send_keys("selenium") # 模拟按键输入内容
driver.find_element_by_id("su").click() # 单击选中元素
智能验证
# 百度找了找说在开头加上这个可以绕过智能验证,但是。。。。。。
# 遇到验证直接该点击的点击,该滑块的滑块就得了。。。。
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
我的代码
import random
from selenium import webdriver
import time
from selenium.webdriver.support.select import Select
#增加一个参数 实现在不打开浏览器的情况下完成系列操作
'''
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(chrome_options=option)
'''
driver = webdriver.Chrome() # Chrome浏览器
# 打开网页
driver.get("https://www.wjx.top/vm/xxx")
time.sleep(1)
#q1 这里是选择日期,选择日期的窗口是一个iframe 元素
driver.find_element_by_id("q1").click()
iframeWeb = driver.find_element_by_id('div__calendarIframe')
driver.switch_to.frame(iframeWeb)
driver.find_element_by_id("selectTodayButton").click()
driver.switch_to.default_content()
#q2
driver.find_element_by_xpath("//form[1]//div[@id='div2']/div[2]/div[1]").click()
#q3
driver.find_element_by_id('q3').send_keys("学号")
#q4
driver.find_element_by_id('q4').send_keys("姓名")
#q5
driver.find_element_by_xpath("//div[@id='div5']/div[2]/div[1]").click()
#q7
driver.find_element_by_xpath("//div[@id='div7']/div[2]/div[2]").click()
#q10
driver.find_element_by_id('q10').send_keys('36.%d' % random.randint(0, 9))
#q13 定位 同iframe 元素
driver.find_element_by_xpath("//div[@class='get_Local']").click()
time.sleep(2)
iframeWeb = driver.find_element_by_id('yz_popwinIframe')
driver.switch_to.frame(iframeWeb)
driver.find_element_by_id('txtInput').send_keys("地址")
driver.find_element_by_id('btnSearch').click()
time.sleep(1)
try:
driver.find_element_by_xpath("//div[@id='divauto']/ul/li[1]").click()
except:
print(" ")
driver.find_element_by_xpath("//div[@id='divCurLoc']/a").click()
driver.switch_to.default_content()
#q16
driver.find_element_by_id('q16').send_keys("无")
#17
js = 'document.querySelectorAll("select")[0].style.display="block";'
driver.execute_script(js)
s1 = Select(driver.find_element_by_id('q17'))
s1.select_by_index(2)
#q18 家庭成员体温
driver.find_element_by_id('q18').send_keys('母亲:36.%d' % random.randint(0, 9))
#提交
time.sleep(1)
driver.find_element_by_id('ctlNext').click()
time.sleep(1)
try:
driver.find_element_by_xpath("//div[@id='alert_box']//button").click()
driver.find_element_by_id('SM_BTN_WRAPPER_1').click()
except ():
print("不需要验证")
finally:
time.sleep(1)
try:
time.sleep(3)
driver.find_element_by_id('divTopHeight')
driver.__exit__()
except():
time.sleep(3)
driver.__exit__()
finally:
driver.__exit__()
执行
因为我使用的是虚拟python环境所以先写了一个power shell脚本执行
然后在使用批处理调用这个脚本
感觉过程绕了个圈,但是懒得百度去怎么做了
添加定时任务
win+s搜索任务计划程序