Индексирование результатов, возвращаемых селеном - PullRequest
3 голосов
/ 17 декабря 2009

Я пытаюсь проиндексировать результаты, возвращаемые xpath. Например:

xpath = '//a[@id="someID"]'

может вернуть несколько результатов. Я хочу получить их список. Я думал, что делает:

numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
   l.append(sel.get_text('(%s)[%d]'%(xpath, i)))

будет работать, потому что работает нечто похожее с Xpath-проверкой firefox:

(//a[@id='someID'])[2]

возвращает второй результат.

Идеи, почему поведение будет другим и как это сделать с селеном Спасибо

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009

Можете ли вы попробовать xpath /html/descendant::a[@id="someID"] Вы можете заменить /html на что-то еще, что является предком ваших ссылок, например id('content'). После этого вы сможете найти отдельные ссылки, используя [1], [2] и т. Д.

Из XPath TR на http://www.w3.org/TR/xpath#path-abbrev:

ПРИМЕЧАНИЕ : путь местоположения //para[1] не означает то же самое, что путь местоположения /descendant::para[1]. Последний выбирает первый дочерний элемент para; первый выбирает все элементы-потомки, являющиеся первыми детьми-потомками своих родителей.

1 голос
/ 18 апреля 2010

Ответ заключается в том, что вам нужно указать селену, что вы используете xpath:

numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
   l.append(sel.get_text(xpath='(%s)[%d]'%(xpath, i)))
0 голосов
/ 17 декабря 2009

В Selenium вы обычно делаете это без дополнительных скобок, чтобы ваша петля выглядела следующим образом

numOfResults = sel.get_xpath_count(xpath)
l = []
for i in range(1,numOfResults+1):
   l.append(sel.get_text('%s[%d]'%(xpath, i)))

И это даст действительный XPath в Selenium, такой как //a[@id='someID'][2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...