selenium.common.exceptions.InvalidSelectorException:消息:通过 Selenium 在 scrollIntoView 中使用 xpath 给定的 xpath 表达式无效
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression is invalid using xpath within scrollIntoView through Selenium
我使用 Python 来 抓取 一个带有需要滚动的筛选窗格的网站。
我找到了一个有助于滚动元素列表的代码,它实际上找到了一个列表并在一个循环中移动。
recentList = driver.find_elements_by_xpath("/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li")
for list in recentList:
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})', list)
我的代码已经包含一个 for 循环,我只想添加一个需要滚动到的元素。
根据上面的逻辑我写了(简化了一个循环):
for p in range(1,15):
list = driver.find_element_by_xpath(str('/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[' + str(p) + ']'))
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})', list)
我不明白为什么它不起作用。
这是我遇到的错误:
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]" is invalid: SyntaxError: The expression is not a legal expression.
有谁知道需要修复什么?
上一个代码中的 XPath 是正确的并且已经在使用中。
我尝试用“recentList 中的列表”替换我的当前循环,但是代码在需要滚动过滤器上的页面时停止。
这个错误信息...
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]" is invalid: SyntaxError: The expression is not a legal expression.
...暗示 XPath 表达式不是 valid/legal 表达式。
如果您在错误中观察到有效的 xpath,则表达式中还有一个额外的第三个括号:
/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]
解决方案
要删除额外的第三个括号开口,您需要将 xpath 表达式 调整为:
list = driver.find_element_by_xpath(str('/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[' + str(p) + ']'))
参考资料
您可以在以下位置找到一些相关讨论:
- Message “org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the XPath expression” using sendKeys
我使用 Python 来 抓取 一个带有需要滚动的筛选窗格的网站。 我找到了一个有助于滚动元素列表的代码,它实际上找到了一个列表并在一个循环中移动。
recentList = driver.find_elements_by_xpath("/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li")
for list in recentList:
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})', list)
我的代码已经包含一个 for 循环,我只想添加一个需要滚动到的元素。 根据上面的逻辑我写了(简化了一个循环):
for p in range(1,15):
list = driver.find_element_by_xpath(str('/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[' + str(p) + ']'))
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"})', list)
我不明白为什么它不起作用。 这是我遇到的错误:
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]" is invalid: SyntaxError: The expression is not a legal expression.
有谁知道需要修复什么? 上一个代码中的 XPath 是正确的并且已经在使用中。
我尝试用“recentList 中的列表”替换我的当前循环,但是代码在需要滚动过滤器上的页面时停止。
这个错误信息...
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]" is invalid: SyntaxError: The expression is not a legal expression.
...暗示 XPath 表达式不是 valid/legal 表达式。
如果您在错误中观察到有效的 xpath,则表达式中还有一个额外的第三个括号:
/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[[1]
解决方案
要删除额外的第三个括号开口,您需要将 xpath 表达式 调整为:
list = driver.find_element_by_xpath(str('/html/body/div[3]/main/div/div/div/div[1]/div/form/div[2]/fieldset[3]/div/ul/li[' + str(p) + ']'))
参考资料
您可以在以下位置找到一些相关讨论:
- Message “org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the XPath expression” using sendKeys