#python #selenium #selenium-webdriver
#python #selenium #selenium-webdriver
Вопрос:
Я пытаюсь сделать webdriver / browser способным обрабатывать XPATH версии 2.0.
Использование старой версии XPATH — это нормально, но в определенном конкретном случае мне также нужно будет обработать XPATH версии 2.0.
Я попробовал провести некоторые исследования по этому поводу, но до сих пор не имею понятия.
Допустим, я хочу получить все <a>
элементы, которые содержат атрибут title
or href
:
# find elements by xpath in older version
driver.find_elements_by_xpath("//a[@title or @href]")
# I want the code to be able to process XPATH version 2.0
driver.find_elements_by_xpath("//a/(@title|@href)")
Я ожидаю, что смогу найти некоторую конфигурацию (или какой браузер мне следует использовать) для обеспечения доступности обработки XPATH версии 2.0.
Комментарии:
1. При этом будут выбраны атрибуты, а не элементы. Это то, что вы имели в виду?
2. @pguardiario Я имею в виду выбрать элементы, содержащие эти атрибуты. таким образом, он не будет извлекать
<a>
то, чего не былоhref
илиtitle
3. Зачем прилагать все усилия, чтобы найти способ выполнить локаторы 2.0, когда вы можете преобразовать их в локаторы, совместимые с 1.0? Ваш первый локатор будет делать то, что вы хотите. Можете ли вы предоставить локатор 2.0, который вы хотите использовать, который нельзя преобразовать в эквивалентный 1.0?
4. Текущая версия Chrome сообщает, что ваш второй XPath недействителен.
5. @JeffC это то, что я хочу исправить. Второй XPath является допустимой XPath версии 2.0, но Chrome ее не поддерживает. Существует случай, когда указанный XPath всегда будет из XPath версии 2.0.
Ответ №1:
Вот плагин jquery для xpath 2.0
после внедрения этого вместе с jquery:
for script in ['jquery.js', 'jquery.xpath.js']:
with open(script, errors='ignore') as f:
driver.execute_script(f.read())
вы должны уметь выполнять выражения xpath 2.0:
driver.execute_script('return $(document).xpath("count(//a)")')