python—web自动化(2)—日历控件,alter弹框处理(商城-个人中心,小案例)
- 案例需求:
-
点击账号设置
-
点击个人资料
-
修改真实姓名
-
选择性别
-
输入生日
-
输入qq号
- 点击确定
-
- 技术点:
- form表单里的元素,可以通过submit提交
- 通过css_select的方式,可以采用任意的属性定位
- 操作日历控件:
- 一次一次点击,选择年月日
- 可以删除readonly属性,再手动输入(javascript可以)
- 清空默认值:clear
- 弹出框的处理:alert
- 智能等待-显示等待
- 浏览器设置代码:
-
from selenium import webdriver # 打开浏览器 user_info_wdr = webdriver.Chrome() # 设置隐式等待 user_info_wdr.implicitly_wait(10) # 设置窗口最大化 user_info_wdr.maximize_window()
-
- submit提交form表单:
- 页面元素:
![]()
- 代码:
-
# 输入账号密码 user_info_wdr.find_element_by_id('username').send_keys('cs001') user_info_wdr.find_element_by_id('password').send_keys('123456') # 提交登录 ''' form表单可以使用submit方法,可以一次性提交所以表单元素 submit能实现click效果,但只适用form表单 ''' user_info_wdr.find_element_by_id('password').submit()
-
- 页面元素:
- 选择部分link_text进行定位:
- 页面元素:
![]()
- 代码:
-
# 点击个人资料 #user_info_wdr.find_element_by_link_text('个人资料').click() ''' 有时候链接文本会被图标隔断,无法通过完整的文本定位,此时可以使用 by_partial_link_text方法,它支持部分文本定位 ''' user_info_wdr.find_element_by_partial_link_text('人资').click()
-
- 页面元素:
- 通过css_selector的方式,使用属性定位:
- 页面元素:
![]()
- 代码:
-
# 修改真实姓名 user_info_wdr.find_element_by_id('true_name').send_keys('今晚打老虎') # 选择性别 ''' css_selector可以采用任意属性来进行定位,使用时把属性放入中括号; 性别单选框里每个选项的value值不同 ''' user_info_wdr.find_element_by_css_selector('[value="1"]').click()
-
- 页面元素:
- 日历控件定位操作:
- 页面元素:
![]()
-
在控制台使用JavaScript删除readonly测试:
- 截图:
![]()
- 代码:
-
//document表示整个网页 document.getElementById('date') //通过id获取日历控件 //删除属性 document.getElementById('date').removeAttribute('readonly')
-
- 测试成功后,把代码复制到Python中,使用execute_script执行
- 代码:
-
# 输入生日 ''' 日历控件一个一个点击,比较麻烦也容易出错,所以使用新方法 通过JavaScript删除属性,在使用send_keys进行输入 ''' # 删除属性 script = 'document.getElementById("date").removeAttribute("readonly")' user_info_wdr.execute_script(script) # 手动输入生日 '''生日框本来的内容需要清空,使用clear''' user_info_wdr.find_element_by_id('date').clear() # 清空后在输入 user_info_wdr.find_element_by_id('date').send_keys('1999-06-06')
-
- 页面元素:
-
- 输入qq号点击确认:
-
# 输入qq号 user_info_wdr.find_element_by_id('qq').send_keys('123456789') # 点击确定 user_info_wdr.find_element_by_css_selector('[value="确认"]').click()
-
- 输入qq号点击确认:
- 提交后页面效果:
- 存在的问题:
- 第二次运行脚本后,姓名,qq,会追加内容,所以在输入内容前,需要使用clear清空
- 页面弹框无法获取元素,弹窗是Alert非网页元素,是JavaScript的控件:
-
-
-
- selenium提供Alert处理方法:
-
-
- 点击确定按钮:webdriver.switch_to.alert.accept()
- 点击取消按钮:webdriver.switch_to.alert.dismiss()
- 获取弹框提示的文本信息:webdriver.switch_to.alert.text
-
- 代码:
-
# 等待弹框出现 time.sleep(2) # alert弹框处理:获取弹框信息 alert_text = user_info_wdr.switch_to.alert.text print(alert_text) # 个人信息修改失败!,因为上面输入的信息写死了,对于系统来说没有发生改变,后续优化 # alert弹框处理:点击确定 user_info_wdr.switch_to.alert.accept()
-
- 代码:
- 智能等待之显示等待:
- 概念:隐式等待是针对页面加载,alert弹窗的出现没有进行页面刷新加载,如果使用time等待,时长设置不那么合理 用法:
-
# 设置显示等待 # 导入WebDriverWait(传入浏览器对象,设置30s最大等待时间,每隔0.5s检查一次) # 导入expected_conditions(设置期望的条件,alert弹框出现) WebDriverWait(user_info_wdr,30,0.5).until(expected_conditions.alert_is_present())






浙公网安备 33010602011771号