selenium.common.exceptions.InvalidSelectorException: Сообщение: данное выражение xpath недействительно при использовании xpath в scrollIntoView через 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 в последнем коде правильный и уже использовался.
Я попытался заменить текущий цикл "списком в недавнем списке", но затем код останавливается, когда ему нужно прокрутить страницы с помощью фильтра.
1 ответ
Это сообщение об ошибке...
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) + ']'))
Ссылки
Вы можете найти пару соответствующих обсуждений в:
- InvalidSelectorError: недопустимый селектор: невозможно найти элемент с выражением xpath
- Сообщение "org.openqa.selenium.InvalidSelectorException: недопустимый селектор: невозможно найти элемент с выражением XPath" с помощью sendKeys
- Отправить сообщение WhatsApp контактам, использующим Python, но получаю сообщение об ошибке: InvalidSelectorException: сообщение: недопустимый селектор: невозможно найти элемент