
[code]

    <a href="URL" target="_blank" class="button button-color-2">新規会員登録</a>
    <a class="button">ログイン</a>
    
[/code]

ここで，

[code]

    driver.find_element_by_css_selector('.button').click()
    
[/code]


CC BY-SA 4.0
2020-06-04T23:30:00.477
67300
2022-08-10T00:01:30.137
2020-06-05T00:45:59.320
3060
40487
question
selenium
seleniumで要素取得したいが，２つ同名のものがあるため，後者を選択できない


コメントに紹介した`要素を複数指定する`とか、他にも`Pythonでスクレイピング（2）seleniumの使い方`に以下のような説明があります。

[要素を複数指定する](https://www.mittsu-
kosen.com/%E3%80%90pythonxselenium%E3%80%91web%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86%E6%93%8D%E4%BD%9C%E3%83%A1%E3%82%BD%E3%83%83/#i-12)

> **要素を複数指定する**  
>  指定された要素を複数個取得するコマンドです。  
>  取得した値はリスト形式で返されます。  
>  基本的には上で紹介したコマンドを「element」→「elements」に変えるだけです。
>
> cssセレクタで指定する
[code]

>     driver.find_elements_by_css_selector("CSS selector")
>  
[/code]

[Pythonでスクレイピング（2）seleniumの使い方](https://itstudio.co/2018/12/10/8651/)

> **複数の要素を取得**  
>  タグ名やクラス名で要素を指定すると複数の要素を取ることができます。  
>  その時は、「find_element」部分を「find_elements」として配列で取得したい要素のインデックスを指定します。
[code]

>     elem2 = browser.find_elements_by_class_name('post-content')
>     elem2[1].text
>  
[/code]

上記を応用すれば例えば以下のように出来るのでは？

[code]

    driver.find_elements_by_css_selector('.button')[1].click()
    
[/code]

* * *

他には解決済にはなっていませんが、`+1`の回答のあるこの記事とか。

[python selenium classの指定方法について](https://teratail.com/questions/108682)

> python seleniumを使ってclassを指定するときに以下のようなclassが複数あるとします。
[code]

>     <div class="hoge"></div>
>     <div class="hoge"></div>
>     <div class="hoge"></div>
>  
[/code]

>
> 例えばこのclassから二つ目のclassをクリックしたいという場合の指定の方法を教えていただけないでしょうか？
>
> こんな感じでしょうか？
[code]

>     driver.find_elements_by_css_selector(".hoge:nth-of-type(2)").click()
>  
[/code]

* * *

試してみてください。


CC BY-SA 4.0
2020-06-05T09:22:46.523
67328
2020-06-05T09:22:46.523
2020-06-17T08:14:45.997
-1
26370
67300
answer