どの言語に取り組んでいますか? xpathを使用してidタグだけでなく、任意の属性を事実上取得できるため、idの重複は問題になりません。構文は他の言語では少し異なります (Ruby 以外のものが必要な場合はお知らせください) が、次のようにします。
driver.find_element(:xpath, "//input[@id='loginid']"
xpath ロケーターを構築する方法は次のとおりです。html コードから任意の属性を選択できます。
<input id="gbqfq" class="gbqfif" type="text" value="" autocomplete="off" name="q">
たとえば、 name属性を使用して上記の HTML コード (Google の検索ボックス) で xpath を構築したいとします。xpath は次のようになります。
driver.find_element(:xpath, "//input[@name='q']"
つまり、ID が同じ場合は、利用可能な別の属性を取得するだけです!
改善:
XML ドキュメント内の順序などの脆弱な xpath ロケーター (簡単に変更される可能性があります) を回避するには、さらに堅牢なものを使用できます。1 つではなく 2 つの xpath ロケーター。これは、非常に類似した hmtl タグを扱う場合にも役立ちます。次のように、2 つの属性で要素を見つけることができます。
driver.find_element(:id, 'amount') and driver.find_element(xpath: "//input[@maxlength='50']")
または、必要に応じて純粋な xpath ワンライナーで:
//input[@id="amount" and @maxlength='50']
別の方法として (xpath が一意の要素を 1 つだけ返す場合)、抽象化レベルをもう 1 段階上げることができます。属性値を完全に省略:
//input[@id and @maxlength]