Почему я получаю только первый элемент? - PullRequest
2 голосов
/ 14 октября 2019

Я анализирую эту страницу

Я вытаскиваю ссылки из number2 classes. Далее в цикле я прохожу каждый элемент number2 и пытаюсь получить результаты из класса 'center bold table-odds'. Для этого я пытаюсь найти parents каждой ссылки, но проблема в том, что каждый раз, когда я получаю результат из first element (в данном примере это 31: 25 )

<table class="table-main odds prediction-table" id="prediction-table-1">
    <tbody>

        <tr class="odd">
            <td rowspan="3" class="center status-text-won">W</td>
            <td rowspan="3" id="status-IwnElQet" class="table-time center datet t1570978800-6-1-0-0 ">Today<br>15:00</td>
            <td rowspan="3" colspan="1" class="table-participant">
                <a class="number2" href="/handball/europe/challenge-cup/vogosca-sviesa-IwnElQet/#1X2;2">1X2</a>
            </td>
            <td rowspan="3" class="center bold table-odds">31:25</td>
            <td class="center table-odds result-ok"><a href="">1.50</a></td>
        </tr>

        <tr class="even">
            <td rowspan="3" class="center status-text-lost">L</td>
            <td rowspan="3" id="status-0IZCD4u8" class="table-time center datet t1570978800-6-1-0-0 ">Today<br>15:00</td>
            <td rowspan="3" colspan="2" class="table-participant">
                <a class="number2" href="/volleyball/italy/serie-a2-women/marignano-talmassons-0IZCD4u8/#ah;2;-14.50;3">AH -14.5 Points</a>
            </td>
            <td rowspan="3" class="center bold table-odds">3:1</td>
            <td class="center table-odds result-ok"><a href="">2.01</a></td>
        </tr>

    </tbody>
</table>
odds = driver.find_elements_by_class_name('number2')

for odd in odds:   
     print(odd.get_attribute('href')) 
     print(odd.find_element_by_xpath('../..').find_element_by_class_name('center bold table-odds').text)

Ответы [ 3 ]

1 голос
/ 14 октября 2019

Ваш способ сделать это:

odds = driver.find_elements_by_class_name('number2')

for odd in odds:   
    print(odd.get_attribute('href')) 
    print(odd.find_element_by_xpath('./ancestor::tr[1]').find_element_by_css_selector('.center.bold.table-odds').text)
    # or 
    # print(odd.find_element_by_xpath('./ancestor::tr[1]//td[4]')
    # or 
    # print(odd.find_element_by_xpath('./ancestor::tr[1]//td[contains(@class,'bold')]')

Второй способ:

rows = driver.find_element_by_css_selector('#prediction-table-1 > tbody > tr')
for row in rows:   
    print(row.find_element_by_css_selector('.number2').get_attribute('href')) 
    print(row.find_element_by_css_selector('.center.bold.table-odds').text)
0 голосов
/ 14 октября 2019

Поскольку существует только один класс с именем "number2", вы получаете только элемент, а ваш повторяется только один раз. odds = driver.find_elements_by_class_name ('number2')

0 голосов
/ 14 октября 2019

У вас есть опечатка

find_element_by_class_name

должно быть

find_elements_by_class_name

Сделайте это во множественном числе, чтобы получить их все. Подробнее здесь

...