我正在使用 Selenium 4 和 Firefox Gecko Web 驅動程式制作 Python 3 腳本。
目標很簡單:
- 打開網頁
- 單擊藍色的“Greit”按鈕以接受 cookie

到目前為止,這是我的 Python 3 腳本,但它沒有按預期作業。該腳本似乎沒有找到按鈕。也許是因為它不是初始 DOM 的一部分。它由 javascript 彈出視窗觸發。
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
import time
URL = 'https://examplepage.com'
driver = webdriver.Firefox()
driver.get(URL)
time.sleep(2)
print(driver.page_source)
wait = WebDriverWait(driver, 5)
wait.until(ec.visibility_of_element_located((By.XPATH, '//button[text()="Greit"]')))
driver.find_element(By.XPATH, '//button[text()="Greit"]').click()
driver.quit()
我該怎么做才能讓 selenium 找到按鈕并單擊它?彈出視窗的 HTML 在 DevTools 檢查中可用,但在頁面源中不可用。
uj5u.com熱心網友回復:
您嘗試單擊的元素位于 iframe 內。
因此,您首先必須切換到該 iframe,然后單擊該元素。
這應該有效:
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
import time
wait = WebDriverWait(driver, 10)
wait.until(ec.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@id,'sp_message')]")))
wait.until(ec.visibility_of_element_located((By.XPATH, "//button[@title='Greit']"))).click()
driver.quit()
順便說一句,您可以將等待超時設定得更大一些,通常設定為 20 或 30 秒。使用這些超時沒有問題,因為一旦找到元素,Selenium 將立即繼續執行下一個命令。另一方面,您不希望您的測驗因為互聯網問題而失敗。
此外,您不需要在使用后再次獲取元素wait。此方法回傳 web 元素,因此您可以像我在代碼中顯示的那樣使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404728.html
標籤:
上一篇:硒代理處理
