タグ名に「button」が含まれる要素を取得し、すべてのタグ名を取得するコードを作成していますが、うまく取得できないのでご質問させていただきます。
ChatGPTに下記の2パターンのコードを作成してもらいましたが、どちらも1つも取得できませんでした。(len(buttons)が0で出力されます)
どこが違っているかご存知の方おられましたら、ご教示お願いします。
パターン1
Python
1buttons = driver.find_elements(By.XPATH, "//button[contains(name(), 'button')]")
パターン2
Python
1buttons = driver.find_elements(By.XPATH, "//button[contains(@tag, 'button')]")
Python
1driver.get(url) 2sleep(5) 3print(location()) 4# tag名に"button"が含まれる要素をすべて取得する 5# buttons = driver.find_elements(By.XPATH, "//button[contains(@tag, 'button')]") 6buttons = driver.find_elements(By.XPATH, "//button[contains(name(), 'button')]") 7print(location(), len(buttons)) 8 9# 取得した要素を表示する 10for button in buttons: 11 print(location(), button.tag_name)
以下ChatGPTの回答です。
直接要素を取得することはできるので2と3ではないと考えています。
要素が取得できない場合、要因としてはいくつか考えられます。
- Xpath式が正しくない
- 要素がまだ読み込まれていない
- 要素が存在しない
以下の手順でトラブルシューティングをお試しください。
Xpath式が正しいことを確認してください。適切な要素を取得できるようになっているかどうかを確認するために、ブラウザの開発者ツールなどを使用してXpath式をテストすることができます。
ウェブサイトが遅い場合、要素が読み込まれるまで時間がかかる場合があります。適切なウェイトを追加して、ページが完全に読み込まれるまで待ってから要素を取得することができます。例えば、time.sleep()を使用するか、WebDriverWaitクラスを使用して、要素が表示されるまで待つことができます。
要素が存在しない場合、取得することができません。別のXpath式を使用するか、要素が存在することを確認してから再度試してください。
Python
1buttons = driver.find_elements(By.TAG_NAME, "button") 2print(len(buttons))
結果が6になりますので、6以上取得できないのは、コード側の問題と推測しています。
driver.get以降のコードをコピペします。
Python
1driver.get(url) 2sleep(10) 3buttons = driver.find_elements(By.TAG_NAME, "button") 4print(location(), len(buttons)) 5buttons = driver.find_elements(By.XPATH,"//*[contains(name(), 'button')]") 6print(location(), len(buttons))
結果はこちらになります
zsh
1('/Users/test3.py', '<module>', 186) 6 2('/Users/test3.py', '<module>', 188) 0
回答2件
あなたの回答
tips
プレビュー