Невозможно найти элемент в Dynami c -comp - PullRequest
1 голос
/ 03 марта 2020

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

В моем случае я пытаюсь зайти на этот сайт . Все, что я хочу, это прочитать данные в таблице - это легко идентифицировать, учитывая, что это внутри div с очень конкретным идентификатором. Таблица также проста для чтения. Несмотря на это, есть тег dynamic-comp, который, кажется, является моим камнем преткновения - я могу получить доступ ко всем элементам за его пределами и ни к какому элементу внутри вообще - будь то по идентификатору, классу, имени тега и т. Д.

Как мне справиться с этим? Это какой-то особенный IFrame? Я бы попробовал подход .switchTo, но элементы dynamici c -comp не имеют идентификатора или класса, только один тег.

EDIT: я также попытался добавить wait = WebDriverWait(driver,20), на всякий случай , Не сработало Моя цель - перебирать даты, используя селектор даты, поэтому я собираюсь читать таблицу несколько раз.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Таблица, которая вам нужна, является последней внутри #oReportCell. Чтобы получить его, вы можете использовать селектор (//td[@id='oReportCell']//table)[last()] xpath или #oReportCell table css и получить последний.

Как получить таблицу с и , @ Решение для решения PedroLobito. Вы можете использовать для сбора и сохранения данных:

import requests
from bs4 import BeautifulSoup

params = (
    ('path', 'conteudo/txcred/Reports/TaxasCredito-Consolidadas-porTaxasAnuais-Historico.rdl'),
    ('parametros', ''),
    ('exibeparametros', 'true'),
)

response = requests.get('https://www.bcb.gov.br/api/relatorio/pt-br/contaspub', params=params)
page = BeautifulSoup(response.json()['conteudo'], 'lxml')
table = page.select('#oReportCell table')[-1]
for tr in table.find_all('tr'):
    row_values = [td.text.strip() for td in tr.find_all('td')]
    print(row_values)

Вывод:

['', '', '', '']
['', '', 'Taxas de juros']
['Posição', 'Instituição', '% a.m.', '% a.a.']
['1', 'SINOSSERRA S/A - SCFI', '0,47', '5,76']
['2', 'GRAZZIOTIN FINANCIADORA SA CFI', '0,81', '10,13']
['3', 'BCO CATERPILLAR S.A.', '0,91', '11,44']
['4', 'BCO DE LAGE LANDEN BRASIL S.A.', '0,91', '11,54']
['5', 'BCO VOLKSWAGEN S.A', '0,93', '11,76']
['6', 'BCO KOMATSU S.A.', '1,02', '12,92']
['7', 'BCO SANTANDER (BRASIL) S.A.', '1,13', '14,43']
['8', 'BCO VOLVO BRASIL S.A.', '1,16', '14,80']
['9', 'BCO DO ESTADO DO RS S.A.', '1,32', '17,07']
['10', 'BV FINANCEIRA S.A. CFI', '1,39', '18,05']
['11', 'FINANC ALFA S.A. CFI', '1,42', '18,43']
['12', 'AYMORÉ CFI S.A.', '1,44', '18,75']
['13', 'BCO RIBEIRAO PRETO S.A.', '1,46', '19,05']
['14', 'BCO BRADESCO S.A.', '1,47', '19,15']
['15', 'TODESCREDI S/A - CFI', '1,72', '22,75']
['16', 'CAIXA ECONOMICA FEDERAL', '2,46', '33,84']
['17', 'SIMPALA S.A. CFI', '2,50', '34,48']
['18', 'LEBES FINANCEIRA CFI SA', '3,12', '44,60']
['19', 'BCO RENDIMENTO S.A.', '3,15', '45,06']
['20', 'BECKER FINANCEIRA SA - CFI', '3,52', '51,47']
['21', 'BCO DO BRASIL S.A.', '3,61', '53,08']
['22', 'BCO CETELEM S.A.', '3,70', '54,65']
['23', 'LECCA CFI S.A.', '3,87', '57,65']
['24', 'HS FINANCEIRA', '3,98', '59,65']
['25', 'CREDIARE CFI S.A.', '4,17', '63,32']
['26', 'KREDILIG S.A. - CFI', '4,42', '68,06']
['27', 'CENTROCRED S.A. CFI', '4,60', '71,61']
['28', 'SENFF S.A. - CFI', '4,79', '75,31']
['29', 'ZEMA CFI S/A', '4,81', '75,68']
['30', 'VIA CERTA FINANCIADORA S.A. - CFI', '5,32', '86,31']
['31', 'OMNI BANCO S.A.', '5,35', '86,93']
['32', 'OMNI SA CFI', '5,42', '88,47']
['33', 'LUIZACRED S.A. SCFI', '5,55', '91,16']
['34', 'BCO HONDA S.A.', '5,67', '93,89']
['35', 'BCO LOSANGO S.A.', '5,71', '94,70']
['36', 'BANCO SEMEAR', '6,00', '101,13']
['37', 'NEGRESCO S.A. - CFI', '6,24', '106,69']
['38', 'GAZINCRED S.A. SCFI', '6,60', '115,24']
['39', 'PORTOCRED S.A. - CFI', '7,03', '125,93']
['40', 'AGORACRED S/A SCFI', '7,27', '132,10']
1 голос
/ 03 марта 2020

