python - UnexpectedTagNameException:选择仅适用于
问题描述
解决方案
你离得够近了。但是,要识别的第一个元素find_element_by_id('did_atd_provide_pnc')
是<form>
标签,而您想要的元素是<select>
标签。
因此,元素的Select()
throws 错误为:<form>
UnexpectedTagNameException: Select only works on <select> elements, not on "<form>"
解决方案
要将<option>
文本选择为否,您需要诱导WebDriverWait并且element_to_be_clickable()
您可以使用以下基于xpath的Locator Strategies:
使用xpath和
select_by_visible_text()
:Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='did_atd_provide_pnc' and @name='did_atd_provide_pnc']")))).select_by_visible_text("No")
使用xpath
select_by_value()
:Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='did_atd_provide_pnc' and @name='did_atd_provide_pnc']")))).select_by_value("No")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些相关的详细讨论:
推荐阅读
- php - Laravel API 连接客户端数据库
- python - 行满足涉及元素匹配的 3 个条件的 Numpy 数组
- github - GitHub - 从收集我的个人资料中显示的贡献中排除某些存储库
- html - 将模板 html 文件用于其他 html 文件
- excel - excel中每个循环的问题
- java - 为什么 websocket 服务器在启动后不会保持活动状态
- r - 使用省略号 (...) 将参数传递给 furrr::future_map
- mysql - 带参数年月导出数据 Laravel + Mysql
- python - Python - 尝试在没有已知父包的情况下进行相对导入
- mysql - 如何在 mysql 5.7 中正确计算中位数