DeprecationWarning: executable_path has been deprecated, please pass in a Service object
解決したいこと
最近まで実行できていたコードが今週くらいから実行しようとするととまってしまうようになりました。
ブラウザの自動操作になります。
コードやコンソールで返される内容を記載します。
seleniumのバージョンは下記のとおりです。
selenium 4.1.0
発生している問題・エラー
あるサイトにログインしようとしたところで下記の状態になります。
username, passwordが入力されようとしたところで止まるというかブラウザが閉じられコードも終了し下記の結果が返されます。
====== WebDriver manager ======
Current google-chrome version is 98.0.4758
Get LATEST chromedriver version for 98.0.4758 google-chrome
Driver [/Users/do/.wdm/drivers/chromedriver/mac64/98.0.4758.80/chromedriver] found in cache
point-click-kari.py:10: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(ChromeDriverManager().install(), options=op)
point-click-kari.py:24: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
elem_username = driver.find_element_by_id('loginInner_u')
Traceback (most recent call last):
File "point-click-kari.py", line 25, in <module>
elem_username.send_keys('ID’)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 540, in send_keys
self._execute(Command.SEND_KEYS_TO_ELEMENT,
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 710, in _execute
return self._parent.execute(command, params)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 424, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot construct KeyEvent from non-typeable key
(Session info: chrome=98.0.4758.80)
Stacktrace:
0 chromedriver 0x0000000109a463c9 chromedriver + 5018569
1 chromedriver 0x00000001099d1333 chromedriver + 4539187
2 chromedriver 0x00000001095a6a88 chromedriver + 170632
3 chromedriver 0x00000001095e304b chromedriver + 417867
4 chromedriver 0x0000000109605f7f chromedriver + 561023
5 chromedriver 0x00000001095d5823 chromedriver + 362531
6 chromedriver 0x00000001095d4e7b chromedriver + 360059
7 chromedriver 0x00000001095f87e2 chromedriver + 505826
8 chromedriver 0x00000001095cfde5 chromedriver + 339429
9 chromedriver 0x00000001095f88ee chromedriver + 506094
10 chromedriver 0x000000010960b604 chromedriver + 583172
11 chromedriver 0x00000001095f86d3 chromedriver + 505555
12 chromedriver 0x00000001095ce95e chromedriver + 334174
13 chromedriver 0x00000001095cf935 chromedriver + 338229
14 chromedriver 0x0000000109a021ee chromedriver + 4739566
15 chromedriver 0x0000000109a1bf51 chromedriver + 4845393
16 chromedriver 0x0000000109a21928 chromedriver + 4868392
17 chromedriver 0x0000000109a1ca7a chromedriver + 4848250
18 chromedriver 0x00000001099f6c31 chromedriver + 4693041
19 chromedriver 0x0000000109a37978 chromedriver + 4958584
20 chromedriver 0x0000000109a37b01 chromedriver + 4958977
21 chromedriver 0x0000000109a4d795 chromedriver + 5048213
22 libsystem_pthread.dylib 0x00007fff67310109 _pthread_start + 148
23 libsystem_pthread.dylib 0x00007fff6730bb8b thread_start + 15
該当するソースコード
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import time
op = Options()
# op.add_argument("--headless")
# オプションを指定してchromeを起動する
driver = webdriver.Chrome(ChromeDriverManager().install(), options=op)
# driver = webdriver.Chrome(ChromeDriverManager().install())
# def play(url):
# op = Options()
# op.add_argument("--no-sandbox")
# op.add_argument('--headless')
# op.add_argument('--disable-dev-shm-usage')
# driver = webdriver.Chrome(options=op)
url = 'https://grp01.id.rakuten.co.jp/rms/nid/vc?__event=login&service_id=top'
driver.get(url)
elem_username = driver.find_element_by_id('loginInner_u')
elem_username.send_keys('****')
elem_password = driver.find_element_by_id('loginInner_p')
elem_password.send_keys('***')
login_btn = driver.find_element_by_name('submit')
login_btn.click()
time.sleep(5)
driver.get("file:///Users/do/documents/rakuten/getWindowHandles.html")
time.sleep(3)
link1 = driver.find_element_by_link_text("Lucky Kuji")
link2 = driver.find_element_by_link_text("Lucky Kuji2")
link3 = driver.find_element_by_link_text("Lucky Kuji3")
link4 = driver.find_element_by_link_text("Lucky Kuji4")
link5 = driver.find_element_by_link_text("Lucky Kuji5")
link6 = driver.find_element_by_link_text("Lucky Kuji6")
link7 = driver.find_element_by_link_text("Lucky Kuji7")
link8 = driver.find_element_by_link_text("Lucky Kuji8")
link9 = driver.find_element_by_link_text("Lucky Kuji9")
link10 = driver.find_element_by_link_text("DailyChance Kuji")
link11 = driver.find_element_by_link_text("LuckyBingo")
link1.click()
link2.click()
link3.click()
link4.click()
link5.click()
link6.click()
link7.click()
link8.click()
link9.click()
link10.click()
link11.click()
#全てのウィンドウハンドルを取得
allHandles = driver.window_handles
#ウィンドウハンドル1
print(allHandles[0])
#ウィンドウハンドル2
print(allHandles[1])
#ウィンドウハンドル3
print(allHandles[2])
#ウィンドウハンドル4
print(allHandles[3])
#ウィンドウハンドル5
print(allHandles[4])
#ウィンドウハンドル6
print(allHandles[5])
#ウィンドウハンドル7
print(allHandles[6])
#ウィンドウハンドル8
print(allHandles[7])
#ウィンドウハンドル9
print(allHandles[8])
#ウィンドウハンドル10
print(allHandles[9])
#ウィンドウハンドル11
print(allHandles[10])
time.sleep(300)
ちなみにこのコード以外にもいくいくつか同様に最近になって実行できなくなりました。
# ライブラリ
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.alert import Alert
import time
import pandas as pd
import os
import datetime
# 現在時刻取得
tm_now = datetime.datetime.now()
# 10以上21時未満のとき
if 10 <= tm_now.hour < 21:
# ブラウザ立ち上げ
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.implicitly_wait(3)
# 楽天競馬 -------------------------------------------------------
browser.get('https://my.keiba.rakuten.co.jp/')
time.sleep(1)
# ログイン情報入力
textbox = browser.find_element_by_id("loginInner_u")
textbox.send_keys("***")
time.sleep(1)
textbox = browser.find_element_by_id("loginInner_p")
textbox.send_keys("***")
time.sleep(1)
# ログインボタン
btn = browser.find_element_by_xpath("/html/body/div[2]/div/div/div[1]/div/form/div/p[1]/input")
btn.click()
time.sleep(3)
# 入金へ移動
btn = browser.find_element_by_class_name("balancedisplay_list_label")
btn.click()
time.sleep(3)
# 入金情報入力
browser.switch_to.window(browser.window_handles[-1]) # 最後のtabに移動
textbox = browser.find_element_by_class_name("definedNumber ")
textbox.send_keys("100")
# 確認ボタン
btn = browser.find_element_by_id("depositingInputButton")
btn.click()
time.sleep(3)
# 暗証番号入力
textbox = browser.find_element_by_name("pin")
textbox.send_keys("3291")
time.sleep(1)
# 確認ボタン
btn = browser.find_element_by_id("depositingConfirmButton")
btn.click()
time.sleep(3)
# 省略
自分で試したこと
「DeprecationWarning: executable_path has been deprecated, please pass in a Service object」で調べていますが今の所明確な答えが見つけられていません。
添付の画像のようにchromedriverも98.0.4758が手元にある状態だとおもうのですが…
ご存じの方、アドバイスいただけたら幸いです。