在使用selenium做網站爬取測試的時候,我們經常會遇到一些需要點擊的元素,才能點擊到我們想要進入的頁面,
于是我們就要模擬 不斷地 點點點擊 鼠標的樣子。
這個時候網頁上就會有很多的標簽頁,你的瀏覽器網頁標簽欄 be like:
那么,怎么切換頁面,并返回到上一頁呢?
- 打包切換頁面的邏輯
def switch_windows(index):#獲取當前句current_window_handle = driver.current_window_handleprint(current_window_handle )#獲取所有句柄all_handles = driver.window_handlesprint(all_handles )#切換至第二個窗口driver.switch_to.window(all_handles [index])print(driver.title) #獲取目前內容頁的信息
- 點擊按鈕跳到下一頁 --> 切換到新頁面 -->操作新頁面內容 --> 返回上一頁
#點擊按鈕,跳轉到下一個頁面
element=driver.find_element(By.XPATH,input_)
element.click()#切換到最后一個頁面-新頁面
switch_windows(index=-1)#讀取頁面的信息
sleep(1)
page_html=driver.page_source
page_soup=BeautifulSoup(page_html,'lxml') #返回首頁
switch_windows(index=0)
除了用點擊到下一頁的方法,也可以模擬標簽點開的方法(強推!!!好用)
原理是,網頁模擬點開標簽,然后把網址輸入進去的過程
driver.execute_script("window.open('https://www.google.com')") # 新標簽頁1
driver.execute_script("window.open('https://www.python.org')") # 新標簽頁2
- 返回首頁以后,我們要把后面不用的其他標簽頁關閉掉:
# 獲取所有標簽頁的句柄(handles)
all_handles = driver.window_handles # 返回所有標簽頁的ID列表
homepage_handle = all_handles[0] # 首頁通常是第一個標簽頁# 關閉其他標簽頁(保留首頁)
for handle in all_handles:if handle != homepage_handle: # 如果不是首頁driver.switch_to.window(handle) # 切換到該標簽頁driver.close() # 關閉它# 最后切換回首頁
driver.switch_to.window(homepage_handle)print("已關閉其他標簽頁,僅保留首頁")
- 如果不確定在讀取頁面的時候,是不是讀取到自己想要的那個網址,可以使用讀取網址的方式判斷:
print("當前頁面URL:", driver.current_url)
也可以跟自己的目標網址做判斷,如果不對的話,則切換到上一個界面
current_url= driver.current_url
if current_url != target_url:switch_windows(index=-2) #比最后一個網址再上一個頁面
這部分內容在【返回首頁】的代碼之前,效果如:
PS:
一些網站的HTML內部會設置一些【點擊事件處理屬性】,
當用戶點擊這個元素時,會觸發 onclick 中定義的 JavaScript 代碼,類似下面的代碼。
這種可能就要點擊網頁上的元素,才能獲取網絡響應,直接跳轉到該網址上,是行不通的,可能會被發現爬蟲,然后強制跳轉到其他的網頁頁面上。
這個時候,只能用上面的方法了。
如果有更好的方法,可以解決如上的問題的話,希望大家可以提出來呀,感謝不盡!!