用selenium開啟網頁的最小模板

工作手记發表於2024-08-01

前言

環境: win10 python3.10 selenium4.12

經常用selenium來實現一個開啟網頁的這樣一個小功能,雖然程式碼很少,但每次從0開始寫就很煩。所以這裡記錄下一個模板

小模板

以百度搜尋為例

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from loguru import logger

# 使用selenium開啟網頁的最小程式碼結構模板
# selenium 版本4.21

# 設定chrome選項
chrome_options = Options()
chrome_options.add_argument("--start-maximized")    #最大化視窗

# 配置自動下載合適版本的webdriver驅動
service = Service(ChromeDriverManager().install())
"""
# 不自動下載,手動設定webdriver路徑,以chromediver為例
chromedriver_path = r"E:\xxxxx\chromedriver.exe"  # 這裡替換為你下載的webdriver的路徑
service = Service(chromedriver_path)
"""
try:
    #第一層的try語句主要是防止webdiver開啟瀏覽器出錯,如驅動不匹配或未找到出現的異常
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    
    try:
	#第二層的try語句作用是,在成功開啟瀏覽器後,若出現其它異常,能確保關閉瀏覽器
        # 開啟目標網站 這裡以百度首頁為例
        driver.get('https://www.baidu.com/')

        # 以下是一些selenium的使用示例


		
	try:
		# 設定顯示等待來等待指定元素,最長等待時間7s
		#未在規定時間內滿足指定的等待條件,則丟擲異常TimeoutException
  		wait = WebDriverWait(driver, 7)
		# 透過id的定位方式等待百度輸入框的出現
		wait.until(EC.presence_of_element_located((By.ID, "kw")))
		# 透過id的定位方式等待百度一下按鈕的出現
		wait.until(EC.presence_of_element_located((By.ID, "su")))
	except TimeoutException as e:
		logger.info(f'未在規定時間內滿足指定的等待條件: {e}')
		raise
	except Exception as e:
		logger.info(f'等待中出現其它異常: {e}')
		raise
	
	# 百度首頁輸入框
	input = driver.find_element(By.ID, 'kw')
	# 輸入框輸入文字資料
	input.send_keys("1")
	
	#百度首頁 百度一下 按鈕
	baidu_buton = driver.find_element(By.ID, "su")
	# 點選按鈕
	baidu_buton.click()
	
	# 強制等待多少時間
	time.sleep(2)
		                 
    except Exception as e:
	logger.info(f"發生異常 稍後關閉瀏覽器: {e}")
        raise
    finally:
	#關閉瀏覽器
        driver.quit()
    
except Exception as e:
logger.info(f"webdiver開啟瀏覽器前發生異常: {e}")
    raise

關於顯示等待和隱式等待

	# 顯示等待的例子,用其來等待元素載入,針對於特定的元素起作用
	#如果未在規定的最長等待時間內滿足指定的等待條件,則會丟擲異常TimeoutException
        ## 最長等待時間10s
        wait = WebDriverWait(driver, 10)
        ## 等待條件-等待元素出現在DOM中
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'xxxx')))
        ## 等待條件-等待元素可點選
        wait.until(EC.element_to_be_clickable((By.ID, "xxxx")))
        ## 等待條件-等待元素中的文字出現
        wait.until(EC.text_to_be_present_in_element((By.ID, "xxxx"), "expected_text"))


        # 隱式等待的例子
        ##設定隱式等待時間為10秒,它在整個webdriver例項生命週期內起作用(也就是webdriver成功開啟瀏覽器後到 瀏覽器關閉期間)
        ##期間在查詢每一個元素時都自動受到該等待設定的影響
        driver.implicitly_wait(10)

        """
        在實際專案中,你可以綜合使用隱式等待和顯示等待。隱式等待可以作為全域性預設的等待機制
        而顯示等待可以用於處理特定的複雜場景
        """
		
	#強制等待多少時間
        time.sleep(2)
                  
  

相關文章