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

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

ただいまの
回答率

89.20%

python seleniumでボタンを押したいです

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 585

kakini

score 21

ネットの記事でseleniumの紹介があったのでそのサイトのコードを少し変えて
下記の様なコードを作りました

from selenium import webdriver

driver = webdriver.Chrome("c:/driver/chromedriver.exe")
driver.get("http://www.yahoo.co.jp")

elem_search_word=driver.find_element_by_name("p")
elem_search_word.send_keys("ランク")

elem_search_btn = driver.find_element_by_class_name("sc-dqBHgY jxoJYO")
elem_search_btn.click()

試した所検索ボックスに文字を入れるとこまでは出来ましたが
最後の検索ボタンを押してくれる作業をしてくれません

yahooのhtmlのソースを表示させてそこから「検索ボタン」と思わしきクラス名を総当りで試してみましたが
全て下記の様なエラーメッセージが出てきます

Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\スクレイピング\chrome.py", line 9, in <module>
elem_search_btn = driver.find_element_by_class_name("sc-dqBHgY jxoJYO")
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".sc-dqBHgY jxoJYO"}
(Session info: chrome=79.0.3945.117)

翻訳した内容を要約するとそんなクラス名はありませんとの事です
クラス名自体は「検証」でhtmlソースをコピペして貼り付けてるので無いわけがないのですがこの様なエラー表示が出てきます

「検証」でhtmlソースを表示させる事自体まだ慣れてないので、調べた方法も
「検索」のボタンにカーソルを合わせてそこから画面の右側に表示されたクラス名を全て試しただけです
ちなみに試したクラス名は
・sc-gxMtzJ dDohKU
・sc-dqBHgY jxoJYO
・sc-kTUwUJ ihWmBH
・rapid-noclick-resp sc-jtRfpW gdgGoT   ←個人的にこれが一番正解だと思ったのですがこれでもダメでした

何がいけないのでしょうか?

もう一つ別のサイトでの事なんですが
https://jbbs.shitaraba.net/bbs/subject.cgi/game/45148/
このサイトの方でも上記と似たようなpythonのコードを書きました

from selenium import webdriver

driver = webdriver.Chrome("c:/driver/chromedriver.exe")
driver.get("https://jbbs.shitaraba.net/bbs/subject.cgi/game/45148/")

elem_search_word=driver.find_element_by_name("q")
elem_search_word.send_keys("ランク")

elem_search_btn = driver.find_element_by_name("q")
elem_search_btn.click()

上記と同じ様に検索ボックスに文字を入れるとこまではしますが
検索のボタンを押してくれません
ただこちらの場合はエラーが出ずにただ単に全ての処理が終わって(まだ検索ボタン押してないのに)終了しましたみたいな感じの挙動になっています

このサイトのhtmlを調べると
<form action="./" method="GET">
<input type="text" name="q" placeholder="スレッドのタイトルを入力" value="">
<input type="submit" value="検索">
</form>

この内容なのでボタンのネームはq以外にありえないはずですが何故か押されていません

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

以下のコードで押せますので、お試しください
from selenium import webdriver

driver = webdriver.Chrome("c:/driver/chromedriver.exe")
driver.get("http://www.yahoo.co.jp")

elem_search_word=driver.find_element_by_name("p")
elem_search_word.send_keys("ランク")
elem_search_btn = driver.find_element_by_class_name("rapid-noclick-resp")
elem_search_btn.click()

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/10 19:02 編集

    >> 一つ目の質問の返答
    以下のコードブラウザで実行するとわかりやすいと思います

    ```
    <html>
    <head>
    <style>
    .a1{
    color: red;
    }
    .a2{
    font-size: 50px;
    }
    </style>
    </head>
    <body>
    <div class="a1 a2">hi</div>
    <div class="a1">world</div>
    </body>
    </html>
    ```

    キャンセル

  • 2020/01/10 19:09

    >> 三つ目
    よくあるパタンは
    <input type="submit" value="buttonです">
    <button>ボタンです</button>
    でも 「ボタン」というものはマウスフォーカスする際に何らかの変化あって、クリックする際に、また押したというアニメーション効果がつけられてるもの、ボタンとして認識されれば、何でもボタンです、ややこしくてすみません

    キャンセル

  • 2020/01/10 19:21

    長時間お付き合い頂き色々教えてもらい大変参考になりました。
    本当にありがとうございました

    キャンセル

+1

二番目の質問はこれで解決します
from selenium import webdriver

driver = webdriver.Chrome("c:/driver/chromedriver.exe")
driver.get("https://jbbs.shitaraba.net/bbs/subject.cgi/game/45148/")

elem_search_word=driver.find_element_by_name("q")
elem_search_word.send_keys("ランク")
elem_search_btn = driver.find_element_by_xpath("//input[@type='submit']")
elem_search_btn.click()

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる