簡體   English   中英

XPath 在 Chrome 中有效,但在 Selenium 中無效

[英]XPath is valid in Chrome but not in Selenium

我的挑戰是通過包含單引號的內容來定位元素。 我在這里用香草 JS 成功地做到了這一點:

 singleQuotes = document.evaluate("//div[contains(text(), \"'quotes'\")]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); singleQuotes = singleQuotes.snapshotItem(0); console.log(singleQuotes)
 <div>'quotes'</div>

但是,當我使用 Python & Selenium 來實現相同的香草 JS 時,Xpath 無效:


from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

window = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
window.get("www.someurl.com")
window.execute_script(f'''xpath = document.evaluate("//div[contains(text(), \\"'quotes'\\")]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);''')

我收到 SyntaxError: Failed to execute 'evaluate' on 'Document': The string... is not a valid XPath 表達式。

(我會嘗試在沙盒中展示它,但我不知道如何)。

我相信這只是“被 python 吃掉。使用雙 \\.

忘記 selenium 並比較:

print(f'''xpath = document.evaluate("//div[contains(text(), \"'quotes'\")]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);''')

print(f'''xpath = document.evaluate("//div[contains(text(), \\"'quotes'\\")]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);''')

此錯誤消息...

SyntaxError: Failed to execute 'evaluate' on 'Document': The string...is not a valid XPath expression

...意味着您構建的基於 xpath 的定位器策略不是有效的定位器。


解決方案

您可以使用任一定位器策略

  • 使用完整的文本'quotes'

     singleQuotes = document.evaluate("//div[text()=\"'quotes'\"]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  • 使用部分文本quotes

     singleQuotes = document.evaluate("//div[contains(., 'quotes')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

嘗試反引號:

document.evaluate(`//div[contains(text(), "'quotes'")]`, ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM