能否通过一次传入多个元素名称,使用find_element_by_name定位正确元素?
能否一次调用多个元素名称定位元素?
不行,你写的最后一行代码elem = driver.find_element_by_name(("contact[Name]")("contact[name]"))本身语法就错了——find_element_by_name只能接受单个字符串参数,没法直接传多个元素名称来匹配。
几种可行的实现方法
1. 用CSS选择器同时匹配多个name属性
CSS选择器支持用逗号分隔多个条件,能匹配任意符合其中一个条件的元素,找到第一个匹配的元素就会返回:
elem = driver.find_element_by_css_selector('[name="contact[Name]"], [name="contact[name]"]') elem.send_keys("name")
2. 遍历名称列表逐个尝试
把可能的元素名称放进列表,循环逐个查找,找到可用元素就停止,逻辑和你最初的try-except写法一致,但更简洁:
possible_names = ["contact[Name]", "contact[name]"] for name in possible_names: try: elem = driver.find_element_by_name(name) elem.send_keys("name") break except: continue
3. 用XPATH实现多条件匹配
XPATH的or语法可以同时匹配多个name属性:
elem = driver.find_element_by_xpath('//*[@name="contact[Name]" or @name="contact[name]"]') elem.send_keys("name")
额外提醒
尽量别用空的except块,最好捕获具体的异常类型(比如NoSuchElementException),避免把其他无关错误也掩盖过去:
from selenium.common.exceptions import NoSuchElementException possible_names = ["contact[Name]", "contact[name]"] for name in possible_names: try: elem = driver.find_element_by_name(name) elem.send_keys("name") break except NoSuchElementException: continue
内容的提问来源于stack exchange,提问作者M A Nezam Sagor
相关产品推荐
相关产品推荐

