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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1299閲覧

Seleniumで要素取得できない

yokkesama

総合スコア8

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/08/10 05:55

前提・実現したいこと

会社の勤務時間表システムを自動入力したいです。
具体的には、Anaconda環境で、Seleniumを使って、勤務時間表システムに勤惰実績を自動登録したいと思っています。

その自動登録に際し、
第一段階:システムへのログイン
第二段階:勤務時間表への遷移
第三段階:勤務時間表への入力・登録
というステップを自認しています。

第一段階は無事突破(ログイン完了)できたものの、第二段階で躓いています。
勤務時間表へ遷移する「勤務入力」というテキストリンクの要素が検出できないのです。

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

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"勤務入力"} (Session info: MicrosoftEdge=92.0.902.67)

該当のソースコード

Python

1from selenium import webdriver 2import time 3 4browser = webdriver.Edge(r"C:\Users\hogehoge\Documents\02 Work Others\11 Computer Skill\Python Scripts\msedgedriver.exe") 5time.sleep(5) 6 7# 以下、第一段階 8browser.get("https://hogehogecom.proactive.jp/otm/") 9time.sleep(5) 10 11ele_kaisha = browser.find_element_by_name('SHARE_OTM_kaisyaCd') 12ele_kaisha.send_keys('hoge') 13time.sleep(5) 14 15ele_usernumber = browser.find_element_by_name('SHARE_OTM_sno') 16ele_usernumber.send_keys('hogehoge') 17time.sleep(5) 18 19ele_password = browser.find_element_by_name('SHARE_OTM_password') 20ele_password.send_keys('hogehoge') 21time.sleep(5) 22 23ele_loginbtn = browser.find_element_by_name('b_login') 24ele_loginbtn.click() 25time.sleep(5) 26# 第一段階無事(ログイン)完了 27 28# 以下第二段階(このコード↓が実行されません) 29ele_timeinput = browser.find_element_by_link_text('勤務入力') 30 31

試したこと

1.Website(どのサイトかは忘れてしまったのですが)で、第一段階後に遷移されていない可能性があるので、第一段階の後に

python

1print(browser.current_url)

を入力して、URLを確認したが、しっかりと遷移していました。

2.他手段での要素取得を試みた。
以下が当該勤務時間表へ遷移するリンクの情報。

HTML

1<a href="OTMServlet?controllerId=0201MENU&amp;SHARE_FW_OPERATION_PAGE=20210810142831411_0607998_RlDB_P3IIzd4G93gtIADXNTKzVlBnLA7vNKLy&amp;SHARE_FW_TOKEN_ID=20210810142831177_0031310_RlDB_fZD1tQm4LMdO6VLNSFPOS40FsDJ40Fx5" onclick="loading();" target="SHARE_OTM_DATA_FRAME">勤務入力</a>
  • xpathでの要素取得

Python

1ele_timeinput = browser.find_element_by_xpath('//*[@id="3"]/dd[1]/a')

としたところ、

Python

1NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="3"]/dd[1]/a"} 2 (Session info: MicrosoftEdge=92.0.902.67)

というエラーが返ってきました。

ご多忙中申し訳ありませんが、アドバイスいただきたくお願いします。
さらに必要な情報等ありましたら、(なにせ会社のシステムなので制限はありますが)できる限り開示させていただきますので、お問い合わせいただけますと幸いです。

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

  • Anaconda環境:conda 4.9.2
  • Python環境:Python 3.8.5
  • Windows 10 (バージョン20H2)

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

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

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

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

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

guest

回答1

0

ベストアンサー

原因としては、
・要素の指定を間違えている
iframeの中に対象要素がある
のどちらかでしょう。

後者の場合は、iframe要素を特定してswitch_to_frameしてから、目的ノードを検索します。
仮にiframeが1つしかない場合は、
`driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))

社内システムと言うことなのでもしかすると昔のシステムで、iframeじゃなくてframeを使っている可能性もありますね。

いずれにせよ、HTMLをよく見ましょう。

投稿2021/08/10 11:09

otn

総合スコア84806

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問