Cómo tratar con comillas simples en xpath

Tengo una línea en la que verifico si existe un determinado elemento de texto parcial en la página.

self.b.find_element_by_xpath(".//*[contains(text(), '%s')]" % item_text) 

Por lo tanto, es posible que item_text tenga una comilla simple en la cadena. Por ejemplo, "Hanes Men's Graphic " .

Se convierte en self.b.find_element_by_xpath(".//*[contains(text(), 'Hanes Men's Graphic ')]")

En ese caso me sale el error:

 InvalidSelectorError: Unable to locate an element with the xpath expression .//*[contains(text(), 'Hanes Men's Graphic ')] because of the following error: SyntaxError: The expression is not a legal expression. 

¿Qué operación debo realizar en item_text antes de que se use en self.b.find_element_by_xpath(".//*[contains(text(), '%s')]" % item_text)

Sé que puedo usar comillas simples alrededor de la expresión y comillas dobles adentro, pero esa no es la solución que estoy buscando.

intente de la siguiente manera: –

 self.b.find_element_by_xpath(".//*[contains(text(), \"Hanes Men's Graphic\")]") 

o

 self.b.find_element_by_xpath('.//*[contains(text(), "%s")]' % item_text) 

o

 self.b.find_element_by_xpath(".//*[contains(text(), \"%s\")]" % item_text) 

Espero que funcione … 🙂

Puede ser que la implementación de xpath no permita comillas dobles para la cadena, por lo que deberá hacer algo como

 if (item_text.find("'")): item_text= item_text.replace("'", "', \"'\", '") item_text= "concat('" + item_text+ "')" else: item_text = "'" + item_text + "'" self.b.find_element_by_xpath(".//*[contains(text(), %s)]" % item_text)