Я не могу перехватить все ссылки на результаты поиска и описание, хотя я использую правильное имя класса - PullRequest
0 голосов
/ 26 марта 2011

Я хочу получить все ссылки на результаты поиска (поисковая система: http://search.yahoo.com) и сводка со страницы результатов. ClassName для ссылки равно 'yschttl spt', а className для сводки - 'abstr'

Исходный код Похоже на ссылку и резюме ниже.

Ссылка:

<a id="yui_3_3_0_1_1301085039901361" dirtyhref="http://search.yahoo.com/r/_ylt=A0oG7m9u.4xNvWYA7N5XNyoA;_ylu=X3oDMTE2ZXNhNjRzBHNlYwNzcgRwb3MDMgRjb2xvA2FjMgR2dGlkA01TWUMwMDFfMTc5/SIG=11stois8r/EXP=1301106638/**http%3a//en.wikipedia.org/wiki/Pune,_India" class="yschttl spt" href="http://search.yahoo.com/r/_ylt=A0oG7m9u.4xNvWYA7N5XNyoA;_ylu=X3oDMTE2ZXNhNjRzBHNlYwNzcgRwb3MDMgRjb2xvA2FjMgR2dGlkA01TWUMwMDFfMTc5/SIG=11stois8r/EXP=1301106638/**http%3a//en.wikipedia.org/wiki/Pune,_India" data-bns="API" data-bk="5096.1"><b>Pune</b> - Wikipedia, the free encyclopedia</a>`

Сводка Div:

<div id="yui_3_3_0_1_1301085039901338" class="abstr"><b id="yui_3_3_0_1_1301085039901337">Pune</b> is undoubtedly a great place to eat. Fergusson <b id="yui_3_3_0_1_1301085039901352">College</b> <b>Road</b> is full of budget eateries serving delicous hot food at nominal charges. For a range of multi-cuisine ...</div>

Я использую строку кода ниже для захвата обоих (ссылка и сводка).

final List<WebElement> links = driver.findElements(By.className("yschttl spt")); 
final List<WebElement> linksSummary = driver.findElements(By.className("abstr"));

Но сейчас работает вообще.

Я также пытался использовать ниже XPath для ссылки:

//a[starts-with(@id, 'yui_')]

//a[@data-bns='API']

Я не могу использовать идентификатор целиком, поскольку этот номер идентификатора не одинаков для всех ссылок на результаты поиска.

Ничего не работает. Пожалуйста, помогите.

заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

Основная проблема в том, что вы не правильно запрашиваете имя класса.Экземпляр class="yschttl spt" говорит, что элемент может быть идентифицирован с помощью двух имен классов, yschttl или spt. не говорит, что имя класса yschttl spt, поэтому запрос By.className("yschttl spt") всегда будет неудачным.

Обратите внимание, что причина, по которой XPath предлагает @Tarun, заключается в том, что XPath имеет Нет Понятие о том, что такое имя класса HTML или должно быть.В XPath @class просто указывает имя атрибута - с нет базовой семантикой.

Кроме того, обратите внимание, что имя класса может не содержать пробелов.Подробнее об указании имен классов см. В спецификации атрибута HTML class .

0 голосов
/ 26 марта 2011

Я не использую селен 2.0, но когда я попробовал //a[@class='yschttl spt'] в Firefox XPath Checker, я увидел все 10 результатов на странице.Я скоро начну с Selenium 2.0, может быть, я тогда смогу попробовать ...

...