使用Selenium定位Web地图应用元素失败,报list对象无click属性错误
错误原因
find_elements_by_xpath 方法返回的是所有符合匹配规则的WebElement组成的列表,列表对象没有click方法,只有单个WebElement实例才支持点击操作,因此触发了AttributeError报错。
修复方案
有两种常用修复方式:
- 确认仅存在一个目标匹配元素时,直接使用单数形式的查找方法替换原有复数方法即可
- 存在多个匹配元素时,取下标指定你需要操作的元素再调用
click,示例:elem[0].click()
另外因为目标页面是动态加载的地图类应用,元素渲染存在延迟,建议添加显式等待逻辑,避免页面未加载完成就查找元素导致的匹配失败问题。
修正后可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC Driver='C:/Python27/chromedriver.exe' url='https://ds.maps.arcgis.com/apps/dashboards/c8f1c81fa9d041da8de7fe5ea9193c7f' driver = webdriver.Chrome(Driver) driver.get(url) # 显式等待最多10秒,直到目标元素可点击 wait = WebDriverWait(driver, 10) elem = wait.until(EC.element_to_be_clickable((By.XPATH, './/span[contains(text(), "Assumption")]'))) elem.click()
如果你使用的是Selenium 3及更早版本,也可以直接修改原代码的查找方法为单数形式:
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) # 替换find_elements为find_element即可 elem=driver.find_element_by_xpath('.//span[contains(text(), "Assumption")]') elem.click()
内容的提问来源于stack exchange,提问作者Aymen
相关产品推荐
相关产品推荐

