[英]Python selenium select a dynamic button
我試圖選擇一個按鈕,但我在很多方面都失敗了。 源代碼如下所示:
<div class="sc-fzXfPJ soOmg">
<button type="submit" class="sc-fzXfQu KbRNP SuiButton SuiButton--primary
SuiButton--wide">
<div class="SuiButton-content">
<div class="SuiButton-label">
<span class="sc-fzXfNh cnQLcv">
<p>LET'S GET IT!</p>
當我嘗試 xpath 它給了我:
/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button
當我運行時:
driver.find_element_by_xpath('/html/body/div[11]/div/div/div[2]/div/div/div/div/div/form/div[3]/button').click()
它返回一個錯誤。 按鈕文字是:讓我們得到它!
我怎樣才能解決這個問題?
為此使用絕對的 XPath 是個壞主意,因為它們非常脆弱。 嘗試 ChroPath 擴展並找到相關的 XPath,這應該可以解決問題。
有時它會濫用內部的值,因此您可能希望從元素中刪除文本以獲得相對的 XPath 而不依賴於值。
這會有所幫助
driver.find_element_by_xpath("//p[contains(text(),'S GET IT!')]").click()
您可以將Xpath
與它的軸一起使用。 要了解有關軸的更多信息,您可以單擊此處。
對於您的分辨率,您可以使用此Xpath
-
//p[contains(text(),"GET IT"]/ancestor::button[@type='submit']
.
使用絕對Xpath
不是一個好主意,因為它很容易損壞,不應該被首選。
如果您遇到任何問題,請告訴我,解決方案是根據您共享的代碼給出的。
話雖如此,使用絕對的 xpath 並不是一個好習慣。
嘗試一些替代方案:
使用 CSS 選擇器:
driver.find_element_by_css_selector("button[type='submit']").click()
使用 Xpath 選擇器:
driver.find_element_by_xpath("//button[@type='submit']").click()
或使用 CSS 選擇器無法使用的按鈕文本:
driver.find_element_by_xpath('//button[contains(.,"LET\'S GET IT!")]').click()
為避免不必要的超時並保持腳本中的同步,請使用如下所述的顯式等待:
wait = WebDriverWait(driver, 20)
wait.until(EC.invisibility_of_element((By.CSS_SELECTOR, "button[type='submit']")))
driver.find_element_by_css_selector("button[type='submit']").click()
為此導入以下 package :
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.