hetare
@hetare

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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が手元にある状態だとおもうのですが…
chromedriver.png

ご存じの方、アドバイスいただけたら幸いです。

0

2Answer

DeprecationWarning は今後動かなくなるコードについての警告で、今動かない原因とは関係ありません。動かない原因は以下のエラーに示されています。

  File "point-click-kari.py", line 25, in <module>
    elem_username.send_keys('ID’)
(略)
selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot construct KeyEvent from non-typeable key

25行目の elem_username.send_keys('...') で、英字キーボードで直接入力できない文字(日本語など)を入力しようとしてエラーが出ています。

そのような文字をフォームに入力するには execute_script() で JavaScript を実行してください。

browser.execute_script('document.getElementById("loginInner_u").value = "入力する文字列"')
1Like

Comments

  1. @hetare

    Questioner

    お教えいただきありがとうございます!
    実行し解決することができました。
    いつも助けていただきありがとうございます!

    ちなみに今までは実行できていたのが最近になってできなくなったというのは、
    サイト側かseleniumかdriver側かで仕様が変わったとかでしょうか。
  2. サイト側以外のどこかの仕様変更と思います。ある種の文字が入力できないのは昔からの Selenium の制約だったはずなので、最近できなくなった理由よく分かりませんが。

DeprecationWarningの原因は下記だと思います。

webdriver_managerをお使いのようですので、下記を参考に書き換えられると解消すると思います。(Selenium4ってコメントしてあるほうです)

また、下記の警告も同様にselenium4.0から非推奨になっているといっているので、書き換えたほうが良いと思います。

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

 の部分です。

  from selenium.webdriver.common.by import By #Byをインポート

  elem_username = driver.find_element(By.ID, 'loginInner_u')

 例外が出ていた原因はおそらく下記のリンク先にあるChromeDriverの問題みたいですね。
Ver98で"[]{}@<>_"などの文字をsend_keyで処理しようとすると発生するようです。

1Like

Comments

  1. @hetare

    Questioner

    お教えいただきありがとうございます!

Your answer might help someone💌