'''
时间: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(品牌、版本、位数)
'''