簡體   English   中英

無法在 Instagram 中定位 Selenium(使用 xpath)python 中的元素

[英]Unable to locate elements in Selenium (using xpath) python within Instagram

我正在嘗試使用 selenium 單擊一個元素,但由於某種原因,我一直使用 Xpath 遇到此錯誤。

from time import sleep
from selenium import webdriver

driver_path = "C:\WebDrivers\chromedriver"
driver = webdriver.Chrome(driver_path)
driver.implicitly_wait(5)
driver.get('https://www.instagram.com/accounts/login/?source=auth_switcher')

sleep(2)

username = driver.find_element_by_name('username')
username.send_keys('YourEmail')
password = driver.find_element_by_name('password')
password.send_keys('YourPassword')

submit =driver.find_element_by_tag_name('form')
submit.submit()

driver.implicitly_wait(15)

explore = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[3]/div/div[4]/a/svg/path')
explore.click()

問題出現在我的最后兩行代碼中。 Xpath 來自以下 html 行:

<path clip-rule="evenodd" d="M24 0C10.8 0 0 10.8 0 24s10.8 24 24 24 24-10.8 24-24S37.2 0 24 0zm0 45C12.4 45 3 35.6 3 24S12.4 3 24 3s21 9.4 21 21-9.4 21-21 21zm10.2-33.2l-14.8 7c-.3.1-.6.4-.7.7l-7 14.8c-.3.6-.2 1.3.3 1.7.3.3.7.4 1.1.4.2 0 .4 0 .6-.1l14.8-7c.3-.1.6-.4.7-.7l7-14.8c.3-.6.2-1.3-.3-1.7-.4-.5-1.1-.6-1.7-.3zm-7.4 15l-5.5-5.5 10.5-5-5 10.5z" fill-rule="evenodd"></path>

我不確定,但也許這與它在<svg>下的子分類有關

看截圖:

1

所需元素位於<svg>標簽內,因此要單擊該元素,您可以使用以下任一定位器策略

  • 使用css_selector

     driver.find_element(By.CSS_SELECTOR, "svg[aria-label='Find People'] > path[clip-rule='evenodd'][fill-rule='evenodd']").click()
  • 使用xpath

     driver.find_element(By.XPATH, "//*[name()='svg' and @aria-label='Find People']//*[name()='path' and @clip-rule='evenodd']").click()

理想情況下,您需要為element_to_be_clickable()引入WebDriverWait ,並且您可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "svg[aria-label='Find People'] > path[clip-rule='evenodd'][fill-rule='evenodd']"))).click()
  • 使用XPATH

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[name()='svg' and @aria-label='Find People']//*[name()='path' and @clip-rule='evenodd']"))).click()
  • 注意:您必須添加以下導入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

參考

您可以在以下位置找到一些相關的詳細討論:

暫無
暫無

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

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