Python Selenium перебирает таблицу и щелкает соответственно каждую строку - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь перебирать таблицу и загружать xml файлов, но я загружаю только содержимое первого элемента в таблице. Как мне правильно выполнить итерацию для загрузки содержимого из каждой строки?

Где я должен включить row после for row in table:, чтобы правильно перенаправить?

from selenium import webdriver
options.add_argument("--incognito")
driver = webdriver.Chrome(options=options)

driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=30983020000190')
driver.find_element_by_css_selector(f'input[type="search"]').click()
driver.find_element_by_css_selector(f'input[type="search"]').send_keys('rendimentos')
time.sleep(1)
table = driver.find_elements_by_xpath("//table[@id='tblDocumentosEnviados']//tr")
for row in table:
try:
WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//td[text()='Rendimentos e Amortizações']/following-sibling::td[.//span[text()='Ativo']]/following-sibling::td//a[@title='Download do Documento']"))).click()
x = x + 1
print(x)
except:
print('except')

EDIT

Чтобы добиться успеха, мне нужно добавить итерацию строки в этой строке:

                try:
                    WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH,
                                                                               "//table[@id='tblDocumentosEnviados']//td[text()='Rendimentos e Amortizações']/following-sibling::td[.//span[text()='Ativo']]/following-sibling::td//a[@title='Download do Documento']"))).click()

Ответы [ 2 ]

4 голосов
/ 08 мая 2020

Вместо использования селена для загрузки файла я предпочитаю нам BeautifulSoup. Измените свою таблицу на приведенную ниже, чтобы получить html

from bs4 import BeautifulSoup
table = driver.find_elements_by_xpath("//table[@id='tblDocumentosEnviados']")

table_html = table[0].get_attribute('outerHTML')
table_html = BeautifulSoup(table_html, 'lxml')
list_url = []

for tr in table_html.find_all('tr'):
    for td in tr.find_all('td'):
        file_anchor = td.find('a', {'title': 'Download do Documento'})
        if file_anchor:
            complete_url = 'https://fnet.bmfbovespa.com.br/fnet/publico/{}'.format(file_anchor.get('href'))
            list_url.append(complete_url)

Теперь вы можете использовать request.get для загрузки файла. Надеюсь, это поможет !!!

загрузка файла - https://www.tutorialspoint.com/downloading-files-from-web-using-python

1 голос
/ 08 мая 2020

Попробуйте приведенный ниже код, он будет нацелен на следующую строку.

options.add_argument("--incognito")
driver = webdriver.Chrome(options=options)

driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=30983020000190')
driver.find_element_by_css_selector('input[type="search"]').click()
driver.find_element_by_css_selector('input[type="search"]').send_keys('rendimentos')
time.sleep(1)
table = driver.find_elements_by_xpath("//table[@id='tblDocumentosEnviados']//tr")
print(len(table))
for row in range(len(table)):
   try:
      WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//tr[" + str(row) + "]//td[text()='Rendimentos e Amortizações']/following-sibling::td[.//span[text()='Ativo']]/following-sibling::td//a[@title='Download do Documento']"))).click()
      x = row + 1
      print(x)
   except:
      print('except')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...