2016-07-12 9 views
0

Ich habe eine Zeile, wo ich überprüfe, ob ein bestimmtes Element durch partiellen Text auf der Seite existiert.So behandeln Sie ein einzelnes Zitat in XPath

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

So ist es möglich, dass item_text einen Apostroph in der Zeichenfolge hat. Zum Beispiel "Hanes Men's Graphic ".

Es ist das wird self.b.find_element_by_xpath(".//*[contains(text(), 'Hanes Men's Graphic ')]")

In diesem Fall bekomme ich den Fehler:

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. 

Was Operation sollte ich auf item_text zuführen, bevor es in self.b.find_element_by_xpath(".//*[contains(text(), '%s')]" % item_text)

verwendet wird, ich weiß, dass ich benutzen kann, einfache Anführungszeichen um den Ausdruck und verwenden doppelte Anführungszeichen im Inneren, aber das ist nicht die Lösung, nach der ich suche.

+0

tun müssen [Sie können überprüfen, wie zitiert in Python zu entkommen] (http://stackoverflow.com/a/3708167/3122133) – Madhan

+1

Mögliche Duplikat [How to Escape Einzelne Anführungszeichen in Python auf dem Server, die in Javascript auf dem Klienten benutzt werden] (http://stackoverflow.com/questions/3708152/how-to-escape-single-quotes-in-python-ons-server-to-be-used -in-javascript-on-clie) – Madhan

Antwort

4

versuchen wie folgt: -

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

oder

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

oder

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

Hoffe, dass es funktionieren wird .. :)

+0

Funktioniert gut, danke. Werde auf weitere Antworten warten und wenn nichts Besseres reinkommt, werde ich das genehmigen :) – raitisd

0

es, dass die XPath sein könnte Die Implementierung wird keine doppelten Anführungszeichen für die Zeichenfolge zulassen so dass Sie so etwas wie

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) 
Verwandte Themen