簡體   English   中英

Selenium web 驅動找不到按鈕

[英]Selenium web driver cannot find button

我正在使用 Selenium 4 和 Firefox Gecko Z2567A5EC9705EB789E 驅動程序制作 Python 3 腳本。

目標很簡單:

  • 打開網頁
  • 點擊藍色的“Greit”按鈕接受 cookies

在此處輸入圖像描述

到目前為止,這是我的 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 檢查中可用,但在頁面源中不可用。

您嘗試單擊的元素位於 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 元素,因此您可以按照我在代碼中顯示的那樣使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM