Selenium 窗口和frame定位
应用背景
selenium可以自由切换浏览器选项卡、处理浏览器弹窗、frame切换。
选项卡管理
import time from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") print(driver.window_handles) #['CDwindow-7D823685B95557598E6B89340A0CCFBB'] #打开新的浏览页 driver.execute_script("window.open()") #输出当前页面所有的句柄 print(driver.window_handles) # ['CDwindow-7D823685B95557598E6B89340A0CCFBB','CDwindow-1241630F7AD717D99DE97C39B2E68D73'] driver.switch_to.window(driver.window_handles[0]) driver.get("https://www.taobao.com") time.sleep(1) driver.switch_to.window(driver.window_handles[1]) driver.get("https://jd.com") time.sleep(1)
frame页面定位
案例:在Frame.html文件种定位搜狗搜索页面,进行搜索操作。
<html> <head> <title>Frame_test</title> </head> <body> <div> <iframe id="search" src="http://www.sogou.com" width="800" height="500"> </div> </body> </html>
from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
file_path='file:///D:/Users/xxxx/Desktop/test11.html'
driver.get(file_path)
#切换到 frame 页面内
driver.switch_to.frame("search")
#driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0
#driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 用WebElement对象定位
#定位到搜索框按钮输入关键词
driver.find_element_by_css_selector("#query").send_keys("python")
sleep(2)
driver.find_element_by_css_selector("#stb").click()
# driver.switch_to.default_content() #切回主文档
# driver.switch_to.parent_frame() #切换夫文档
sleep(2)
driver.quit()
切换弹窗
定位到alert弹窗,返回一个弹窗的对象
from selenium import webdriver from selenium.webdriver import ActionChains import time driver = webdriver.Chrome() driver.get("http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable") driver.maximize_window() driver.switch_to.frame('iframeResult') source = driver.find_element_by_id('draggable') target = driver.find_element_by_id('droppable') actions = ActionChains(driver) actions.drag_and_drop(source, target) #拖拽 actions.perform() #浏览器提示框处理 alert = driver.switch_to.alert # 获取弹窗内的文本 print(alert.text) #alert.accept() # 对弹窗对象的确定操作。返回原来的页面 time.sleep(3) alert.dismiss() # 对弹窗对象的取消操作。返回原来的页面 time.sleep(5) driver.quit()