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) + ']'))

Ссылки

Вы можете найти пару соответствующих обсуждений в:

Другие вопросы по тегам