Python?Selenium如何切換瀏覽器的頁面
我們在爬網(wǎng)使用Selenium進行測試的時候,有時候想要點擊瀏覽器里面的網(wǎng)址,跳到另一個頁面上,獲取第二個頁面的內(nèi)容。
可是有時候從官網(wǎng)進去,點擊跳轉(zhuǎn)到下一個頁面以后,卻沒法定位到下一個頁面的元素,這時候就需要在多個瀏覽器標簽頁或窗口之間切換了,以下是切換瀏覽器頁面的方法,這里主要使用的是window_handles
進行切換:
1. 獲取所有標簽頁句柄,并切換到特定標簽頁:
如果是需要點擊頁面的某個元素進入到下一頁,需要定位到跳轉(zhuǎn)下一個瀏覽器頁面的元素,點擊后,等待獲取所有的瀏覽器標簽頁的句柄。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 創(chuàng)建WebDriver實例,指定WebDriver的路徑 driver = webdriver.Chrome(executable_path='path/to/chromedriver') # 打開目標網(wǎng)頁 driver.get('https://XXX.com') # 等待頁面加載完成,然后定位元素 element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, ''))) # 點擊元素 element.click() # 等待新窗口打開,獲取新窗口的句柄 WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1)
使用driver.window_handles
來獲取當前瀏覽器所有打開的標簽頁的句柄列表,這意味著可以看到當前的瀏覽器有多少個頁面,最后以列表的形式呈現(xiàn)出來。
tabs = driver.window_handles print(tabs) print(len(tabs)) #打印列表的個數(shù)
接著使用driver.switch_to.window()
方法,傳入標簽頁句柄的位置,來切換到特定的標簽頁。
driver.switch_to.window(tabs[1]) # 切換到第二個標簽頁 driver.switch_to.window(tabs[2]) # 切換到第三個標簽頁
在新標簽頁中執(zhí)行完操作后,可以關(guān)閉它并返回到原來的標簽頁,否則如果打開過多,可能會導致計算機資源不足,從而影響其他應用程序的性能,甚至可能導致瀏覽器或操作系統(tǒng)變慢或崩潰。
driver.close() # 關(guān)閉當前標簽頁 driver.switch_to.window(tabs[0]) # 切換回第一個標簽頁
2. 打開新標簽頁,并連接新的網(wǎng)址:
可以使用JavaScript來打開一個新標簽頁,并自動切換到新的空白標簽頁。
driver.execute_script("window.open();")
然后獲取新的標簽頁句柄并切換:
new_tab = driver.window_handles[-1] # 新標簽頁通常是列表中的最后一個 driver.switch_to.window(new_tab)
然后連接目標的網(wǎng)址,最后關(guān)閉這個窗口并返回到原來的標簽頁。
driver.close() # 關(guān)閉當前標簽頁 driver.switch_to.window(tabs[0]) # 切換回第一個標簽頁
3.示例代碼
點擊網(wǎng)頁元素,實現(xiàn)跳轉(zhuǎn)的代碼:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 創(chuàng)建WebDriver實例,指定WebDriver的路徑 driver = webdriver.Chrome(executable_path='path/to/chromedriver') # 打開目標網(wǎng)頁 driver.get('https://XXX.com') # 等待頁面加載完成,然后定位元素 element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, ''))) # 點擊元素 element.click() # 等待新窗口打開,獲取新窗口的句柄 WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1) driver.switch_to.window(driver.window_handles[-1]) # 切換到新標簽頁 #進行下一步對新標簽頁的操作,此部分自行編輯 # 關(guān)閉新標簽頁并返回到原標簽頁 driver.close() driver.switch_to.window(driver.window_handles[0]) # 切換回原標簽頁 # 關(guān)閉新窗口 driver.close() # 最后,關(guān)閉瀏覽器 driver.quit()
新建空白窗口后,連接網(wǎng)址的代碼:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 創(chuàng)建WebDriver實例,指定WebDriver的路徑 driver = webdriver.Chrome(executable_path='path/to/chromedriver') # 打開目標網(wǎng)頁 driver.get('https://XXX.com') sleep(3) driver.execute_script("window.open();") driver.switch_to.window(driver.window_handles[-1]) # 切換到新窗口 # 在新窗口中進行操作... driver.get("http://www.XXX2.com") sleep(3) # 切換回原標簽頁 driver.switch_to.window(driver.window_handles[0]) # 關(guān)閉新窗口 driver.close() # 最后,關(guān)閉瀏覽器 driver.quit()
請注意,不同的瀏覽器可能在處理標簽頁和窗口時有細微的差別,在使用的過程中,注意瀏覽器的區(qū)別,上面使用的是谷歌瀏覽器。
附:定位單個網(wǎng)頁元素
1.1 通過 id 定位網(wǎng)頁元素
import time from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 打開 chrome 瀏覽器 driver.get("https://www.baidu.com/") input = driver.find_element(By.ID,"kw") input.send_keys('大數(shù)據(jù)就業(yè)前景') input.send_keys(Keys.ENTER) time.sleep(10) driver.quit()
1.2 通過 path 定位單個網(wǎng)頁元素
1)網(wǎng)頁對象path獲取方法
2)代碼案例
import time from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.common.by import By driver = webdriver.Chrome() # 打開 chrome 瀏覽器 driver.get("https://www.baidu.com/") input = driver.find_element("xpath","/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input") # 指定搜索欄中的內(nèi)容 input.send_keys("大數(shù)據(jù)就業(yè)前景") # 相當于回車鍵 input.send_keys(Keys.ENTER) # 設置網(wǎng)頁停留時間 time.sleep(30) driver.quit()
總結(jié)
到此這篇關(guān)于Python Selenium如何切換瀏覽器的頁面的文章就介紹到這了,更多相關(guān)Selenium切換瀏覽器頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中的import、from import及import as的區(qū)別解析
在Python中,如果import的語句比較長,導致后續(xù)引用不方便,可以使用as語法,這篇文章主要介紹了python中的import、from import以及import as的區(qū)別,需要的朋友可以參考下2022-10-10jupyter notebook運行命令顯示[*](解決辦法)
這篇文章主要介紹了jupyter notebook運行命令顯示[*],文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05python實現(xiàn)批量注冊網(wǎng)站用戶的示例
今天小編就為大家分享一篇python實現(xiàn)批量注冊網(wǎng)站用戶的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02python BitMap算法處理20億隨機整數(shù)去重
這篇文章主要為大家介紹了python BitMap算法處理20億隨機整數(shù)去重,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01python爬蟲 貓眼電影和電影天堂數(shù)據(jù)csv和mysql存儲過程解析
這篇文章主要介紹了python爬蟲 貓眼電影和電影天堂數(shù)據(jù)csv和mysql存儲過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09