selenium15-界面二次渲染及半自动化的用途
2019-06-29 本文已影响0人
筱媛媛
以前的web应用大都是后端直接产生最终的html界面,而现在呢?很多是页面加载后, 由前端代码动态改变界面的内容。比如从后端获取一些数据后,再动态改变界面的内容。这就是本篇主要讲解的“界面二次渲染问题,以及我们日常生活中“自动化的用途问题”。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:界面二次渲染
1)概述:操作一个元素时页面会发生变化,此时页面数据会重新生成。
2)解决:操作一个元素后,重新获取页面元素
前置条件:输入正确的账号密码登录教管系统
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('http://localhost/mgr/login/login.html')
driver.find_element_by_id('username').send_keys('auto')
driver.find_element_by_id('password').send_keys('sdfsdfsdf')
driver.find_element_by_tag_name('button').click()
(1)需求:删除教管系统的课程
delButtons = driver.find_elements_by_css_selector('*[ng-click^=delOne]')
for one in delButtons:
one.click()
driver.find_element_by_css_selector( '.btn-primary').click()
time.sleep(1)
(2)执行结果:StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(3)产生原因:当点击第一个按钮后页面部分被更新了, 剩余的几个按钮虽然看起来还是原来的样子,但已经是新的界面元素了
(4)解决方案:每次删除之后就重新获取当前界面的元素
修改后的代码如下:
while True:
delButtons = driver.find_elements_by_css_selector('*[ng-click^=delOne]')
# 空列表表示课程已经删除
if delButtons == []:
break
# 每次删除第一个课程
delButtons[0].click()
time.sleep(1)
02:半自动化的用途
1)概述:图形界面自动化的难度是比较大的,模拟难度大、检查难度大等。
2)实例:12306验证码问题
3)实现:验证码问题人工解决,后面的抢票环节自动化处理
需求点:12306需要输入验证码时,程序停下来发出报警声让人来操作
import time
import winsound
winsound.Beep(1500,30000)发出报警声
time.sleep(10)
********输入完验证码继续执行自动化代码********