python3 使用 Selenium 自動化測試或爬取資料

發表於2023-09-27

第一步,先安裝工具:
//預設在liunx環境執行,其他環境差不多,安裝方式有點區別
1.下載 google-chrome-stable_current_x86_64.rpm 安裝
google-chrome --version

2.下載 chromedriver_linux64.zip 安裝
chromedriver --version

如果這樣兩個安裝成功就可以下一步了。

第二步,啟動模擬器
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()

第三步,建立Chrome WebDriver
driver = webdriver.Chrome()

注意,以上只在2步liunx下面才需要做的,win環境可以直接指定瀏覽器的驅動器也可以執行,
比如我的驅動位置
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\App\chromedriver.exe")

第四步,嘗試訪問URL
driver.get(url)

第五步,增加等待時間為10秒,使用顯式等待來增加等待時間,確保 Selenium 有足夠的時間來查詢或互動元素
wait = WebDriverWait(driver, 10)

現在就可以獲取網頁元素了,比如我想獲取title
title = driver.title

或者想獲取其中的某個ID
wait.until(EC.presence_of_element_located((By.ID, ID))

獲取其中的元素
wait.until(EC.visibility_of_element_located((By.TAG_NAME, "h1")))
wait.until(EC.visibility_of_element_located((By.ID, "ID")))
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "[class*='Text']")))

要注意presence_of_element_located和visibility_of_element_located的區別
1.presence_of_element_located:
這個條件用於等待頁面上的元素出現在 DOM 結構中,但並不關心元素是否可見或是否被隱藏。
當使用這個條件時,Selenium 會等待直到頁面上的元素在 DOM 中存在,即使元素不可見或被遮擋也會滿足條件。
這個條件通常用於等待元素載入完成,但不需要考慮元素的可見性,例如等待一個頁面載入的 spinner 消失。
2.visibility_of_element_located:
這個條件用於等待頁面上的元素在 DOM 結構中存在並且可見。
當使用這個條件時,Selenium 會等待直到元素在 DOM 中存在並且滿足 CSS 樣式或佈局上的條件,使得它對使用者可見。
這個條件通常用於等待元素載入完成並且在頁面上可見,例如等待一個按鈕出現並且可以被使用者點選。

如果想點選按鈕可以這樣操作
button = driver.find_element_by_id("myButton") # 替換為按鈕的實際 ID
button.click()

執行其他測試操作
...

最後需要關閉瀏覽器
driver.quit()

相關文章