我使用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 是正确的,并且已在使用中。
我试图用"最近列表中的列表"替换我当前的循环,但是当代码需要滚动浏览过滤器上的页面时,代码就会停止。
此错误消息...
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表达式不是有效/合法的表达式。
如果在错误中观察到有效的 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) + ']'))
<小时 />参考资料
您可以在以下位置找到一些相关的讨论:
- 无效选择器错误: 无效选择器: 无法找到具有 xpath 表达式的元素
- 消息"org.openqa.selenium.InvalidSelectorException: 无效选择器: 无法使用 sendKeys 找到具有 XPath 表达式的元素">
- 使用 Python 向联系人发送 whatsapp 消息,但收到错误:无效选择器异常:消息:无效选择器:无法找到元素