Получение элементов с неправильным классом, используя bs4 и selenium - PullRequest
0 голосов
/ 16 января 2020

Я хочу извлечь все tr элементы с помощью class="odd". Но когда я использую команду find_all, чтобы найти элементы tr с class = odd, она получает все элементы tr.

В моем коде вы можете видеть, что я использовал команду find_all для поиска tr с class = odd, на втором снимке экрана показан исходный код из Oddsportal, где есть оба tr элементы с классом class "odd" и "odd deactive". На третьем рисунке мой вывод из моего кода, где вы можете увидеть первый тег - тег tr с классом "odd deactivate". picture 1 picture 2 picture 3

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Если у вас установлена ​​версия bs4 4.7.1 или выше, вы можете использовать css селектор select() вместо find_all().

Чтобы получить только odd значение класса вам нужно исключить класс deactivate

Попробуйте код ниже, который исключает класс deactivate и сохраняет только odd класс

listelement=sovs.select('tr.odd:not(.deactivate)')
0 голосов
/ 16 января 2020

Вы можете использовать запрос XPath contains, чтобы получить tr элементы с классом «нечетный», даже если они имеют «нечетное отключение» вместо просто нечетное. Запрос BS4 не работает, потому что имя класса должно соответствовать вашему запросу. Вот как вы можете обойти это:

tr_elements = driver.find_elements_by_xpath("//tr[contains(@class, 'odd')]")

Это получит ваши tr элементы с классом odd и odd deactivate.

Вы также можете использовать запрос *= в CSS селекторе для BS4 для выполнения sh того же самого, подробно описано в их документации на CSS селекторах:

tr_elements = sovs.select('tr[class*="odd"]')

Надеюсь, это вам немного поможет.

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