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

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

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

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

3回答

484閲覧

javascriptのgetElementsByxxを利用してボタンクリックする方法

Kimsehwa

総合スコア312

JavaScript

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

0クリップ

投稿2017/08/03 03:30

<html> <head></head> <body> <form class="login-form"> <button class="btn login-button btn-submit btn-small" type="submit" autocomplete="off" tabindex="0" data- reactid="25"><!-- react-text: 26 -->ログイン<!-- /react-text --></button> </form> <form class="login-form" action="" method="post" data-reactid="40"><div class="facebookForm regOption" data- reactid="41"><div class="fb-minimal" data-reactid="42"><hr data-reactid="43"><button class="btn minimal-login btn-submit btn-small" type="submit" autocomplete="off" tabindex="0" data-reactid="44">Facebookでログイン</form> </body> </html>

上記ファイルの中でclassが「btn login-button btn-submit btn-small」になってるbuttonをクリックしたいです。

splash:runjsというメソッドを利用してブラウザでクリックするようなことを実現してますが、
javascriptのgenElementsxxとかで上記のボタンを特定する方法がわかりません。

以下のコードだとボタンクリックを失敗してました。

splash:runjs("document.getElementsByTagName('button')getElementByClassName('btn login-button btn-submit btn-small').click()")

getElementxxを利用して上記のボタンをクリックできる方法がありましたら教えていただけますか。
そもそもトラブルシューティング方法がわからず
上記のhtmlをloadしてgetElementsByTagNameを実行してどういう値が取れるか確認したいですが、その方法もよくわかりません。
あるページをloadしてgetElementsxxを実行する方法がありましたら教えていただきたいです。

以上、よろしくお願いします

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

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

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

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

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

guest

回答3

0

こrではいかがでしょうか?

js

1document.querySelector('.btn.login-button.btn-submit.btn-small')

投稿2017/08/03 03:38

MasakazuFukami

総合スコア1869

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

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

Kimsehwa

2017/08/03 03:57

回答ありがとうございます。試してみたところ駄目でした。TT document.querySelector('.btn.login-button.btn-submit.btn-small') こちらの値が何が入ってるか確認する方法がありましたら教えていただけますか?
MasakazuFukami

2017/08/03 04:03

使用しているのはscrapy-splashですかね? pythonのようですので print document.querySelector('.btn.login-button.btn-submit.btn-small') ではどうでしょうか? ちなみに.clickは削除しているのでそれは追記してください!
Kimsehwa

2017/08/03 06:15

click onclick clik() onclick() 上記いずれを入れても 全部駄目でした。 document.querySelector('.btn.login-button.btn-submit.btn-small') の値を取れようとするとエラーとなりました。
Kimsehwa

2017/08/03 06:17

splashでは以下のようなことを実行してますが、 function main(splash, args) splash:autoload([[ function get_document_button(){ return document.querySelector('.btn.login-button.btn-submit.btn-small'); } ]]) return { button = splash:evaljs("get_document_button()") } buttonの値は取れないです。 ちなみにdocument.titleはとれます エラー名はこれです Error happened while executing Lua script 'main' returned bad result. Lua function objects are not allowed.
MasakazuFukami

2017/08/03 06:43

んーーーちょっとこれ以上は難しいです。 僕のローカルにscrapyの環境を整えようとも思ったのですが、いかんせんpython系は疎くて。。。 この質問のタグにpythonを追加するのが良いと思います。 お力になれずスイマセン。
guest

0

splash:runjs の使用方法はわかりませんが、そもそもの要素の取得方法が間違っているのではないでしょうか?
問題の要素を取得するには

javascript

1 document.getElementsByClassName('btn login-button btn-submit btn-small')[0]

もしくは

javascript

1document.forms[ 0 ].getElementsByClassName('btn login-button btn-submit btn-small')[0]

「getElementsByClassName」はElementsと「s」が入ります。
戻り値もHTMLコレクションという配列のようなものが戻ってきますので、取得するには添字が必要です。

投稿2017/08/03 10:13

OsCh

総合スコア111

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

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

0

ボタンタグにidをふって、getElementByIdでボタンを特定するのはどうでしょうか?

<form class="login-form"> <button id="login-btn" class="btn login-button btn-submit btn-small" type="submit" autocomplete="off" tabindex="0" data- reactid="25"><!-- react-text: 26 -->ログイン<!-- /react-text --></button> </form>
document.getElementById('login-btn').click();

MDN

投稿2017/08/03 08:01

編集2017/08/03 08:03
kaoru3151

総合スコア50

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問