Невозможно использовать Selenium для автоматизации входа на сайт Chase

Когда я пытаюсь зайти на сайт Chase с помощью Selenium (Python), у меня появляется следующее сообщение об ошибке:

Тем не менее, используя "человеческий" логин работает нормально. Кажется, что, когда Selenium находит элемент, это вызывает проблему.

Я что-то пропустил? Я пытался найти ответ на stackru, но безрезультатно.

Обновить:

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

Вот пример кода ниже:

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()

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()

Аналогично, согласно вашему наблюдению, я столкнулся с тем же препятствием с ошибкой:

Chase Login Failure Image

Кажется click() на элементе с текстом, как происходит вход в систему. Хотя поиск имени пользователя / пароля инициирован, но процесс прерывается. Осматривая DOM-дерево веб-страницы, вы обнаружите, что некоторые из <script> тег относится к JavaScripts, имеющим ключевое слово dist. В качестве примера:

  • <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>

Что является четким свидетельством того, что веб-сайт защищен поставщиком услуг управления ботами Distil Networks, и навигация ChromeDriver обнаруживается и впоследствии блокируется.


Distil

В соответствии со статьей Distil.it...

Distil защищает сайты от автоматических ботов, которые следят за поведением сайтов и выявляют закономерности, свойственные скребкам. Когда Distil идентифицирует вредоносного бота на одном сайте, он создает черный профиль поведения, который развертывается для всех его клиентов. Что-то вроде брандмауэра бота, Distil обнаруживает шаблоны и реагирует.

В дальнейшем,

"One pattern with **Selenium** was automating the theft of Web content" Об этом заявил генеральный директор Distil Рами Эссаид в интервью на прошлой неделе. "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".


Ссылка

Вы можете найти пару подробных обсуждений в:

Другие вопросы по тегам