質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1660閲覧

pythonでのログイン自動化でログインボタンを押した後にエラーが出てしまいます。

hiro111

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2022/07/28 13:18

前提

下記のコードはココナラサービスを通じて書いてもらったものになります。
エラー原因が私はもちろんのこと、コード作成者もわからず困っております。

pythonを使ってFX証券会社の「XM」サイトに自動でログインできずに困っております。IDとパスワードの自動入力まではうまくいくのですが、ログインボタンを押すとエラー画面がでてしまいます。

実現したいこと

XMサイトのマイページに自動ログインしたいです。

発生している問題・エラーメッセージ

Access Denied というメッセージが出てしまいます

該当のソースコード

from selenium import webdriver #使うツールのインポート
import chromedriver_binary
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
import schedule

options = Options()
options.add_argument('--headless')

driver = webdriver.Chrome()

driver = webdriver.Chrome(options=oとバックグラウンドptions)

url = 'https://my.xmtrading.com/jp/member/login'
driver.get(url) #上の行で指定したurlを開きます
time.sleep(5) #5秒休みます
elem_btn = driver.find_element(by=By.CSS_SELECTOR, value='.cookie-modal__defaultBlock .btn') #ここから下7行は自動化で使わないことが多いので一旦飛ばしてください
loc = elem_btn.location
x, y = loc['x'], loc['y']
actions = ActionChains(driver)
actions.move_by_offset(x, y)
actions.click()
actions.perform()

time.sleep(5)
elem_id = driver.find_element(by=By.ID, value='login_user') #webページのソースコードのIDがlogin_userとなっているものを抜き出します。
elem_id.send_keys('test') #testという文字を打ち込みます
elem_pass = driver.find_element(by=By.ID, value='login_pass')
elem_pass.send_keys('test')
time.sleep(1)
elem_login = driver.find_elements(by=By.CSS_SELECTOR, value='.container .btn')
elem_login[2].click()
time.sleep(5)

python3.10.5

試したこと

試すことすらわからず段階におります。大変申し訳ございません。

補足情報(FW/ツールのバージョンなど)

SigmaDelta👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

原因

回答してあげたかったのですが、時間がないのでどなたか助言が出るかと思いましたが、思ったより更新されませんね…
戯言はさておき

Access Denied というメッセージが出てしまいます

まずこの事象ですが、普通にクロールするとクロール先にとってはwebdriverからアクセスされたことはバレバレです。
https://note.com/flashboys/n/n7d5bd0d2f307

クロール対策を実施しているサイト、特に金融系サイトは間違いなく実施しているでしょう。
そのため、アクセスを拒否られたのだと思います。

対策

幸いこのサイトは navigator.webdriver の値を削除するだけでひとまずログインページは突破できるようです。
※アカウント盛っていないのであくまでログインボタンでAccess Deniedを回避するだけ

ということで対策としてはwebdriverというプロパティを消してあげることで対処します

javascript

1delete Object.getPrototypeOf(navigator).webdriver;

具体的コード

selenium から javascript を実行するには execute_script() を使用します。

python

1driver.execute_script("""delete Object.getPrototypeOf(navigator).webdriver;""")

差し込む場所としては下記コードの直後が良いでしょう。

python

1url = 'https://my.xmtrading.com/jp/member/login' 2driver.get(url) #上の行で指定したurlを開きます

制約事項

F12などの開発者ツールで試すにChromeでも突破できるはずなのですが、 webdriver 以外の要素も見ているようでChromeの場合それだけでは突破できません。
ですが、Firefoxなら上記だけでいけます。
今のところChromeでも具体的な対策方法は検証できておりませんので、Firefoxへ置き換え&上記JSの差し込みでご対応されてはいかがでしょうか。

お役に立てれば幸いです。

投稿2022/08/02 00:53

al_aya_yuka

総合スコア98

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro111

2022/08/03 11:30

al_aya_yuka様 ご回答ありがとうございました!無事ログインすることが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問