seleniumのパネルのあるサイトの基本機能の確認

実現したいこと

パネル部分のseleniumによる基本機能の確認

前提

あるサイト、それは、多数項目の設定入力をすると、webサーバで、その設定による処理を行い、その結果を返す仕組みになっています。
その設定のセットが多数あるので、その入力をpython+seleniumで行おうとしています。
設定の仕組みをF12で調べたところ、一部ですが、3個のパネル設定がある部分で、下記の構造が判明しました。
本来は、各パネルをクリックして、そのパネルについての設定項目を展開する仕組みになっています。
その項目でclickを行い、設定項目を入力するのですが、パネルの展開を省略し、
まずseleniumの動作を確認するため、一意の部分collapseに着目して、そこを検出通過するテストコード作りました。
その結果、collapse1を検出し、続く「collapse2の部分でエラーとなりました。
このようになる原因をお尋ねします。
結果中のconfirmokやgeneratorokはそこに至るまでの通過処理がうまく機能していることを表しています。

それぞれにclikableを置いているのは、パネルの展開処理の待ち合わせの積りです。
clikable自体は、パネルの検出だけで、展開操作はしないだろうと思っています。
このサイトはメールアドレスとパスワードが必要になっています。ただしtrial版です

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

runfile('C:/python/test4.py', wdir='C:/python') c:\python\test4.py:10: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome("c:/driver/chromedriver.exe") confirm ok generator panel collapse1 Traceback (most recent call last): File C:\anaconda3\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File c:\python\test4.py:42 elm_title2=wait.until(EC.element_to_be_clickable((By.ID,"collapse2"))) File C:\anaconda3\lib\site-packages\selenium\webdriver\support\wait.py:95 in until raise TimeoutException(message, screen, stacktrace) TimeoutException

該当のソースコード

python

12#問題の部分に至るまでのコード3 4import time 5#selenium ver 4.8.26from selenium import webdriver 7from selenium.webdriver.common.by import By 8from selenium.webdriver.support.ui import WebDriverWait 9from selenium.webdriver.support import expected_conditions as EC 10from selenium.common.exceptions import TimeoutException 11from selenium.webdriver.support.select import Select 12 13driver = webdriver.Chrome("c:/driver/chromedriver.exe")14driver.get("https://eas.forexsb.com")15wait = WebDriverWait(driver, 10)16 17element = wait.until(EC.element_to_be_clickable((By.ID, 'user-sign-in-email')))18EC.element_to_be_clickable((By.ID, 'user-sign-in-email'))19email = driver.find_element(By.ID,"user-sign-in-email")20email.send_keys("****@****.jp")21elem_login_pw = driver.find_element(By.ID,"user-sign-in-password").send_keys("qACSqwvD")22elem_login_email = driver.find_element(By.ID,"user-sign-in-submit").send_keys("keys.ENTER")23 24 25elm_confirm=wait.until(EC.element_to_be_clickable((By.ID,'eas-main-accept-legal')))26elm_confirm.click()27#element.send_keys("keys.ENTER")28 29print("confirm ok")30time.sleep(2)31 32elm_generator=driver.find_element(By.ID,"acquisition-link");33elm_generator.click()34 35print("generator")36 37time.sleep(2)38 39################以下が注目部分のコード#################40 41elm_title1=wait.until(EC.element_to_be_clickable((By.ID,"collapse1")))42#elm_title.click()43elm_panel1=driver.find_element(By.ID,"collapse1")44print("panel collapse1")45 46elm_title2=wait.until(EC.element_to_be_clickable((By.ID,"collapse2")))47#elm_title.click()48elm_panel2=driver.find_element(By.ID,"collapse2")49print("panel collapse2")50 51elm_title3=wait.until(EC.element_to_be_clickable((By.ID,"collapse3")))52#elm_title.click()53elm_panel3=driver.find_element(By.ID,"collapse3")54print("panel collapse3")55 56

試したこと

ここに問題に対して試したことを記載してください。

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

問題部分のHTML。手書きですので間違いがあるかも知れません。

パネル1の箇所 <div class="panel-default"> <div class="panel-heading"> ... </div> <div class="panel-collapse" id="collapse1"> <div class="panel-body">...</div>==$0 ........... </div> </div> パネル2の箇所 <div class="panel-default"> <div class="panel-heading"> ... </div> <div class="panel-collapse" id="collapse2"> <div class="panel-body">...</div>==$0 ........... </div> </div> パネル3の箇所 <div class="panel-default"> <div class="panel-heading"> ... </div> <div class="panel-collapse" id="collapse3"> <div class="panel-body">...</div>==$0 ........... </div> </div>

対象サイト
https://expert-advisor-studio.com/
trialであれば、自由に使えます。

python 3.8.11
selenium 4.11
chrome使用

パネル1、パネル2、パネル3のスクリーンショット

イメージ説明

コメントを投稿

0 コメント