2016-08-27 2 views
0

Я выбираю все <a> элементов внутри всех элементов <td>Селена: выберите первый внутренний элемент

<td class="thread"> 
    <i class="ter green"></i> 
    <a href="/forum/threads/12/">Something about...</a> 
    <p class="info">Author</p> 
</td> 

я использую следующее:

driver.findElements(By.cssSelector("td.thread a")); 

Однако я получаю гораздо больше элементов, чем должно быть , Я предполагаю, что я должен выбрать только первый a внутри td class="thread". Как я могу это сделать?

+0

Если вы хотите, чтобы найти только один элемент, поэтому используют 'findElements' вместо' findElement' ?? Что вы хотите на самом деле? Вы хотите, чтобы один 'a', который вы предоставили в HTML ??? –

ответ

0
thread = driver.find_element_by_class_name('thread') 
correct_link = thread.find_element_by_tag_name('a').get_attribute('href') 
print(correct_link) 
>>> "/forum/threads/12/" 
+2

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

2

При использовании CSS Selector td.thread a, который читает любой потомок a под td.thread. Что вы, скорее всего, захотите, это td.thread > a, который читает ребенка a из td.thread. По-прежнему возможно, что существует более одного a, но вы, вероятно, получите намного меньше, в зависимости от общего HTML.

CSS Selector reference

Смежные вопросы