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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

selenium

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

Q&A

解決済

2回答

1554閲覧

Python Selenium: Xpathを記入してもelementを探せない

SnowBallEffect

総合スコア28

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

selenium

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

0グッド

0クリップ

投稿2020/04/23 05:12

あるサイトに自動的にログインしたく、ユーザ名とパスワードを入れるページまでSeleniumを使って自動的にブラウザーを開くとこまで来ましたが、xpathを使っても自動的に記入ができません。

###該当のソースコード

HTML5

1<input type="text" name="txt_userID" value="" size="14" maxlength="8" class="TextInputID" style="ime-mode:inactive"> 2

###試したコード1

Python

1driver.find_element_by_xpath("//input[@class = 'TextInputID']").send_keys(username) 2 3以下がエラーメッセージです。 4#selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@class = 'TextInputID']"} 5

また、開発者ツールのconsoleタブdocument.getElementsByTagName('form')を打ち込むと以下が出てきます。
イメージ説明

とういうわけで、以下のコードでいけるのかなって思ったら、それもダメでした。。。

###試したコード2

Python

1driver.find_elements_by_tag_name('form')[3].send_keys(username)

何が間違っているのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

driver.find_element_by_class_name('TextInputID').send_keys(username)
で良いのでは。

コメント受けて追記

ではフレームを遷移してからにしましょう。

python

1driver.switch_to.frame(driver.find_element_by_name('fra_body'))

投稿2020/04/23 06:46

編集2020/04/27 14:07
shirai

総合スコア1289

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

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

SnowBallEffect

2020/04/23 12:04

shiraiさん、 早速の返信ありがとうございます。shiraiさんの提案を試してみたのですが、以下のエラーが出てきます。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"TextInputID"}
shirai

2020/04/24 16:04

では、ログイン画面に遷移した後、print(driver.page_source)と打ってみて下さい。何が出てきますか?
SnowBallEffect

2020/04/27 02:02

shiraiさん、 返信ありがとうございます。以下のようなアラートが出てきました。 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja"><head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <meta http-equiv="Content-Style-Type" content="text/css" / <link href="/FM40/icons/22i0/assets/css/s22um013.css" rel="stylesheet" title="style" type="text/css" /> <link rel="START" href="https://www01.japantrustee.co.jp/FM40/h22ue000.html" /> <title>オンライン情報提供サービス</title> </head> <frameset cols="144,*" title="メインフレームセット"> <frame src="h22uf001.html" frameborder="0" noresize="" scrolling="NO" name="fra_menu" title="メニューフレーム" /> <frame src="h22ue004.html" frameborder="0" noresize="" scrolling="NO" name="fra_body" title="ログイン入力欄フレーム" /> <!-- フレーム未対応メッセージ出力 --> <noframes> &lt;BODY&gt; &lt;TABLE summary="タイトル"&gt; &lt;TR&gt;&lt;TD class="Title1"&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR&gt;&lt;TD class="Title2"&gt;&lt;IMG src="/FM40/icons/22i0/assets/images/F22Uf001.gif" width="191" height="14" alt="日本トラスティ・サービス信託銀行"&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR&gt;&lt;TD class="Title3"&gt;&lt;IMG src="/FM40/icons/22i0/assets/images/F22Uf002.gif" width="500" height="45" alt="ログイン"&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;/TABLE&gt; &lt;TABLE class="NoFramesBase" summary="フレーム未対応メッセージ"&gt; &lt;TR&gt;&lt;TD class="NoFraSpace"&gt;&lt;/TD&gt;&lt;/TR&gt; &lt;TR&gt;&lt;TD class="NoFraMsg"&gt; &lt;SPAN class="NoFraFont"&gt;当サービスはフレーム未対応のブラウザに対応しておりません。&lt;/SPAN&gt;&lt;BR&gt; &lt;BR&gt; 恐れ入りますが、フレーム対応のブラウザにてご利用ください。 &lt;/TD&gt;&lt;/TR&gt; &lt;/TABLE&gt; &lt;/BODY&gt; </noframes> </frameset> </html><!-- h22ue000.html -->
stdio

2020/04/27 03:27

一回、name="fra_bodyの要素を取得した方が良さそうですね。 pyautoguiを検討に入れてみてもいいかも知れません。
shirai

2020/04/27 14:07

追記しました。
SnowBallEffect

2020/04/28 01:12

shiraiさん、stdioさん 返信ありがとうございます。私の知識が乏しくてすみません。 driver.switch_to.frame(driver.find_element_by_name('fra_body'))をdriver.find_element_by_class_name('TextInputID').send_keys(username)の前に入れるということでしょうか? そうすると以下のエラーが出てきます。。。 selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted
shirai

2020/04/28 08:20

不思議ですね。。。以下打つと何が出てきますか? print(driver.find_element_by_name('fra_body').get_attribute('src'))
shirai

2020/04/28 08:21

ログインページに飛んだ後に print(driver.find_element_by_name('fra_body').get_attribute('src')) driver.switch_to.frame(driver.find_element_by_name('fra_body')) driver.find_element_by_class_name('TextInputID').send_keys(username) の順に打ってみてください。
SnowBallEffect

2020/04/30 01:40

shiraiさん、 指示通りprint(driver.find_element_by_name('fra_body').get_attribute('src'))だけ打つと以下がでます。 https://www01.japantrustee.co.jp/FM40/h22ue004.html print(driver.find_element_by_name('fra_body').get_attribute('src')) driver.switch_to.frame(driver.find_element_by_name('fra_body')) driver.find_element_by_class_name('TextInputID').send_keys(username) を打つと以下のような結果が出ます。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"TextInputID"}
shirai

2020/04/30 08:10

driver.switch_to.frame(driver.find_element_by_name('fra_body')) driver.switch_to.frame(driver.find_element_by_name('fra_logoin')) driver.find_element_by_class_name('TextInputID').send_keys(username) ならどうですか?
SnowBallEffect

2020/05/01 05:26

shiraiさん、 すごい!できました!ありがとうございます。 もし、差し支えなければ説明して頂ければ幸いです。 driver.switch_to.frameは何をしているのか? なぜ ('fra_logoin')を追加しないといけなかったのか? よろしくお願い致します。
shirai

2020/05/02 15:52

print打った中を見れば分かるかと思いますが、 手動でデベロッパーツールを見る時よりも色々とかけていると思います。 よく見ればそれはframeタグの中身であると分かります。 Seleniumではframeタグの中身をそのままでは見ることができないので、 一度frameにswitchして、そこを新たなDOMであるかのように見るというイメージです。 今回目的の要素は二重にframeに囲まれていたので、2回switchしました。 name属性がfra_logoinである要素を手動でデベロッパーツールから確認してみてください。
SnowBallEffect

2020/05/07 01:02

Shiraiさん、 大変分かりやすいご説明ありがとうございました。クリアになりました!
guest

0

すいません。間違いました。

投稿2020/04/23 08:47

編集2020/04/23 08:49
otn

総合スコア84423

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問