我在selenium python脚本中使用了以下代码行:
from selenium import webdriver
driver.find_element_by_xpath(u"//span[text()='" + cat2 + "']").click()
cat2是数据库列表中的变量,我得到这样的结果:
db = Database()
sql = "SELECT * FROM missing
listeproduit = db.select(sql)
for record in listeproduit:
cat2 = record[6]
问题是当变量包含这样的文本时:
cat2 = Debimetre d'air
然后脚本不起作用,因为它是非法的xpath表达式。
从我的搜索中,我明白在我的变量cat2中转义单引号是个问题
从这个答案:Escape single quote in XPath with Nokogiri?
他们建议使用concat()xpath函数,但是如何在我的情况下使用它? 谢谢你的帮助。
干杯
答案 0 :(得分:7)
在XPath 1.0中,由浏览器使用,因此由Selenium使用,没有本地方式转义字符串文字(在XPath 2.0中已经补救)。一个few workarounds are mentioned by this poster,其中包括:
concat('"', "Here's Johnny", '"', ", said Johnny.")
之类的内容,它与文字结合:"Here's Johnny", said Johnny.
。在您的情况下,这将起作用:
driver.find_element_by_xpath(u"//span[text()=\"" + cat2 + "\"]").click()
另一种方法是设置一个XPath变量来包含字符串文字的值,这有助于提高可读性。但我找不到如何使用Selenium的Web驱动程序,这通常意味着没有这样的方法。
答案 1 :(得分:0)
这是我刚刚编写的Python函数,它使用@ Abel的答案中描述的技巧转义在XPath 1.0表达式中使用的字符串:
def escape(s):
if '"' in s and "'" in s:
return 'concat(%s)' % ", '\"',".join('"%s"' % x for x in s.split('"'))
if '"' in s:
return "'%s'" % s
return '"%s"' % s