Как нажать кнопку «Продолжить» с помощью Selenium и Python - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь автоматизировать некоторые утомительные операции копирования / вставки, которые я делаю ежемесячно из онлайн-службы моего банка через Selenium и Python 3. К сожалению, я не могу заставить Selenium щелкнуть ссылку для входа в систему.

Это синяя кнопка продолжения в https://www1.bmo.com/onlinebanking/cgi-bin/netbnx/NBmain?product=5.

Странно, когда я пытаюсь вручную щелкнуть эту ссылку в браузере, запущенном Selenium, он тоже не работает - тогда как он работает вбраузер я запускаю вручную.

Я подозреваю, что проблема в том, что веб-сайт банка достаточно умен, чтобы обнаружить, что я автоматизирую работу браузера.Есть ли способ обойти это?

Если нет, может ли это быть чем-то другим?

Я пробовал использовать Chrome и Firefox - безрезультатно.Я использую 64-битную машину Windows 10 с Chrome 73.0.3683.103 и Firefox 66.0.

Соответствующий код приведен ниже.

#websites and log in information
bmo_login_path = 'https://www1.bmo.com/onlinebanking/cgi-bin/netbnx/NBmain?product=5'
bmo_un = 'fake_user_name'
bmo_pw = 'fake_password'

#Selenium setup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
chrome_driver_path = 'C:\\Path\\To\\Driver\\chromedriver.exe'
gecko_driver_path = 'C:\\Path\\To\\Driver\\geckodriver.exe'
browswer_bmo = webdriver.Firefox(executable_path = gecko_driver_path)
#browswer_bmo = webdriver.Chrome(executable_path = chrome_driver_path)

#log into BMO
browswer_bmo.get(bmo_login_path)
time.sleep(5)
browswer_bmo.find_element_by_id('siBankCard').send_keys(bmo_un)
browswer_bmo.find_element_by_id('regSignInPassword').send_keys(bmo_pw)
browswer_bmo.find_element_by_id('btnBankCardContinueNoCache1').click()

Отправка ключей работает отлично.Возможно, у меня неправильный идентификатор элемента (я пытался проверить это в Chrome, когда понял, что не могу щелкнуть ссылку вручную), но я думаю, что большая проблема заключается в том, что я не могу вручную щелкнуть ссылку в запущенном браузереСелен.Спасибо за любые идеи.

РЕДАКТИРОВАТЬ

Это скриншот, который я получаю из всего, что получаю, когда пытаюсь нажать кнопку продолжения.

Continue button not loading.

В конечном счете, сообщение об ошибке, которое я получаю в своей IDE (Jupyter Notebook), выглядит так:

TimeoutException: Message: timeout
  (Session info: chrome=74.0.3729.108)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17134 x86_64)

1 Ответ

0 голосов
/ 28 апреля 2019

Чтобы нажать на кнопку с текстом Продолжить , вы можете заполнить поля Номер карты и Пароль , вызывая WebDriverWait дляelement_to_be_clickable(), и вы можете использовать следующее решение:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions()
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument('--disable-extensions')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://www1.bmo.com/onlinebanking/cgi-bin/netbnx/NBmain?product=5')
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.dijitReset.dijitInputInner#siBankCard[name='FBC_Number']"))).send_keys("1234567890112233")
    driver.find_element_by_css_selector("input.dijitReset.dijitInputInner#regSignInPassword[name='FBC_Password']").send_keys("fake_password")
    driver.find_element_by_css_selector("span.dijitReset.dijitInline.dijitIcon.dijitNoIcon").click()
    # driver.quit()
    
  • Снимок браузера:

Continue

...