004 selenium 窗口/下拉框/alert
''' 时间:2018/12/04 功能:窗口/下拉框/alert 目录: 一: 窗口 1 切换窗口 2 关闭窗口 二: 下拉框 1 xpath 2 select 三: alert 1 百度保存 2 三种处理 四: 未解决 1 下拉框 '''
一: 窗口
1 切换窗口
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("https://www.hao123.com") # 获取句柄 - 当前窗口 time.sleep(2) cur_handle = driver.current_window_handle print(cur_handle) driver.find_element_by_link_text("人民网").click() # 获取句柄 - 所有窗口 time.sleep(2) all_handle = driver.window_handles print(all_handle) # 获取句柄 - 最新窗口 new = all_handle[-1] driver.switch_to.window(new) print(driver.title) # 切换窗口 - 开始窗口 driver.switch_to.window(all_handle[0]) print(driver.title)
2 关闭窗口
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("https://www.hao123.com") # 获取句柄 - 当前窗口 time.sleep(2) cur_handle = driver.current_window_handle print(cur_handle) # 隐式等待 : 当前页面 - 全局有效 driver.implicitly_wait(5) driver.find_element_by_link_text("人民网").click() # 获取句柄 - 所有窗口 time.sleep(2) all_handle = driver.window_handles print(all_handle) # 获取句柄 - 最新窗口 new = all_handle[-1] driver.switch_to.window(new) print(driver.title) # 切换窗口 - 开始窗口 driver.switch_to.window(all_handle[0]) print(driver.title) # 关闭窗口 - 起始窗口 driver.close() # 关闭窗口 - 最新窗口 driver.switch_to.window(all_handle[-1]) driver.close()
二: 下拉框
1 xpath
1 : 定位百度的搜索设置,页面显示条数。
1 : 先使用搜狗浏览器自带工具,进行定位测试。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() driver.get("https://www.baidu.com") time.sleep(1) # 定位元素 - 搜索设置 driver.implicitly_wait(5) # 隐式等待 : 当前页面 - 全局有效 mouse = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mouse).perform() driver.find_element_by_link_text("搜索设置").click() time.sleep(1) # 定位元素 - 每页显示 driver.find_element_by_id("nr").click() time.sleep(2) driver.find_element_by_xpath(".//*[@id='nr']/option[3]").click()
2 select
1 : 查看源代码 select.py。
1 : 查看源代码的定位方法。
三种方法
select_by_value
select_by_index
select_by_visible_text
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select import time driver = webdriver.Firefox() driver.get("https://www.baidu.com") time.sleep(1) # 定位元素 - 搜索设置 driver.implicitly_wait(5) # 隐式等待 : 当前页面 - 全局有效 mouse = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mouse).perform() driver.find_element_by_link_text("搜索设置").click() time.sleep(1) # 定位元素 - select_by_index element = driver.find_element_by_id("nr") Select(element).select_by_index(2) element.click() # 定位元素 - select_by_value element = driver.find_element_by_id("nr") Select(element).select_by_value("50") element.click() # 定位元素 - select_by_value element = driver.find_element_by_id("nr") Select(element).select_by_visible_text("每页显示50条") element.click()
三: alert
1 百度保存
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import Select import time driver = webdriver.Firefox() driver.get("https://www.baidu.com") time.sleep(1) # 定位元素 - 搜索设置 driver.implicitly_wait(5) # 隐式等待 : 当前页面 - 全局有效 mouse = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mouse).perform() driver.find_element_by_link_text("搜索设置").click() time.sleep(1) # 定位元素 - select_by_value element = driver.find_element_by_id("nr") Select(element).select_by_visible_text("每页显示50条") element.click() # 保存设置 driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click() time.sleep(0.5) # alert弹窗 alert = driver.switch_to.alert # 切换窗口 - alert print(alert.text) # 打印文本 alert.accept() # 点击确定
2 三种处理
<html> <head> <title>Alert</title> </head> <body> <input id = "alert" value = "alert" type = "button" onclick = "alert('这个叫alert');"/> <input id = "confirm" value = "confirm" type = "button" onclick = "confirm('这个叫confirm');"/> <input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('这个叫prompt'); document.write(name) "/> <iframe id = "iframe12" <input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd">按钮 </iframe> </body> </html>
1 : 保存到桌面,命名为 alert.html。
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("file:///C:/Users/Administrator/Desktop/alert.html") time.sleep(1) # 定位元素 - alert driver.find_element_by_xpath(".//*[@id='alert']").click() time.sleep(0.5) # alert弹窗 alert = driver.switch_to.alert # 切换窗口 - alert print(alert.text) # 打印文本 alert.accept() # 点击确定 # 定位元素 - confirm driver.find_element_by_xpath(".//*[@id='confirm']").click() time.sleep(0.5) # alert弹窗 alert = driver.switch_to.alert # 切换窗口 - alert time.sleep(0.5) print(alert.text) # 打印文本 time.sleep(1) alert.dismiss() # 点击取消 # 定位元素 - confirm driver.find_element_by_xpath(".//*[@id='prompt']").click() time.sleep(0.5) # alert弹窗 alert = driver.switch_to.alert # 切换窗口 - alert print(alert.text) # 打印文本 alert.send_keys("test") # 输入内容 alert.accept() # 点击确定
1 : 分别对三种不同的结果进行处理。
四: 未解决
1 下拉框
使用xpath定位,百度搜索-显示页面条数的下拉框,下拉框不自动缩回。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() driver.get("https://www.baidu.com") time.sleep(1) # 定位元素 - 搜索设置 driver.implicitly_wait(5) # 隐式等待 : 当前页面 - 全局有效 mouse = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mouse).perform() driver.find_element_by_link_text("搜索设置").click() time.sleep(1) # 定位元素 - 每页显示 driver.find_element_by_id("nr").click() time.sleep(2) driver.find_element_by_xpath(".//*[@id='nr']/option[3]").click()
''' 原因 硬件 系统(版本、位数) 浏览器(品牌、版本、位数) selenium(版本) pycharm(品牌、版本、位数) '''