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

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

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

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

selenium

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

Q&A

解決済

1回答

4466閲覧

【python selenium】driver.execute_scriptで改行の埋め込みができない

shirai

総合スコア1290

Python 3.x

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

selenium

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

0グッド

0クリップ

投稿2019/06/26 11:45

編集2019/06/26 11:46

スクレイピングでテキストエリアに文字を入力したいのですが、

python

1mojiretsu = 'あ\r\nあ' 2driver.execute_script('document.getElementsByName(\'hoge\')[0].value=\'%s\';' % mojiretsu)

この入力を使うとstr型の変数mojiretsuの中に改行が含まれている場合エラーが出てしまいます。

self.error_handler.check_response(response) raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.evaluate threw exception: SyntaxError: Invalid or unexpected token

改行がない場合は想定通りに反映されます。

python

1mojiretsu = 'ああ' 2driver.execute_script('document.getElementsByName(\'hoge\')[0].value=\'%s\';' % mojiretsu) 3 4# ああ

↓でもエラーは出ず改行が想定通りに反映されています。

python

1mojiretsu = 'あ\r\nあ' 2driver.get_elements_by_name(\'hoge\')[0].send_keys(mojiretsu)) 3 4# あ 5# あ

文字列は500文字程度を入力する予定なのですが、
driver.get_elements_by_nameだと1文字ずつ入力するとのことで
時間がかかることを懸念しています。
jsを埋め込む形でうまく反映させる回避方法をご教授いただけないでしょうか。

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

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

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

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

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

guest

回答1

0

自己解決

driver.execute_script('document.getElementsByName('hoge')[0].value='%s';' % mojiretsu.replace('\r','\r').replace('\n','\n')

でした。

投稿2019/06/27 03:24

shirai

総合スコア1290

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

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

napojin

2020/06/18 08:01 編集

確かに、replaceがない場合、selenium.common.exceptions.JavascriptException: Message: javascript error: Invalid or unexpected token みたいなエラーが出ますが、これって本当に改行されて文字入力されているのでしょうか??よくないやり方の気がします。 テキストエリアに改行文字がただの文字として、 'あ\r\nあ' で出力されてしまう気がするのですが... stackoverflowで高評価のついた手法である、こっちのやり方で対応した方が良さそうな気がします ちなみに、これでうまく動くことは筆者が動作確認済みです。 driver.execute_script(  "document.getElementsByName('hoge')[0].value=arguments[0];", mojiretsu ) <参考URL> https://stackoverflow.com/questions/27998536/selenium-execute-script-with-newlines
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問