Чтобы найти и напечатать элементы из столбцов Posição , Instituição , % am и % aa , вам необходимо вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать одну из следующих Стратегий локатора :

  • Использование XPATH:

    driver.get('https://www.bcb.gov.br/estatisticas/reporttxjuros?path=conteudo%2Ftxcred%2FReports%2FTaxasCredito-Consolidadas-porTaxasAnuais-Historico.rdl&nome=Hist%C3%B3rico%20Posterior%20a%2001%2F01%2F2012&exibeparametros=true')
    print([my_elem.text for my_elem in WebDriverWait(driver, 60).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[text()='Instituição']//following::tr[@valign='top']//td/div")))])
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Консольный вывод:

    ['1', 'SINOSSERRA S/A - SCFI', '   0,47', '     5,76', '2', 'GRAZZIOTIN FINANCIADORA SA CFI', '   0,81', '    10,13', '3', 'BCO CATERPILLAR S.A.', '   0,91', '    11,44', '4', 'BCO DE LAGE LANDEN BRASIL S.A.', '   0,91', '    11,54', '5', 'BCO VOLKSWAGEN S.A', '   0,93', '    11,76', '6', 'BCO KOMATSU S.A.', '   1,02', '    12,92', '7', 'BCO SANTANDER (BRASIL) S.A.', '   1,13', '    14,43', '8', 'BCO VOLVO BRASIL S.A.', '   1,16', '    14,80', '9', 'BCO DO ESTADO DO RS S.A.', '   1,32', '    17,07', '10', 'BV FINANCEIRA S.A. CFI', '   1,39', '    18,05', '11', 'FINANC ALFA S.A. CFI', '   1,42', '    18,43', '12', 'AYMORÉ CFI S.A.', '   1,44', '    18,75', '13', 'BCO RIBEIRAO PRETO S.A.', '   1,46', '    19,05', '14', 'BCO BRADESCO S.A.', '   1,47', '    19,15', '15', 'TODESCREDI S/A - CFI', '   1,72', '    22,75', '16', 'CAIXA ECONOMICA FEDERAL', '   2,46', '    33,84', '17', 'SIMPALA S.A. CFI', '   2,50', '    34,48', '18', 'LEBES FINANCEIRA CFI SA', '   3,12', '    44,60', '19', 'BCO RENDIMENTO S.A.', '   3,15', '    45,06', '20', 'BECKER FINANCEIRA SA - CFI', '   3,52', '    51,47', '21', 'BCO DO BRASIL S.A.', '   3,61', '    53,08', '22', 'BCO CETELEM S.A.', '   3,70', '    54,65', '23', 'LECCA CFI S.A.', '   3,87', '    57,65', '24', 'HS FINANCEIRA', '   3,98', '    59,65', '25', 'CREDIARE CFI S.A.', '   4,17', '    63,32', '26', 'KREDILIG S.A. - CFI', '   4,42', '    68,06', '27', 'CENTROCRED S.A. CFI', '   4,60', '    71,61', '28', 'SENFF S.A. - CFI', '   4,79', '    75,31', '29', 'ZEMA CFI S/A', '   4,81', '    75,68', '30', 'VIA CERTA FINANCIADORA S.A. - CFI', '   5,32', '    86,31', '31', 'OMNI BANCO S.A.', '   5,35', '    86,93', '32', 'OMNI SA CFI', '   5,42', '    88,47', '33', 'LUIZACRED S.A. SCFI', '   5,55', '    91,16', '34', 'BCO HONDA S.A.', '   5,67', '    93,89', '35', 'BCO LOSANGO S.A.', '   5,71', '    94,70', '36', 'BANCO SEMEAR', '   6,00', '   101,13', '37', 'NEGRESCO S.A. - CFI', '   6,24', '   106,69', '38', 'GAZINCRED S.A. SCFI', '   6,60', '   115,24', '39', 'PORTOCRED S.A. - CFI', '   7,03', '   125,93', '40', 'AGORACRED S/A SCFI', '   7,27', '   132,10']
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...