Selenium XPath定位报SyntaxError语法错误的写法问题排查
报错原因
触发SyntaxError: Failed to execute 'evaluate' on 'Document'的直接原因是XPath表达式语法非法,浏览器的XPath解析器无法识别表达式内容。
你写的XPath存在明确语法错误:表达式片段//*input不符合XPath语法规则——*在XPath中是通配符,代表匹配任意名称的标签,后面直接拼接标签名input属于语法冲突,相当于同时声明“匹配任意标签”和“匹配input标签”两个矛盾的规则,解析器无法执行。
正确写法参考
你可以根据需求选择以下任意一种合法写法:
- 指定匹配input标签、同时校验id和完整class属性:
account = driver.find_element(By.XPATH,"//input[@id='autocomplete_code' and @class = 'account_code_ac inputSearch ui-autocomplete-input']")
- 通配匹配任意标签、仅通过id属性定位(即你提到的参考XPath,该写法本身语法完全合法,之前测试未生效大概率是测试时仍保留了错误的
*input片段):
account = driver.find_element(By.XPATH,"//*[@id='autocomplete_code']")
注意:元素的class属性是多个类名拼接的字符串,页面渲染过程中很可能动态新增、删除类名,直接写全值匹配稳定性较差,更推荐用
contains方法匹配核心类名,示例:account = driver.find_element(By.XPATH,"//input[@id='autocomplete_code' and contains(@class, 'account_code_ac')]")
目标元素参考截图

内容的提问来源于stack exchange,提问作者R Reddy
相关产品推荐
相关产品推荐

