Selenium点击类名可变且文本含撇号元素的问题排查
解决XPATH定位含撇号文本元素的问题
首先你代码里有个明显的小错误:HTML里的文本是Stop Leo's job(末尾是小写的job),但你XPATH里写的是Stop Leo\'s Job(末尾是大写的Job),大小写不匹配肯定找不到元素,先把这个改过来。
接下来处理撇号的问题,Python的转义符\在XPATH里可能不生效,因为XPATH本身的字符串规则和Python有冲突,给你几个可行的方案:
方案1:用双引号包裹XPATH文本字符串
Python字符串用单引号时,内部可以直接用双引号,这样XPATH里的单引号不需要转义:
button = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[text()="Stop Leo\'s job"]'))) button.click()
或者反过来,Python用双引号,XPATH用单引号:
button = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[text()='Stop Leo's job']"))) button.click()
方案2:用XPATH的concat函数拼接字符串
把带撇号的部分拆成多个字符串,用concat拼接,彻底避免转义冲突:
button = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[text()=concat('Stop Leo', \"'\", 's job')]"))) button.click()
方案3:用contains函数(确保文本唯一时可用)
如果页面里没有其他包含Stop Leo's job的元素,可以用contains模糊匹配,写法更简洁:
button = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(text(), 'Stop Leo\'s job')]"))) button.click()
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

