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

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

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

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

JavaScript

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

Python

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

selenium

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

Q&A

解決済

2回答

21875閲覧

seleniumでjavascriptのonclickを実行したい

sawareco

総合スコア18

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

JavaScript

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

Python

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

selenium

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

0グッド

0クリップ

投稿2019/05/18 17:46

編集2019/05/19 01:26

あるサイトで下記の様にonclickでページ移動するボタンがあります。
そのボタンをseleniumでクリックし、ページを移動したいのですがなかなか上手くいきません。

HTML

1<form name="ff" id="ff" action="reg.php" method="post" enctype="multipart/form-data" onsubmit="return false;"> 2<input type="button" value="修正" onClick="A_re(this.form,23);"> 3<input type="button" value="修正" onClick="A_re(this.form,74);"> 4<input type="button" value="修正" onClick="A_re(this.form,448);"> 5<input type="button" value="修正" onClick="A_re(this.form,198);"> 6</form>

参考にさせて頂いたサイトでは、execute_scriptなるもので実行できるとのことでしたができず、こちらに質問させていただきました。
下記がコードです。

python

1browser.execute_script("A_re(this.form,23)")

実際のコードではbuttonが100近く有り、最終的にすべてのbuttonをクリックし、クリック先の要素をすべて取得する必要があります。

(1)最初のbuttonをクリック

(2)ページ移動先で要素を取得

(3)前のページに戻る

(4)次のbuttonをクリック

(5)ページ移動先で要素を取得

詳しい方がいらっしゃいましたらアドバイスをいただけないでしょうか?よろしくお願いします。

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

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

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

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

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

suama

2019/05/19 00:51

<input type="button" value="修正" ..> のボタンが4つあるのですが、全部クリックさせたいのでしょうか。 それとも、どれか1つだけ(最初の1つだけ)クリック動作をさせたいのでしょうか。 また、HTML側は、ご自身では書き換えられないものでしょうか?(外部サイトなどを参照しているとか) execute_scriptだと、関数に渡す this.form の値が正しくセットされずにエラーになっているような気がします。 HTMLを書き換え可能なら、idを振ってあげて、 find_element_by_id(要素のid).click() とか find_element_by_css_selector(CSSセレクタ').click() で操作のほうがよさそうな感じはします。
sawareco

2019/05/19 01:44

suama様 アドバイスをいただき、ありがとうございます。 buttonを全部クリックし、移動先のページで要素を取得したいです。また、HTML側は私が所有しているサイトではないため、書き換えは難しいです。execute_scriptを使わずに、全ての移動先ページで要素を取得する良い方法はないでしょうか・・・。 ※質問内容を修正させていただきました。よろしくお願いいたします。
suama

2019/05/19 01:45

ありがとうございます!
guest

回答2

0

ベストアンサー

こんにちは。
外部サイトだということなので、書き換えはできないのですね。
その場合、自動で処理を一気に実行することになるので、外部サイトに悪影響を与えないように、という点はお気をつけください。

さて、idで特定できないとか、同等の要素数が固定ではないとかあるのでしたら、XPATHやCSSで特定になるかと思います。

find_element_by_css_selector("#ff > input[type='button']")
という感じで、CSSの擬似セレクタで form直下のinput type="button" の要素を取得できると思います。(指定は正しいかどうかわかりません)

ここでは配列になるので、for文でループで回して、順番のinput type="button" に対して click() を呼ぶので如何でしょう。
この点は、mkgreiさんが書いてくださっているのと同じです。

投稿2019/05/19 02:01

編集2019/05/19 02:01
suama

総合スコア1997

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

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

sawareco

2019/05/19 05:53

css_selectorで上手くいきました!execute_scriptにばかり目が行っておりました。 本当にありがとうございました!
guest

0

https://qiita.com/mochio/items/dc9935ee607895420186

findして要素を取得してからclickを呼ぶのはいかがでしょう。

投稿2019/05/19 00:47

mkgrei

総合スコア8560

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

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

sawareco

2019/05/19 01:41

mkgrei様 アドバイスをいただき、ありがとうございます。 findでの取得を初めに考えていたのですが、buttonの数が増減する可能性があるめ、onclickの内容を取得し、ループで次のページに移動した方が良いかと思いこの方法になりました。 ※質問内容を修正させていただきました。よろしくお願いいたします。
sawareco

2019/05/19 05:53

css_selectorで上手くいきました!execute_scriptにばかり目が行っておりました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問