金数据晚点名自动提交

最近学校每天会发一个晚点名的金数据链接,有时候忘了还会收到辅导员的夺命连环call,很影响心情,于是决定弄一个自动提交的脚本。

1 搜集资料

通过查资料得知可以使用Selenium实现类似于点击和输入的功能。

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。

2 Selenium介绍

介绍一下使用到的函数,webdriver的是一个Web应用程序测试自动化工具,用来验证程序是否如预期的那样执行。

# 获取浏览器驱动,这里用的火狐
browser = webdriver.Firefox()

webdriver中的等待分为三种

  1. 强制等待:sleep()
  2. 隐式等待:implicitly_wait()
  3. 显式等待:WebDriverWait()
    这里主要使用显式等待
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
  1. driver:浏览器驱动
  2. timeout:最长超时时间,默认以秒为单位
  3. poll_frequency:检测的间隔步长,默认为0.5s
  4. ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
    显式等待主要和until()、until_not()函数结合使用。在设定的时间内等待后面的条件发生。

3 实现

根据webdriver这些api,首先拿到wait对象,然后分别拿到前端界面中的各种元素,分别进行提交,最后提交表单即可。
测试如下:

  1. 首先随便开一个金数据表单,表单包含三类:选择框,文字输入框,地理位置,如图
    金数据表单
  2. 获取前端界面元素
    选择框对应的前端代码,在脚本中选择对应的选项即可
    在这里插入图片描述
# 设置选项为是
car = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@value="8XEm"]')))
car.clear()
# 点击
car.click()
  1. 文字输入框
    在这里插入图片描述
    通过标签的class属性拿到该元素
name_input = wait.until(EC.presence_of_element_located(
    (By.XPATH, '//*[@class="ant-input sc-fznyAO itgrbt text-field field field_9"]')))
name_input.clear()
name_input.send_keys('555')  # 在这写入你的姓名
  1. 地理位置
    首先点击 获取地理位置
location = wait.until(EC.presence_of_element_located(
    (By.XPATH,'//*[@class="ant-btn sc-AxgMl ewSVVh geo-filed__caller form-theme--general-button ant-btn-primary ant-btn-block"]')))
location.click()

地理位置点开后界面如图
在这里插入图片描述
通过搜索地点来上传地理位置。首先拿到搜索框
在这里插入图片描述
在文本框中输入搜索的地点,并点击搜索按钮

# 通过class属性拿到对应的元素
search = wait.until(EC.presence_of_element_located(
    (By.XPATH, '//*[@class="ant-input sc-fznyAO hrrMRJ search-box-input"]')
))
search.send_keys('这里输入想搜索的地址')
# 停顿一秒,避免文字输入之前点击搜索按钮
time.sleep(1)
# 拿到搜索按钮
button = wait.until(EC.presence_of_element_located(
    (By.XPATH, '//*[@class="ant-btn sc-AxgMl ewSVVh search-btn"]')
))
# 将页面滑到底,防止按钮被遮挡
browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
# 点击搜索按钮
button.click()
# 停顿一秒,等待搜索结果
time.sleep(1)
  1. 提交
submit = wait.until(EC.presence_of_element_located((By.XPATH,
                        '//*[@class="ant-btn sc-AxgMl ewSVVh published-form__submit form-theme--submit-button ant-btn-primary"]')))
submit.click()
browser.close()

4 完整代码

browser = webdriver.Firefox()
wait = WebDriverWait(browser, 10)
browser.get('这里填写网址')  # 问卷网址

# 选项框,这里“8XEm”代表“是”
car = wait.until(EC.presence_of_element_located((By.XPATH,'//[@value="8XEm"]')))
car.clear()
car.click()

# 文本框
name_input = wait.until(EC.presence_of_element_located((By.XPATH, '/拿到对应元素')))
name_input.clear()
name_input.send_keys('在这里输入文本')

# 地理位置
location = wait.until(EC.presence_of_element_located((By.XPATH,'拿到对应元素')))
location.click()
search = wait.until(EC.presence_of_element_located((By.XPATH, '/拿到对应元素')
))
search.send_keys('这里输入地址')
time.sleep(1)
# 将页面滑到底,防止按钮被遮挡
button = wait.until(EC.presence_of_element_located((By.XPATH, '拿到对应元素')
))
browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
button.click()
time.sleep(1)
# 提交
submit = wait.until(EC.presence_of_element_located((By.XPATH,'拿到对应元素')))
submit.click()
browser.close()

5 后台运行

首先将上面的代码包装成一个函数,设置每天的某个时刻运行该函数即可
将python文件后缀改为.pwy,然后双击该文件即可保持运行

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值