Selenium(Python)を使用してChase Webサイトにログインしようとすると、次のエラーメッセージが表示されます。
ただし、「ヒューマン」ログインの使用は問題なく機能します。 Seleniumが要素を検出すると、問題が発生するようです。
何か不足していますか?私はstackoverflowで答えを見つけようとしましたが、役に立ちませんでした。
期待される結果は、スクリプトによってプログラムでログインできるようになることです。
以下はサンプルコードです:
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()
私はあなたのコードを取り、構造を単純化し、次のように最小限のコード行でテストを実行しました:
_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ツリー を調べると、一部の_<script>
_タグがJavaScriptを参照していることがわかりますキーワード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>
_これは、WebサイトがBot Managementサービスプロバイダー (Distil Networks およびChromeDriverによるナビゲーションが検出され、その後blocked 。
記事のとおり 本当にDistil.itに何かがある... :
Distilは、サイトの動作を観察し、スクレイパーに固有のパターンを識別することにより、自動コンテンツスクレイピングボットからサイトを保護します。 Distilが1つのサイトで悪意のあるボットを特定すると、ブラックリストに登録された行動プロファイルが作成され、すべての顧客に展開されます。 Distilはボットファイアウォールのようなもので、パターンを検出して反応します。
さらに、
_
"One pattern with Selenium was automating the theft of Web content"
_、Distil CEOの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".
_
あなたはいくつかの詳細な議論を見つけることができます: