多表單切換
案例:在Frame.html文件種定位搜狗搜索頁面,進行搜索操作
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>
瀏覽器打開:
frame_test.py
from selenium import webdriver from time import sleep driver=webdriver.Firefox() file_path=r'E:\python_script\Webdriver\1.html' driver.get(file_path) # 切換到iframe(id="if") driver.switch_to.frame('search') driver.find_element_by_id("query").send_keys("python") sleep(2) driver.find_element_by_id("stb").click() sleep(2) driver.quit()
多表單切換,是通過switch_to.frame()方法將當前定位的主題切換為frame/iframe表單的內切頁面中。
switch_to.frame()默認可以直接取表單的id或name屬性。如果iframe沒有可用的id和name屬性,則可以通過下面的方式進行定位
# 先通過xpath定位到iframe xf = driver.find_element_by_xpath('//*[@class="search"]') # 再將定位對象傳給switch_to.frame()方法 driver.switch_to.frame(xf)
多窗口切換
案例:在百度學術首頁,點擊注冊按鈕,進入注冊頁面,然后返回學術搜索頁面,輸入關鍵詞搜索
windows.py
from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.implicitly_wait(10) driver.get("http://xueshu.baidu.com/") # 獲得百度學術搜索窗口句柄 search_windows = driver.current_window_handle sleep(2) driver.find_element_by_link_text('注冊').click() sleep(2) # 獲得當前所有打開的窗口的句柄 all_handles = driver.window_handles # 進入注冊窗口 for handle in all_handles: if handle!=search_windows: print('now is register window!') sleep(2) # 回到學術搜索窗口 for handle in all_handles: if handle == search_windows: driver.switch_to.window(search_windows) sleep(2) print("now is search window!") driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() sleep(2) driver.quit()
webdriver提供了switch_to.window()方法,可以實現在不同的窗口之間切換。
在本案例中,涉及到的方法如下:
current_window_handle:獲得當前窗口句柄
window_handles:返回所有窗口的句柄到當前會話