Как проверить элемент таблицы и нажать на другой элемент с помощью Selenium - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь создать утилиту, которая входит на веб-сайт и загружает файл XML, содержащий баланс из фондов недвижимости.

С помощью приведенного ниже кода я ввожу веб-сайт для указания c фонд с номером документа 07000400000146 (в конце URL), отфильтруйте документы с помощью строки поиска на веб-сайте и нажмите, чтобы загрузить первый документ в таблице, используя XPath.

driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector(f'input[type="search"]').click()
driver.find_element_by_css_selector(f'input[type="search"]').send_keys('informe mensal')
time.sleep(1)
driver.find_element_by_xpath('//*[@id="tblDocumentosEnviados"]/tbody/tr[1]/td[10]/div/a[2]/i').click()

Как я могу создать логическое выражение, чтобы определить, является ли строка 03/2020 или 02/2020 или 01/2020 в столбце «Данные о ссылках», а затем загрузить все доступные файлы для каждой соответствующей даты?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вы можете попробовать список наподобие datelist=[ '03/2020','02/2020','01/2020'] this и проверить даты, доступные на веб-странице, используя параметр ниже xpath. Если дата доступна, то щелкнет и загрузит, иначе сообщит, что даты недоступны. Использовать try..except block.ignore sleep() использовать WebDriverWait ()

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

driver=webdriver.Chrome()
driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector('input[type="search"]').click()
driver.find_element_by_css_selector('input[type="search"]').send_keys('informe mensal')
datelist=[ '03/2020','02/2020','01/2020']
for dates in datelist:
    try:
       WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//td[text()='"+ dates + "']/following-sibling::td[5]//a[@title='Download do Documento']"))).click()
       print('file downloaded with dates available ' + dates)
    except:
       print("No such dates available " + dates) 

Это будет печататься на консоли следующим образом.

No such dates available 03/2020
file downloaded with dates available 02/2020
file downloaded with dates available 01/2020

Обновленный код со статусом Ativo

driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.find_element_by_css_selector('input[type="search"]').click()
driver.find_element_by_css_selector('input[type="search"]').send_keys('informe mensal')
datelist=[ '03/2020','02/2020','01/2020']
for dates in datelist:
    try:
       WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,"//table[@id='tblDocumentosEnviados']//td[text()='"+ dates +"']/following-sibling::td[.//span[text()='Ativo']]/following-sibling::td//a[@title='Download do Documento']"))).click()
       print('file downloaded with dates available ' + dates)
    except:
       print("No such dates available " + dates)
0 голосов
/ 02 апреля 2020

Пожалуйста, попробуйте ниже код, чтобы загрузить ваш PDF

driver.get('https://fnet.bmfbovespa.com.br/fnet/publico/abrirGerenciadorDocumentosCVM?cnpjFundo=07000400000146')
driver.maximize_window()
wait = WebDriverWait(driver, 20)
elemnt=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'label > input')))
elemnt.send_keys('informe mensal')

mylist=[ '03/2020','02/2020','01/2020']
for list in mylist:
button = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH,
                                                                    "//td[text()='" + list + "']//following-sibling::td//a[@title='Download do Documento']")))
driver.execute_script("arguments[0].click();", button);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...