如何使用Selenium和Python单击“继续”按钮

问题描述 投票:0回答:1

我正在尝试通过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()

发送键完美无缺。我可能实际上有错误的元素ID(当我意识到我无法手动点击链接时,我试图在Chrome中测试) - 但我认为更大的问题是我无法手动点击浏览器中的链接启动由Selenium提供。谢谢你的任何想法。

编辑

这是我在尝试单击“继续”按钮时获得的截图。

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)
python-3.x selenium-webdriver css-selectors webdriver webdriverwait
1个回答
0
投票

要单击带有文本的按钮作为继续,您可以填写卡号和密码字段,为element_to_be_clickable()引入WebDriverWait,您可以使用以下解决方案:

  • 代码块: 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

© www.soinside.com 2019 - 2024. All rights reserved.