Python selenium——動的id、classはどのように位置決めします


今日は、要素が配置されていない理由である動的idを共有します.
新しいページが開かず、alertがなく、frameがなく、待ち時間が加算されていますが、要素が位置決めされませんか?ページを開くたびに、この要素のidやclassなどの要素属性が動的に生成される可能性があります.コードが実行されると、要素の属性は以前とは異なり、以前の属性値で位置決めすることは自然に位置決めできず、NoSuchElementExceptionが放出されます.
では、要素属性がダイナミックかどうかをどのように判断しますか?簡単です.一般的に要素の属性に数字がつながっているのを見ると、動的である可能性が高いです.分解するには、ブラウザをリフレッシュして要素を見ると、属性値の数字列が変わり、動的属性になります.
次のようになります.
<div id="btn-attention_2030295">...div>

このタイプの要素をどのように配置しますか?

1.その他の属性による位置決め


他の固定属性があれば、要素の他の属性に基づいて位置決めし、位置決め方法がそんなに多いのに、この木で首を吊るす必要はありません.

2.相対関係による位置決め


その近くの親ノード、子ノード、兄弟ノードの位置付けに基づいて、この方面について、ブロガーの前の文章は参考にすることができます:Python selenium--親子、兄弟、隣接ノードの位置決め方式の詳細

3.DOM順によるindex位置決め


これは簡単です.メインドキュメントまたはレベルの親ノードにある要素のindexを見つけて、indexに基づいて簡単に位置決めできますが、この方法は安定していない可能性があります.できれば、他の方法で位置決めするのが適切です.

4.要素の一部の属性に基づいて配置


xpathでは、属性値の一部を特定する3つの非常に良い方法が提供されています.
driver.find_element_by_xpath("//div[contains(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[starts-with(@id, 'btn-attention')]")
driver.find_element_by_xpath("//div[ends-with(@id, 'btn-attention')]")  #  ‘btn-attention’
contains(a, b) aに文字列bが含まれている場合はtrueを返し、そうでない場合はfalseを返すstarts-with(a, b) aが文字列bで始まる場合、trueを返します.そうでない場合、falseを返します.ends-with(a, b) aが文字列bで終わる場合、trueが返され、そうでない場合falseが返される
ここでは、さまざまなブラウザのxpathに対するサポート状況が異なり、IEのようにもう少しで終わるところだったので、あるブラウザでxpathが位置決めできるが、別のブラウザでは位置決めできないという問題が発生することがあります.驚かないでください.
このタイプの質問を添付します.
Xpath “ends-with” does not work
python seleniumの詳細については、私のCSDNコラム:Python Selenium自動化テストの詳細に注目してください.