🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

JavaScript

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

Python

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

selenium

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

Q&A

1回答

2121閲覧

seleniumとかで、 https://xxxxxx.jssps?im_mark=xxx&im_from=xxとなっているページの要素をクリックしたい。jssp? javascript?

Aki1000

総合スコア78

Python 3.x

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

JavaScript

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

Python

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

selenium

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

0グッド

0クリップ

投稿2021/02/17 08:22

表題の通り、 https://xxxxxx.jssps?im_mark=xxx&im_from=xxというふうになっているページの要素をクリックしたりしたい。

普通に
driver.find_element_by_xpathとかdriver.find_element_by_nameとかやっても、要素を見つけてくれない。

javascriptなるもので動いているからなのでしょう……。

こういうjavascript?のページを操作する方法はないのでしょうか?
ボタンをクリックしたり、テキストボックスにテキストを送ったりしたいのですが……。

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

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

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

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

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

t_obara

2021/02/17 10:19

xpathとかはどのように指定したのですか?そもそもxpathはどのようなものか理解されていますか?
Aki1000

2021/02/18 10:16

chromeで目的の要素のところで右クリックして要素の検証をして、出てきたものに対してCopy Xpathとして取り出しています。いつも、これで出てきた物にdriver.find_element_by_xpath('コピーしたxpath').click()とかsend_key("aaaa")とかすると、出来るのですが、このホームページだと同じ手法でコピーしたxpathでdriverが見付けられないみたいで……。同様にchromeからcopy elementで抽出した要素に入っていたnameとかでdriver.find_element_by_nameとかやっても見つからないです。
guest

回答1

0

javascriptなるもので動いているからなのでしょう……。

Selenium を使っているのであれば、JavaScriptの結果は反映されています。
ただ、

javascriptなるもので動いているからなのでしょう……。

というレベルでスクレイピングをするのは力不足なので、
・HTML
・JavaScript
・XPathもしくはCSSの要素指定方法
を学んでからにしましょう。

driver.find_element_by_xpathとかdriver.find_element_by_nameとかやっても、要素を見つけてくれない。

の原因は、
・要素の指定を間違っている
・iframeの中に目的要素がある
のどちらかです。

投稿2021/02/17 10:32

otn

総合スコア85890

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

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

Aki1000

2021/02/18 10:10

ありがとうございます! 知りたかった事はそういう事で、拡張子がHTMLで中身がHTMLタグの一般的なページからタグを探し出すのは出来るけど、その手の変な拡張子(javascript?)にSeleniumが対応出来ているのかな? と。 駄目ならSelenium以外に方法があるかな、と。 iframeについてなのですが、chromeからそのページを見てソースを表示としても見られない。IEからだとソースが見られるのだけど、その中にiframeなる記述はないのですが、iframe使って切り替えてる場合、ソースにiframeという単語入っていますか?
otn

2021/02/18 10:19

ブラウザなどHTTPクライアントからすると、URLの文字列にあまり意味は無いです。 URLのパス部分の拡張子が何であれ、 Content-Type: text/html というヘッダが付いてればHTMLなので、ブラウザはそのHTMLを解釈して表示できます。 逆に、https://~~/aa.html というURLであっても、 Content-Type: image/jpeg というヘッダが付いていれば画像ファイルです。 > iframe使って切り替えてる場合、ソースにiframeという単語入っていますか? 入ってます。JavaScriptで動的にiframeタグを追加してない限りですが。
Aki1000

2021/02/18 11:27

IEから見たソースにはContent-Typeという記述はないですねぇ。 ソースの冒頭は、 <html> <head> <base href="https://workflow.xxxxxx.jp/" target="_self"> <!-- xml2html Ver7.2.0 Build 7.2.0 --> と始まって、以下 <script type="text/javascript" src="https://workflow.xxxxxx.jp/cs_js/im_json.js"></script> <script type="text/javascript" src="https://workflow.xxxxxx.jp/cs_js/im_a_request.js"> とか var serverLogic = new Object(); serverLogic["getClaimPath"] = function(){var argsArray = new Array();for(var idx = 0, max = serverLogic.getClaimPath.arguments.length; idx < max; idx++){argsArray[idx] = serverLogic.getClaimPath.arguments[idx]}return ImJsspRpc.sendJsspRpcRequest("/straform(2f)common(2f)server(5f)logic.jssprpc?im_mark=x-xxxxxxxny&im_func=getClaimPath&im_from=straform(2f)view(2f)parts(2f)view", argsArray, null, null, "post" );}; みたいな記述が並んでいて。 ソースの下の方に目的の一つであるテキストボックスの記述 <INPUT name="NUM" type="text" class="NUM" onblur="checkValueType2(4194220, this, 20, 0, null, null, null, null);" id="NUM"> はあるのですが……、driver.find_element_by_name("NUM")とやっても、要素を発見出来ない……
otn

2021/02/18 11:53

> IEから見たソースにはContent-Typeという記述はないですねぇ。 ヘッダの話なので、HTMLソースの外です。 > <INPUT name="NUM" type="text" > はあるのですが……、driver.find_element_by_name("NUM")とやっても、要素を発見出来ない…… プログラムの他の部分が間違っているのかも知れませんね。
otn

2021/02/19 01:57

引用符がおかしい。一重引用符と二重引用符が両方付いてます。
Aki1000

2021/02/19 04:21

あ、すいません、ここに書き込み時にミスりました。一重引用符だけですが、time outは起こります。
otn

2021/02/19 05:27

ブラウザを手動で使うとタイムアウトしないのでしょうか?
Aki1000

2021/02/19 08:03 編集

ブラウザでURL打ち込む分には問題無いです。 from selenium.common.exceptions import TimeoutException driver.set_page_load_timeout(2) として、 try無しでdriver.get(url)をするとTimed out waiting for page to load.になります。 from selenium.common.exceptions import TimeoutException driver.set_page_load_timeout(2) という記述を無しにするとdriver.get(url)はtry無しで出来るようになるのですが、 driver.find_element_by_class_name("login").click() という指定について、ずって待っていて何も起きません。 from selenium.common.exceptions import TimeoutException driver.set_page_load_timeout(2) try:   driver.find_element_by_class_name("login").click() except TimeoutException:  pass   でクリックするようになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問