Как нажать на кнопку с текстом «Экспорт» по URL через Selenium и Python? - PullRequest
0 голосов
/ 04 сентября 2018

Я застрял, и я хотел бы вашей помощи. Я не гений Python, поэтому извиняюсь за язык. Мне нужно нажать кнопку (Экспорт) на этом веб-сайте https://www.fec.gov/data/filings/?data_type=processed&committee_id=C00097485. Кнопка должна перейти в конец страницы, где появляется ссылка на файл Excel. Теперь я использовал этот код:

text="//button[@type='button' and contains(.,'Export')]"
driver = webdriver.Firefox()
driver.get("https://www.fec.gov/data/filings/data_type=processed&committee_id=C00142711")
time.sleep(5)
button=driver.find_element_by_xpath(text)
button.click

Скрипт работает нормально, сообщений об ошибках нет. Сайт появляется, но «клик» не происходит. Я также попытался: 1) «подождать, пока элемент не станет кликабельным», 2) ActionChain для перемещения курсора, 3) заменить щелчок на sendKeys. Там нет Ифраме. Я пробовал также на Chrome. Я использую компьютер с Windows 10.

Что я делаю не так ??? Учитывая, что с другими сайтами, функция клика отлично работает!

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

В соответствии с url кнопка с текстом Export является элементом JavaScript , поэтому вам нужно заставить _WebDriverWait_ для элемента быть кликабельно , и вы можете использовать следующее решение:

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox()
    driver.get("https://www.fec.gov/data/filings/?data_type=processed&committee_id=C00097485")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.js-export.button.button--cta.button--export"))).click()
    
  • Снимок браузера:

fec_gov

0 голосов
/ 05 сентября 2018

Click - метод, поэтому он должен быть button.click(). Вам не хватает паренов.

Кроме того, было бы лучше, если бы вы использовали WebDriverWait вместо .sleep(), например. button = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, text)));

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