无法使用 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)