无法使用 selenium 在 Web 地图应用程序中定位元素

Posted

技术标签:

【中文标题】无法使用 selenium 在 Web 地图应用程序中定位元素【英文标题】:Unable to Locate element in web map application using selenium 【发布时间】:2021-11-19 19:13:29 【问题描述】:

我试图在 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()

【问题讨论】:

【参考方案1】:
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

输出:

【讨论】:

【参考方案2】:

您正在使用find_elements_by_xpath,它返回一个列表,因此发生了上述错误。您应该使用find_element_by_xpath,点击应该可以正常工作。

【讨论】:

谢谢,你有什么建议。【参考方案3】:

这个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

【讨论】:

谢谢,我测试了 click 还是不行。 @Aymen :这个问题是关于定位正确的元素,我已经给出了解决方案,我也提到过使用显式等待,上面更新了。

以上是关于无法使用 selenium 在 Web 地图应用程序中定位元素的主要内容,如果未能解决你的问题,请参考以下文章

带有Python的Selenium Webdriver - 无法使用Selenium Web驱动程序在Web应用程序中提供输入(Date)

谷歌地图 WatchPosition 无法正常工作

将卫星导航嵌入网络系统

Selenium 无法检测 ms 团队(Web)调用界面中的元素

Selenium自动化应该避免的测试场景

无法从 Web 浏览器警报弹出窗口中使用 Selenium 获取文本