python selenium google-chrome webdriver selenium-chromedriver

python - No se puede usar Selenium para automatizar el inicio de sesión en el sitio de Chase



google-chrome webdriver (1)

Cuando intento iniciar sesión en el sitio web de Chase utilizando Selenium (Python), aparece el siguiente mensaje de error:

Sin embargo, usar el inicio de sesión "humano" funciona bien. Parece que cuando Selenium encuentra un elemento desencadena el problema.

¿Me estoy perdiendo de algo? He intentado encontrar la respuesta en stackoverflow pero sin éxito.

Actualizar:

El resultado esperado es que la secuencia de comandos me permitiría iniciar sesión de manera programática.

Aquí está el ejemplo de código a continuación:

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


Tomé su código y simplifiqué la estructura y ejecuté la prueba con un mínimo de líneas de código de la siguiente manera:

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

De manera similar, según su observación, he golpeado la misma barrera con el error como:

Parece que el click() en el elemento con texto a medida que se inicia sesión . Aunque la búsqueda de nombre de usuario / contraseña se inicia pero el proceso se interrumpe. Mientras inspecciona el árbol DOM de la página web , encontrará que algunas de las etiquetas <script> refieren a JavaScripts que tienen la palabra clave dist . Como ejemplo:

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

Lo que es una clara indicación de que el sitio web está protegido por el proveedor de servicios de Bot Management Distil Networks y la navegación por ChromeDriver se detecta y bloquea posteriormente.

Destilar

Según el artículo There Really Alhing About Distil.it ... :

Distil protege los sitios contra los robots automáticos de raspado de contenido al observar el comportamiento del sitio e identificar patrones propios de los raspadores. Cuando Distil identifica un bot malicioso en un sitio, crea un perfil de comportamiento en lista negra que se implementa para todos sus clientes. Algo así como un firewall bot, Distil detecta patrones y reacciona.

Promover,

"One pattern with **Selenium** was automating the theft of Web content" , dijo el CEO de Distil, Rami Essaid, en una entrevista la semana pasada. "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".

Referencia

Puedes encontrar un par de discusiones detalladas en: