自动填写学校每日体温上报的问卷星

准备工作

代码内容主要是操作我们学校的问卷星

主要是通过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搜索任务计划程序

posted @ 2021-07-18 18:24  tifaIsMyWife  阅读(505)  评论(0编辑  收藏  举报