上一张介绍了selenium ActionChains用法
selenium提供了更高级的玩法,Select模块。直接根据属性或索引定位。
导入包
from selenium.webdriver.support.select import Select
1. 通过select选项的索引来定位选择对应选项(从0开始计数),如选择第三个选项:select_by_index(2)
r = driver.find_element(By.ID,'xxxx')
Select(r).select_by_index(2)
2. 通过选项的value值来定位。每个选项,都有对应的value值
如:
<select id="nr" name="NR">
<option selected="" value="10">每页显示10条</option>
<option value="20">每页显示20条</option>
<option value="50">每页显示50条</option>
r = driver.find_element(By.ID,'NR')
Select(r).select_by_value(20)
3. 直接通过选项的文本内容来定位
Select(r).select_by_visible_text("每页显示50条")
4. 其他方法
deselect_all() :取消所有选项
deselect_by_index() :取消对应index选项
deselect_by_value() :取消对应value选项
deselect_by_visible_text() :取消对应文本选项
first_selected_option() :返回第一个选项
all_selected_options() :返回所有的选项
在此篇介绍下弹出框操作:
我是循环中处理,直接拷贝过来
r = brower.find_element(By.XPATH,param)
ActionChains(brower).move_to_element(r).click(r).perform()
alert = alert_is_present.is_alert(brower)
if(alert):
alert.accept()
continue
判断是否弹出对话框
from selenium.common.exceptions import NoAlertPresentException
class alert_is_present(object):
def is_alert(driver):
try:
alert = driver.switch_to.alert
alert.text
return alert
except NoAlertPresentException:
return False
对话框处理有如下情况:
1.警告消息框(alert)
警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。
2.确认消息框(confirm)
确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。
3.提示消息对话(prompt)
提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。
selenium 提供switch_to_alert()方法定位到 alert/confirm/prompt对话框。使用 text/accept/dismiss/send_keys 进行操作,这里注意的是send_keys只能对prompt进行操作。
- switch_to_alert() #定位弹出对话
- text() #获取对话框文本值
- accept() #相当于点击"确认"
- dismiss() #相当于点击"取消"
- send_keys() # 输入值,这个alert和confirm没有输入对话框,所以这里就不能用了,所以这里只能使用在prompt这里。
对于prompt需要特殊处理:
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''获取prompt对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取对话框的内容'''
print (dialog_box.text) #打印警告对话框内容
dialog_box.send_keys("2") #弹出框内输入2
dialog_box.accept() #接受