无法使用 Selenium 自动登录 Chase 站点

Posted

技术标签:

【中文标题】无法使用 Selenium 自动登录 Chase 站点【英文标题】:Unable to use Selenium to automate Chase site login 【发布时间】:2019-05-05 10:56:09 【问题描述】:

当我尝试使用 Selenium (Python) 登录 Chase 网站时,遇到以下错误消息:

但是,使用“人工”登录可以正常工作。似乎当 Selenium 找到一个元素时,它会触发问题。

我错过了什么吗?我试图在***上找到答案,但无济于事。

更新:

预期的结果是脚本将成功地允许我以编程方式登录。

下面是代码示例:

import time
import os

from selenium import webdriver

CHASE_USER_ID = os.getenv('CHASE_USER_ID', None)
CHASE_PASSWORD = os.getenv('CHASE_PASSWORD', None)

assert CHASE_USER_ID is not None, 'Chase user id not set'
assert CHASE_PASSWORD is not None, ' Chase password not set'


def main():
    chrome_options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(r'./chromedriver', chrome_options=chrome_options)

    try:
        driver.get('https://secure07c.chase.com/web/auth/#/logon/logon/chaseOnline?')

        time.sleep(2)

        user_element = driver.find_element_by_id('userId-input-field')  # Finding an element here seems to make the login process fail 
        user_element.send_keys(CHASE_USER_ID)

        password_element = driver.find_element_by_id('password-input-field')
        password_element.send_keys(CHASE_PASSWORD)

        time.sleep(2)

        password_element.submit()

        time.sleep(10)
    finally:
        driver.quit()


if __name__ == '__main__':
    main()

【问题讨论】:

你到底在哪里得到错误我的意思是在哪一行? Chase 可能只是阻止了您的 Selenium 操作。其背后的直觉是,他们正试图对抗网络黑客的威胁(暴力破解人们的账户) bot 检测很常见,而 selenium 检测起来很简单。. 不确定这里的实际问题是什么。 感谢您的回复。我的问题是是否有办法绕过他们的“硒检测”。在代码块的注释中,每当我跑过那行(可能是与硒相关的任何内容)时,Chase 都会使用上述屏幕截图阻止登录。 您找到解决方案了吗?我也有同样的问题 【参考方案1】:

我采用了您的代码并简化了结构,并以最少的代码行运行了测试,如下所示:

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


options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://secure07c.chase.com/web/auth/#/logon/logon/chaseOnline?")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.jpui.input.logon-xs-toggle.clientSideError"))).send_keys("jsmiao")
driver.find_element_by_css_selector("input.jpui.input.logon-xs-toggle#password-input-field").send_keys("hello")
driver.find_element_by_css_selector("button#signin-button>span.label").click()

同样,根据您的观察,我遇到了与以下错误相同的障碍:

似乎 Sign in 元素上的 click() 确实发生了文本。虽然 username / password 查找已启动,但该过程被中断。在检查 webpage 的 DOM Tree 时,您会发现一些 <script> 标记引用具有关键字 distjavascripts。举个例子:

<script src="https://static.chasecdn.com/web/library/blue-boot/dist/2.20.3/blue-boot/js/main-ver.js"></script> <script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="blue-vendor/main" src="https://static.chasecdn.com/web/library/blue-vendor/dist/2.11.1/blue-vendor/js/main.js"></script> <script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="blue/main" src="https://static.chasecdn.com/web/library/blue-core/dist/2.16.3/blue/js/main.js"></script> <script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="blue-app/main" src="https://static.chasecdn.com/web/library/blue-app/dist/2.15.1/blue-app/js/main.js"></script>

这清楚地表明该网站受到 Bot Management 服务提供商 Distil Networks 的保护,并且 ChromeDriver 的导航被检测到并随后被阻止强>。


蒸馏

根据文章There Really Is Something About Distil.it...:

Distil 通过观察网站行为和识别抓取工具特有的模式来保护网站免受自动内容抓取机器人的攻击。当 Distil 在一个站点上识别出恶意机器人时,它会创建一个列入黑名单的行为配置文件,并部署到其所有客户。类似于机器人防火墙的东西,Distil 检测模式并做出反应。

进一步,

"One pattern with Selenium was automating the theft of Web content",Distil 首席执行官 Rami Essaid 在上周接受采访时表示。 "Even though they can create new bots, we figured out a way to identify Selenium the a tool they're using, so we're blocking Selenium no matter how many times they iterate on that bot. We're doing that now with Python and a lot of different technologies. Once we see a pattern emerge from one type of bot, then we work to reverse engineer the technology they use and identify it as malicious".


参考

您可以在以下位置找到一些详细的讨论:

Is there a way to use Selenium WebDriver without informing the document that it is controlled by WebDriver? Selenium webdriver: Modifying navigator.webdriver flag to prevent selenium detection Akamai Bot Manager detects WebDriver driven Chrome Browsing Context Is there a version of selenium webdriver that is not detectable?

【讨论】:

谢谢!其他问题:我发现我的 Safari 浏览器阻止访问 www.whitepages.com,根据这个答案得出结论是 Distil 做的。检查,有一个页面“dstl-wp.js”,它有一些特定于 Safari 的代码。我没有刮,只是浏览。最终我发现我在美国的 Express*** 位置正在影响它,它最终转移到了不同​​的位置。 1)知道为什么它失败了,大概是基于我的IP位置;似乎是误报? 2) 还有什么有用的参考信息吗? 我遇到了这个答案并想指出dist 不是Distill 网络的指示,这些网址中dist 的实际含义是distribution在引用用于分发目的的代码的库中拥有dist 文件夹是一种常见的做法。您可以找到有关此模式的更多信息here @learning2learn 这不是位置本身,而是 Express***(和所有 ***)通过共享 IP 地址池轮换。因此,在您使用该 IP 地址之前,有人对该 IP 地址进行了“不良”行为,并且它已被标记在某个黑名单上。这真的很烦人,一直发生在我身上,即使只是我使用普通浏览器。由于机器人,即使我们只重视我们的隐私,网站也会认为 *** 用户不好。 /肥皂盒

以上是关于无法使用 Selenium 自动登录 Chase 站点的主要内容,如果未能解决你的问题,请参考以下文章

Selenium:无法在 PayPal 登录页面上找到元素

在 Visual Studio 中通过 C# (Selenium) 自动登录 Gmail

Python+Selenium自动化模拟用户登录(备注:记录一次强行卸载rpm依赖包,引发的rpmyum等命令异常,无法远程xftp工具)

5Selenium+Python自动登录163邮箱发送邮件

python+selenium自动化写登录脚本时,弹出的第三方登录页面该如何定位元素?

无法使用任何浏览器的selenium web-driver处理登录弹出窗口