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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

selenium

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

Q&A

1回答

3067閲覧

seleniumでinputタグやtextareaではない場所にテキスト入力(代入)したい

yayaya22

総合スコア51

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

selenium

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

0グッド

1クリップ

投稿2021/02/13 03:01

編集2021/02/13 09:44

前提・実現したいこと

seleniumでinputタグやtextareaではない場所にテキスト入力(代入)するテストシステムを作っています。

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

テキストを代入するsendkeysでは効かないようになっています。表示はできるが、操作はできない
オブジェクトのようです。

>>AttributeError: 'NoneType' object has no attribute 'send_Keys'

該当のソースコード

xxx = "txt" #文字を入れる post = driver.find_element_by_css_selector("#creator_studio_sliding_tray_root > div > div > div._7-iu._3qn7._61-3._2fyi._1a9e > div._7-i- > div > div._8525 > div._7-2a._5yk1.ads-text-suggestions-focusable > div > div > div._5rpb > div > div > div > div") post.send_Keys(xxx)

試したこと

javascriptを直接実行させようと試しましたが稼働しませんでした。

execute_script('document.getElementsByClassName("div._7-2a._5yk1.ads-text-suggestions-focusable").value="%s";' % xxx)

参考: https://srbrnote.work/archives/3025

補足追記:できれば絵文字emoji入力もできれば幸いです。その時のseleniumの取得方法も教示いただけると助かります。

devlopツールのスクリーンショットを添付します。
イメージ説明

選択中のHTMLが下記になります。

<div class="_7-2a _5yk1 ads-text-suggestions-focusable" role="presentation"> <div class="_5yk2" tabindex="-1"><div class="_5rp7"><div class="_5rpb"> <div aria-autocomplete="list" aria-controls="js_2u" aria-expanded="false" class="notranslate _5rpu" contenteditable="true" role="combobox" spellcheck="false" style="outline: none; user-select: text; white-space: pre-wrap; overflow-wrap: break-word;"><div data-contents="true"> <div class="" data-block="true" data-editor="8e4re" data-offset-key="6im0h-0-0"><div data-offset-key="6im0h-0-0" class="_1mf _1mj"><span data-offset-key="6im0h-0-0"><span data-text="true">あああ????</span></span></div></div></div></div></div></div></div></div>

追記:
HTMLでのnodeで追記したい部分をイメージで囲い追加しました。
この中にselenium実行中にテキストが入ってくれればOKなのですが、、。

イメージ説明
イメージ説明

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

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

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

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

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

m.ts10806

2021/02/13 03:26

「入力」ではないからでは。
yayaya22

2021/02/13 03:50

どういった意味でございましょうか。
m.ts10806

2021/02/13 04:01

そのままです。 例えば、入力コントロール以外の場所をクリックして何かキー押しても文字入りませんよね(contenteditable属性というのはあるけど) それは「入力を受け付ける要素ではないから」です。
yayaya22

2021/02/13 09:44

承知しました。
guest

回答1

0

createTextNodeして、appendChildするのでは?

投稿2021/02/13 03:37

otn

総合スコア85901

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

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

yayaya22

2021/02/13 03:55

seleniumで新しくtextの要素を作り出して、追加することができるのでしょうか。 具体的な話法としてexecute_scriptで実行の方法で可能でしょうか
otn

2021/02/13 04:05

seleniumにはHTMLを変更するメソッドは無いので、execute_scriptでそういうJavaScriptを実行します。
yayaya22

2021/02/13 06:08

ありがとうございます。具体的にどのようにすればよろしいでしょうか。
otn

2021/02/13 06:43

> createTextNodeして、appendChildするのでは? と書いたのですが。 JavaScriptをほとんど知らないと言うことなのでしょうか?
otn

2021/02/13 06:51

何らかの手段でノードを特定.appendChild(document.createTextNode("テキスト")); ですが、ノードの特定が出来ますかね。
yayaya22

2021/02/13 07:52

ありがとうございます。 恥ずかしながら、JavaScript はほぼ無知です。execute_script('document.getElementsByClassName("div._7-2a._5yk1.ads-text-suggestions-focusable"). appendChild(document.createTextNode("テキスト"));で試してみますね。
otn

2021/02/13 08:45

getElementsByClassNameの返り値は、ノードじゃなくてノードの配列なので、添え字を書いて配列からノードを取り出さないと駄目です。 引き数のクラス名の中に div というノード名っぽいのが混じってますが、大丈夫でしょうか? getElementsByClassNameの引き数は、関数名の通り、クラス名です。
yayaya22

2021/02/13 09:36 編集

上記の方法でできませんでした。まったくお手上げ状態となりました。
otn

2021/02/13 09:34

やはり自力ではノードの特定が出来ないと言うことですね。 どのHTMLのどの部分に追加したいかを質問文に書いてもらえば、アドレバイスできるかも知れません。
yayaya22

2021/02/13 09:44

お手数かけます、イメージを追記しました。
otn

2021/02/13 09:54

<span data-text="true">はHTML内で唯一でしょうか?
yayaya22

2021/02/13 10:00

はい、こちらだけだと思います。 画面上に入力すると、このJavaScript が変化していきます
otn

2021/02/13 10:08

spanを全部取得してdata-text属性で判断します。 execute_script('let x=document.getElementsByTagName("span");for(let i=0; i<x.length; i++) if(x[i].getAttribute("data-text")=="true")x[i].appendChild(document.createTextNode("あああ");') > 画面上に入力すると、このJavaScript が変化していきます これは意味がわかりません。
yayaya22

2021/02/13 11:33 編集

下記文で実行したらエラーとなりました。 driver.execute_script('let x=document.getElementsByTagName("span");for(let i=0; i<x.length; i++) if(x[i].getAttribute("data-text")=="true")x[i].appendChild(document.createTextNode("あああ");') >>raise exception_class(message, screen, stacktrace) selenium.common.exceptions.JavascriptException: Message: javascript error: missing ) after argument list >> 画面上に入力すると、このJavaScript が変化していきます >これは意味がわかりません。 画面上に「あああ」と入力するとdevelopツールでこの部分が点灯し、文字追加されていくという意味でした。 下記のサイトで、creatpost>instagramfeed>Yourpostの中に代入をしたいのです。 https://business.facebook.com/creatorstudio/?tab=instagram_content_posts
otn

2021/02/13 11:49

最後に閉じ括弧が足りなかったですね。足して置いて下さい。 > 画面上に「あああ」と入力するとdevelopツールでこの部分が点灯し、文字追加されていくという意味でした。 今回の質問とどういう関係なのか分かりません。
yayaya22

2021/02/13 12:45 編集

閉じかっこを入れたら driver.execute_script('let x=document.getElementsByTagName("span");for(let i=0; i<x.length; i++) if(x[i].getAttribute("data-text")=="true")x[i].appendChild(document.createTextNode("あああ");'))    ^ SyntaxError: invalid syntax 構文エラーとなりました。
otn

2021/02/13 12:48

いや、JavaScriptのエラーなので、JavaScript部分の最後です。言われたことを一旦咀嚼しましょう。 ~~("あああ"));')
yayaya22

2021/02/13 14:40 編集

失礼しました。修正ありがとうございます。 実行したら、エラーにはなりませんが、何も起きませんでした。
otn

2021/02/13 15:04

そうですか。リモートでの限界ですね。
yayaya22

2021/02/14 00:32 編集

色々とありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問