无法使用硒在网络地图应用程序中定位元素

Unable to Locate element in web map application using selenium

我试图在 Web 应用程序上定位一个元素,但它不起作用。 在网页和 python 脚本的代码源下方。

  <div class="widget-body flex-fluid full-width flex-vertical overflow-y-auto overflow-x-hidden">
    <div class="feature-list">
        <div class="flex-horizontal feature-list-item">
<!---->
  <div class="flex-fluid list-item-content overflow-hidden">
    <div class="external-html">
      <p><span style="font-size:12px">Ascension</span></p>

    </div>
  </div>

<!----></div>
        <div class="flex-horizontal feature-list-item active">
<!---->
  <div class="flex-fluid list-item-content overflow-hidden">
    <div class="external-html">
      <p><span style="font-size:12px">Assumption</span></p>

    </div>
  </div>

<!----></div>
        <div class="flex-horizontal feature-list-item">
<!---->
  <div class="flex-fluid list-item-content overflow-hidden">
    <div class="external-html">
      <p><span style="font-size:12px">East Baton Rouge</span></p>

    </div>
  </div>

我使用的 python 代码给我一个错误 AttributeError: 'list' object has no attribute 'click':

from selenium import webdriver
Driver='C:/Python27/chromedriver.exe'
url='https://ds.maps.arcgis.com/apps/dashboards/c8f1c81fa9d041da8de7fe5ea9193c7f'
driver = webdriver.Chrome(Driver)
driver.get(url)
elem=driver.find_elements_by_xpath('.//span[contains(text(), "Assumption")]')                     
elem.click()

这个 xpath

.//span[contains(text(), "Assumption")]

错了,试试这个:

//*[contains(text(), "Assumption")]

另外,推荐使用explicit-wait点击网页元素。

更新:

driver.maximize_window()
wait = WebDriverWait(driver, 30)
driver.get("https://ds.maps.arcgis.com/apps/dashboards/c8f1c81fa9d041da8de7fe5ea9193c7f")
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'Assumption')]"))).click()

进口:

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

您正在使用 find_elements_by_xpath 其中 returns 一个列表,因此出现了上述错误。您应该使用 find_element_by_xpath 并且点击应该可以正常工作。

wait=WebDriverWait(driver, 10)
url='https://ds.maps.arcgis.com/apps/dashboards/c8f1c81fa9d041da8de7fe5ea9193c7f'
driver.get(url)
elem=wait.until(EC.element_to_be_clickable((By.XPATH,"//span[.='Assumption']")))                   
elem.click()

您需要做的就是等待元素,然后单击它。 以前你没有等待,所以页面加载导致找不到它的问题。您还试图找到多个元素,而不仅仅是一个元素,所以您有一个数组,因此您可以使用 elem[x].click() 等

进口:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

输出: