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()
原文地址:https://www.cnblogs.com/watery/p/13873814.html