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

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

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

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

selenium

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

Q&A

解決済

2回答

1510閲覧

Python(Selenium)において、メールの返信ボタンを押下したあとに、本文に自動的に文字を記載したい

kimukimu009

総合スコア33

Python

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

selenium

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

0グッド

0クリップ

投稿2020/01/19 12:14

編集2020/01/19 15:32

■Python(Selenium)において、メールの返信ボタンを押下したあとに、本文に自動的に文字を記載したい。
1.メーラーにログイン
2.一番最新のメールをクリック
3.返信ボタンをクリック
4.本文に、文字を入力

■できないこと
4が出来ません。

■pythonファイル

# seleniumを使う準備 from selenium import webdriver # クロームを開きます browser = webdriver.Chrome() # ロリポップメールを開きます browser.get('https://tools.lolipop.jp/mail/') # ID/PASSを入力 #id = driver.find_element_by_id("ユーザID入力フィールドの要素") # id = driver.find_element_by_xpath('//*[@id="login_main"]/p[1]/input') id = browser.find_element_by_name('mail_add') id.send_keys("ログインID") # password = driver.find_element_by_id("パスワード入力フィールドの要素") #password = driver.find_element_by_xpath('/html/body/form/div[1]/table/tbody/tr/td[2]/div[3]/p[2]/input') password = browser.find_element_by_name('mail_pass') password.send_keys("ログインパスワード") # ログインボタンをクリック login_button = browser.find_element_by_xpath('/html/body/form/div[1]/table/tbody/tr/td[2]/div[3]/div[1]/a/img') login_button.click() # 最初のメールクリック mail_button = browser.find_element_by_xpath('/html/body/div[1]/table/tbody/tr/td[2]/form/table/tbody/tr/td[3]/table/tbody/tr[2]/td[2]/a') mail_button.click() # 返信ボタンクリック return_button = browser.find_element_by_xpath('/html/body/div[1]/table/tbody/tr/td[2]/div[3]/div[14]/a[5]') return_button.click() #本文に文字を記入する element = browser.find_element_by_class('frm_textarea') element.send_keys("記入したい文章")

■試したこと:
element = browser.find_element_by_class('frm_textarea')
については、class以外に、xpathもトライしたが、うまくいかず。

■本来やりたいこと
上記の、記入したい文章は、
「PCのローカルに入っている、テキストファイルの中身をコピーし、それを本文に
貼り付ける」ですが、質問内容がややこしくなる為、上記の質問とさせて頂いております。


「frederick_1974様」からのご教示により、解決したpythonファイルを記載いたします。
■解決したpythonファイル

# seleniumを使う準備 from selenium import webdriver # クロームを開きます browser = webdriver.Chrome() # ロリポップメールを開きます browser.get('https://tools.lolipop.jp/mail/') # ID/PASSを入力 #id = driver.find_element_by_id("ユーザID入力フィールドの要素") # id = driver.find_element_by_xpath('//*[@id="login_main"]/p[1]/input') id = browser.find_element_by_name('mail_add') id.send_keys("ログインID") # password = driver.find_element_by_id("パスワード入力フィールドの要素") #password = driver.find_element_by_xpath('/html/body/form/div[1]/table/tbody/tr/td[2]/div[3]/p[2]/input') password = browser.find_element_by_name('mail_pass') password.send_keys("ログインパスワード") # ログインボタンをクリック login_button = browser.find_element_by_xpath('/html/body/form/div[1]/table/tbody/tr/td[2]/div[3]/div[1]/a/img') login_button.click() # 最初のメールクリック mail_button = browser.find_element_by_xpath('/html/body/div[1]/table/tbody/tr/td[2]/form/table/tbody/tr/td[3]/table/tbody/tr[2]/td[2]/a') mail_button.click() # 返信ボタンクリック return_button = browser.find_element_by_xpath('/html/body/div[1]/table/tbody/tr/td[2]/div[3]/div[14]/a[5]') return_button.click() #メール本文に記述(返信メールなので、本文の前に、記入したい文章をもってくる) element = browser.find_element_by_class_name('frm_textarea') mail_value = element.get_attribute("value") element.clear() element.send_keys("記入したい文章") element.send_keys(mail_value)

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

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

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

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

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

guest

回答2

0

ベストアンサー

どのようなエラーが出ているのか(あるいは何も発生しないのか)が分からないですが、classで要素を特定する場合は、
element = browser.find_element_by_class_name('frm_textarea')じゃないですか?
_nameが抜けているような…

投稿2020/01/19 12:50

frederick_1974

総合スコア303

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

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

john_doe_

2020/01/19 12:51

多分、それだ!!
kimukimu009

2020/01/19 13:10

そうでした!!!できました!!! ありがとうございます。 できたのですが、本文の下に文字が入ってしまいます。 つまり、送信者のメールが最初に記載され、 最後に、「記載したい文章」が記載されてしまいます。 最初に、「記載したい文章」が記載するには、どのような方法が考えられますでしょうか? お手数をおかけしますが、よろしくお願いいたします。
john_doe_

2020/01/19 13:51 編集

多分、pyautoguiか、actionchainsを使って入力フォーム内で文章を印字したい位置(座標)を指定してあげないといけないんじゃないですかね? 他にやり方あるのかなあ。。。
frederick_1974

2020/01/19 13:54

from selenium.webdriver.common.keys import Keys elem.send_keys(Keys.HOME) でカーソル位置をテキストボックスの先頭に移動させられますので、その後で、 element.send_keys("記入したい文章") をすれば、最初に入るのではないでしょうか。
kimukimu009

2020/01/19 14:40

ありがとうございます。 elem.send_keys(Keys.HOME)は、element.send_keys(Keys.HOME)ですよね? 以下、両方試しましたが、うまく行きません。 カーソルも、本文の中に、入ってきません。 from selenium.webdriver.common.keys import Keys element.send_keys(Keys.HOME) element.send_keys("キーボード入力をする(通常キー)") と from selenium.webdriver.common.keys import Keys elem.send_keys(Keys.HOME) element.send_keys("キーボード入力をする(通常キー)")
frederick_1974

2020/01/19 15:03

elemとelementの違いは失礼しました。 それでは、 mail_value = element.get_attribute("value") で最初に表示されているメール文を取得してから、 element.clear() でテキストボックスの内容をクリア element.send_keys("記入したい文章") で入力したい文章を入力してから、 element.send_keys(mail_value) で元の文章を入力する というのはいかがでしょうか。
kimukimu009

2020/01/19 15:23

できました! ありがとうございます! 結果をまとめたいと思います。 本当に、ありがとうございました。
kimukimu009

2020/01/20 21:21

frederick_1974様から最初にご指摘いただいた内容でも、成功しましたので、お知らせいたします。 (element.send_keys(Keys.CONTROL,Keys.HOME)とした。単なるコントロールキーを押しながらのキー入力の指定の話です。) #メール本文に記述(返信メールなので、本文の前に、記入したい文章をもってくる) element = browser.find_element_by_class_name('frm_textarea') #キー入力準備 from selenium.webdriver.common.keys import Keys #Cont+HOMEキーを押下し、カーソルをトップに移動 element.send_keys(Keys.CONTROL,Keys.HOME) element.send_keys("記入したい文章")
guest

0

記載内容に問題ないようですが、
もしかしたら、class名'frm_textarea'が複数存在しませんか?

投稿2020/01/19 12:34

john_doe_

総合スコア354

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問