以下是 HTML 代碼。我想單擊匯出到 CSV。
<pre>
<div id="leo-title-bar" style="width: 100%">
<div class="container-fluid p-0"><div class="no-gutters" style="min-height: 100vh;">
<div class="col-12 d-flex flex-column">
<nav class="navbar navbar-dark bg-primary justify-content-start" style="height: 64px; flex-wrap: unset;">
<span class="navbar-brand" style="flex: 1 1 0%; font-size: 22px;">Agency Summary</span>
<svg aria-labelledby="svg-inline--fa-title-5AhAR2Z9sKF8" data-prefix="fas" data-icon="download" class="svg-inline--fa fa-download fa-w-16 svg-shadow svg-icon-basic svg-icon-basic-hover" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<title id="svg-inline--fa-title-5AhAR2Z9sKF8">Export to CSV</title>
<path fill="currentColor" d="M216 0h80c13....."></path></svg>
</div></main>
</div>
</div>
</div>
</div>
</pre>
我試過以下代碼:
from selenium import webdriver
driver = webdriver.Edge(PATH)
driver.find_element_by_xpath('//div[@class="col-12 d-flex flex-column"]/*[name()="svg"][@aria-labelledby="svg-inline--fa-title-5AhAR2Z9sKF8"]').click()
收到錯誤:
selenium.common.exceptions.NoSuchElementException
uj5u.com熱心網友回復:
可能你錯過了延遲。
所以添加一些虛擬睡眠
from selenium import webdriver
import time
driver = webdriver.Edge(PATH)
time.sleep(5)
driver.find_element_by_xpath('//div[@]/*[name()="svg"][@aria-labelledby="svg-inline--fa-title-5AhAR2Z9sKF8"]').click()
應該可以解決您的問題。
此外,您的定位器看起來很糟糕。您必須創建更可靠的定位器。
此外,您應該使用預期條件顯式等待,如下所示:
from selenium import webdriver
import time
rom selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Edge(PATH)
wait = WebDriverWait(driver, 20)
wait.until(EC.visibility_of_element_located((By.XPATH, '//div[@]/*[name()="svg"][@aria-labelledby="svg-inline--fa-title-5AhAR2Z9sKF8"]'))).click()
uj5u.com熱心網友回復:
改變
.../*[name()="svg"]...
到
.../*[local-name()="svg"]...
在您的 XPath 運算式中,因為您的<svg...>元素在 namespace 中xmlns="http://www.w3.org/2000/svg"。事情是name()匹配命名空間:名稱,但local-name()只匹配沒有命名空間(-前綴)的名稱。
uj5u.com熱心網友回復:
所需的元素是svg元素。要在元素上單擊(),您必須為element_to_be_clickable()誘導WebDriverWait ,并且您可以使用以下任一定位器策略:
使用
CSS_SELECTOR:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#leo-title-bar svg[data-icon='download']"))).click()使用
XPATH:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='leo-title-bar']//*[name()='svg' and @data-icon='download']"))).click()注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
參考
您可以在以下位置找到一些有關與 SVG 元素互動的相關討論:
- 如何通過 Selenium-Python 訪問“rect”型別的元素
- 使用 selenium python 點擊?? svg
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420598.html
標籤:
上一篇:Seleniumxpath:嘗試從存檔鏈接中獲取原始網址
下一篇:FileNotFoundError:[Errno2]Nosuchfileordirectory:'/content/drive/MyDrive/Santillana/geckodriver&
