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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

JavaScript

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

selenium

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

Q&A

1回答

7840閲覧

おseleniumでexecute_scriptを使って高速入力がしたい。

kerk

総合スコア0

Python 3.x

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

JavaScript

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

selenium

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

0グッド

0クリップ

投稿2020/07/14 01:58

編集2020/07/14 04:24

ブラウザでの入力を自動化するためにpython&seleniumを使っています。
-問題1-
send.key()だと入力が遅いため、execute_script(最下部のコード)を使ってフォルダ内に存在するテキストをテキストエリアに高速入力できるようにしたいが、テキストがテキストエリアに入力されないのでご教授いただけると幸いです。

python

1import time 2import random 3from selenium import webdriver 4from selenium.webdriver.common.keys import Keys 5from selenium.webdriver.chrome.options import Options 6 7option = Options() 8option.add_argument('--incognito') 9driver = webdriver.Chrome(executable_path="chromedriverのパス",options=option) 10 11driver.get("http://mymemo.top/") 12time.sleep(3) 13 14with open(r'開きたいテキストのパス',encoding='UTF-8') as s: 15 v = s.read() 16driver.execute_script('document.getElementsByName("??").value="%s";' %v )

[フォルダ内テキストの例]
イメージ説明

"""テキストボックスに文字列を高速入力するコード"""
w.execute_script('document.getElementById("id属性").value="%s";' % text)
w.execute_script('document.getElementsByName("name属性")[0].value="%s";' % text)
w.execute_script('document.getElementsByClassName("class名(class属性)")[0].value="%s";' % text)

変数の説明 w: ウェブドライバー text: 入力するテキスト

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

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

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

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

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

tetsunosuke

2020/07/14 02:46

"機能しない" とはどういう状態になるのでしょうか。 driver.execute_script('document.getElementsByName("q").value="%s";' %v ) だけをみると、 w.execute_script('document.getElementsByName("name属性")[0].value="%s";' % text) のように配列として扱っていないことが原因のように思えるので、JavaScriptの実行エラーとなっているように感じます。 """テキストボックスに文字列を高速入力するコード""" 以下はwがなにかわからないのですが、ただのコメントという意味なのでしょうか?
kerk

2020/07/14 02:53

説明不足で申し訳ありません。 修正致しました。 javascriptの知識が全くないもので....
tetsunosuke

2020/07/14 02:55

失礼しました。 > 配列として扱っていないことが原因のように思えるので、JavaScriptの実行エラーとなっているように感じます。 検証しましたがエラーにはなりませんでした。(無反応) driver.execute_script('document.getElementsByName("q")[0].value="%s";' %v ) とすれば希望する動作になると思います
kerk

2020/07/14 03:04 編集

そのように[0]を追加してもテキストエリアには入力されませんでした。。。 selenium.common.exceptions.JavascriptException: Message: javascript error: Invalid or unexpected token (Session info: chrome=83.0.4103.116) のようなエラーが発生しました。 最後の%vの部分を'飲食店'などの文字列をいれてやると、機能することが分かりました! なので、with open~v = s.read()が原因の可能性が。
tetsunosuke

2020/07/14 03:04

なるほど。ファイルの中身の問題・読み取り方の問題のような気がします。 (質問時点ではファイルの中身に何が書いてあるか提示がなかったのでわからなかった) 参考になりそうな質問 https://teratail.com/questions/197211 改行除去のため v = s.read().strip() をすると良いかもしれません。
kerk

2020/07/14 04:23 編集

質問のコードのURLをブラウザメモ帳に変更しました。 このメモ帳に質問に追加したテキスト3行をそのまま打ち込みたいのですが、やはり一番最初の行しか入力されません。
tetsunosuke

2020/07/14 04:34

上記「参考になりそうな質問」はご覧になり、試してみましたか?
kerk

2020/07/14 09:07

試してみた結果上手く行きました! この度はお世話になりました。 ありがとうございます。
guest

回答1

0

こんな感じでどうでしょうか?

Python

1import time 2import random 3from selenium import webdriver 4from selenium.webdriver.common.keys import Keys 5from selenium.webdriver.chrome.options import Options 6 7option = Options() 8option.add_argument('--incognito') 9driver = webdriver.Chrome(executable_path="chromedriverのパス",options=option) 10 11driver.get("http://mymemo.top/") 12time.sleep(3) 13 14v = "abc" 15v = v.replace('\r','\r').replace('\n','\n') 16 17parm = 'document.getElementById("main").value= "{}";'.format(v) 18 19driver.execute_script(parm)

投稿2020/07/14 05:21

編集2020/07/14 05:32
Reach

総合スコア733

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

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

kerk

2020/07/14 09:08

replaceを使うことで上手く行きました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問