当我尝试使用 Selenium 自动化登录过程时,网站显示我的浏览器已过时

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

这是我的第一篇 stackoverflow 帖子,所以请原谅我可能无法观察到的任何帖子细微差别。我遇到的问题是使用 Selenium 和 Python(v 3.11)自动登录我的信用卡网站。我的总体目标是简单地登录我的信用卡网站(Discover CC 网站),导航到“报表”页面,将我当前的报表下载为 CSV 文件,并使用其他 Python 代码进一步操作它,并按计划运行它基础(每周思考一次)。但是我被困在自动登录过程中。发现网站告诉我,我的浏览器已过期,这可能会导致安全风险,并且我的帐户暂时不可用。这就是我目前陷入困境的地方。

到目前为止我所尝试的内容显示在下面所附的代码中。当然,出于安全原因,第 18 行和第 20 行被删除,但其中包含我正确的网站用户名和密码。

#import stuff
import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
s = Service('C:\Program Files (x86)\chromedriver_win32\chromedriver.exe')
opts = Options()
opts.accept_insecure_certs = True
# opts.add_argument("--headless")
# assert opts.headless  # Operating in headless mode
browser = Chrome(service=s, options=opts)
browser.get('https://portal.discover.com/customersvcs/universalLogin/ac_main')
browser.implicitly_wait(10)
time.sleep(3)
userID = browser.find_element(By.ID, 'userid-content')
userID.send_keys('myUserName')
password = browser.find_element(By.ID, 'password-content')
password.send_keys('myPassword')
browser.implicitly_wait(10)
time.sleep(3)
# userID.submit()
clickSubmit = browser.find_element(By.ID, 'log-in-button')
browser.implicitly_wait(10)
clickSubmit.submit()

当我运行此程序时,它会将我带到预期浏览器(Chrome)中的正确网站,我已经下载了我认为正确的 chromedriver(Chrome 版本是 109.0.5414.120,chromedriver 是 109.x.120)。 xxxx.xxx 版本号也是如此,但与 Chrome 的版本不完全匹配),它正确输入了我的用户名和密码,但给了我一个“需要更新浏览器”式的错误。

我要熨烫的是:

  • 我正在使用的代码/我访问该网站的方式是否存在问题?
  • 这是一个cookie/SSL证书问题吗?我只需要让我的浏览器“认为”我是一个真正的用户,而不是一些自动化测试软件,就像它在使用此代码启动时在横幅中控制chrome一样?
  • 这段代码是否按预期执行,这只是该网站的反机器人安全性,考虑到它是一个 CC/金融网站,这只是真的擅长检测机器人并阻止他们登录到他们的网站,即使在展示时第一次尝试时的用户名/密码正确。

我尝试了与上面相同的方法,但使用其他库(例如 unDetected_chromedriver、selenium-stealth)并具有相同的结果/问题,并具有确切的错误消息:

“当前无法访问您的帐户。 过时的浏览器可能会使您的计算机面临安全风险。为了在 Discover.com 上获得最佳体验,您可能需要将浏览器更新到最新版本,然后重试。

如有疑问,请致电 1-800-347-7769 联系我们。我们每周 7 天、每天 24 小时随时为您服务。”

感谢大家提供的任何/所有帮助和意见,我也是 Python/HTML 方面的新手,所以如果这是一个明显的问题/答案,我深表歉意,我只是将这个想法用作学习机会.

谢谢!

python html selenium botdetect
2个回答
0
投票

如果没有正确的错误堆栈跟踪和/或访问相关 HTML,就很难对错误进行评论:

Your account cannot currently be accessed. Outdated browsers can expose your computer to security risks. To get the best experience on Discover.com, you may need to update your browser to the latest version and try again.

但是,根据 support.mozilla.orgreddit,它显示为 discover.com 网站问题。


改进

话虽如此,您可以将以下几项改进纳入其中:

  • browser.implicitly_wait(x)
    time.sleep(y)
    的实例替换为 WebDriverWait

  • 找到可点击元素,为 element_to_be_clickable() 引入 WebDriverWait,如下所示:

    driver.get('https://portal.discover.com/customersvcs/universalLogin/ac_main')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#userid-content"))).send_keys("[email protected]")
    driver.find_element(By.CSS_SELECTOR, "input#password-content").send_keys("SageHerrin")
    driver.save_screenshot("login.png")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

login.png


0
投票

使用驱动程序 v122(当前稳定)也有同样的问题。安装并使用了

undetected_chromedriver
,现在可以使用了。因此,Discover 似乎确实在尝试检测并阻止机器人登录。

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


driver = uc.Chrome(headless=False, use_subprocess=False)
driver.get('https://portal.discover.com/customersvcs/universalLogin/ac_main')
WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "input#userid-content"))
).send_keys("username")
driver.find_element(
    By.CSS_SELECTOR, "input#password-content").send_keys("password")
© www.soinside.com 2019 - 2024. All rights reserved.