pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Python:Seleniumでclickできない…。

結論を先に、解決し、click実行できました。

<前説>

VSCodeをつかって、Python3.7にSelenium+Chromedriverという環境で、「driver.find_elements_by_class_name(ボタンのクラス名)」などとやっていたのですが、次の自動入力候補に「click」が表示されません。赤字で表示した「s」が余分でした。

Pythonスクリプトで自動的に「検索」「次ページ」などのボタンをクリックしたようにしたかったのです。まず、検索実行がこの記事の課題です。
HTML、CSS、id、classの説明省きますので悪しからず。

<elementsとelementは違う>

次のようなスクリプトを打ち込み、実行…うまくいかない。
目的の検索窓に検索語を入力・表示までできました。しかし、クリック・実行がスクリプトで実現できませんでした。スクリプトは次のようなものでした。

from selenium import webdriver
import time

webdriver_path=('C:\Program Files\chromedriver\chromedriver.exe')
driver = webdriver.Chrome(webdriver_path)

def searchH(word): 
    driver.get('https://pagetaka.hatenablog.jp/')
    driver.find_element_by_name('q').send_keys(word)
    time.sleep(2)
    driver.find_elements_by_class_name('search-module-button').click() #NG
    #driver.find_element_by_class_name('search-module-button').click()

searchH("Python") # def searchH に「Python」という言葉をもって行き、何か(検索実行)して頂戴

driver.close

<sをとったらできた>

英語圏の厳格さというか、elements云々だと該当する要素のリストを取得するのだそうです…。
そもそもelementsとsがついた状態で入力した後、クリックボタンのクラス名を打ち込み、行端に移動、「.」を打ち込んでも「click」が次の候補として表示されませぬ…ここで気づかないといけんのですけど…70歳がだんだん近づく爺には難関でした。

で、driver.find_elements_by_class_name('search-module-button').click() を driver.find_element_by_class_name('search-module-button').click() に変更し、このPythonスクリプトを実行したら、予定通り動いてくれました。めでたしめでたし…。

次は、「次のページ」が最下段に表示されていれば次の読み込みを行う、という「フロー制御」が課題です…。