btn_ele = driver.find_element(By.id,'kw')
print(btn_ele.tagname) # 结果:input
btn_ele = driver.find_element(By.id,'kw')
print(btn_ele.text) # 结果:百度一下
v = btn.get_attribute("value")
print(v) # 结果:百度一下
is_visible = btn.is_displayed()
print(is_visible) # 结果:true
# 切换到指定的frame:1.指定iframe的name进行切换
driver.switch_to.frame("login_frame")
# 切换到指定的frame:2.通过索引进行切换,索引从0开始
driver.switch_to.frame(0)
# 切换到指定的frame:3.通过节点进行切换
ele = driver.find_element_by_xpath("//iframe[@id='login_frame']")
driver.switch_to.frame(ele)
driver.find_element_by_xpath("//a[@class='switch_btn']").click()
# 切换到指定的frame:4.使用显式等待的方式
WebDriverWait(driver,20,0.5).until(
EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='login_frame']"))
)
driver.find_element_by_link_text("帐号密码登录").click()
# 切换回默认的HTML页面,无论你之前进入了哪个嵌套的iframe,都能够直接切刀最外面
driver.switch_to.default_content()
# 切换回上一个frame
driver.switch_to.parent_frame()
在我的这篇
中已经介绍。
通过打印窗口句柄,我们能够发现打开的新窗口句柄总是在最后一个,那么我们可以使用 driver.switch_to.window(传入要切换的窗口对应句柄) ,切换到新窗口从而定位元素。
下面是切换的思路:
driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys("kaishui")
driver.find_element_by_id("su").click()
ws = driver.window_handles
# 打印弹出新窗口前的所有窗口句柄
print(ws) # 结果:['CDwindow-51C56D1B1F3CDD966CB534B3AEC14225']
# 点击百度搜索出来的第一个页面,会打开一个新的窗口
driver.find_element_by_xpath("//div[@id='1']//h3//a").click()
# 等待新窗口打开,如果没有打开新窗口就会报错
WebDriverWait(driver,5,0.5).until(
EC.new_window_is_opened(ws)
)
ws = driver.window_handles
print(ws) # 结果:['CDwindow-51C56D1B1F3CDD966CB534B3AEC14225', 'CDwindow-1E7E70169C07E1268CBF50CC347BDAC1']
# 切换到新窗口
driver.switch_to.window(ws[-1])
# 定位新窗口上的元素
driver.find_element_by_xpath("//img[@title='与热水的不解之缘']").click()
time.sleep(2)
driver.quit()
对打开新窗口并切换的封装
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 打开指定窗口并切换到该窗口
def new_open_window(driver,url):
# 获得所有窗口的句柄
start_window = driver.window_handles
# 打开新窗口并跳转到指定页面
js = 'window.open({});'.format(url)
driver.execute_script(js)
# 等待新窗口打开
WebDriverWait(driver,10,0.5).until(
EC.new_window_is_opened(start_window)
)
# 切换窗口
driver.switch_to_window(driver.window_handles[-1])