[英]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.