waitしたい時に直接idやclassで指定できないDOMでも指定する方法
あるDOMをクリックするとこんなDOMに遷移する。
test.html
<ul id="hogehoge" class="fugafuga">
<li class="hoge fuga">...</li>
<li class="hoge fuga">...</li>
<li class="hoge fuga">...</li>
<li class="hoge fuga">...</li>
</ul>
このliタグはクリックすると別のページに遷移する。
3番目のliタグをクリックして遷移したかった。
test.py
driver.find_element_by_id('hogehoge').find_elements_by_class_name('hoge')[2].click()
これはいい。ただ1つ問題が。
冒頭に書いた通り別のところから遷移してきてこのDOMにくるのだが、
処理が速すぎてNoSuchElementExceptionを喰らうことがあった。
test.py
time.sleep(5)
driver.find_element_by_id('hogehoge').find_elements_by_class_name('hoge')[2].click()
これは確実なやり方だが時間を待ちすぎてしまう。
なのでwaitを使いたかったのだが、
test.py
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CLASS_NAME, 'XXXXXXXXXXXXXX')))
driver.find_element_by_id('hogehoge').find_elements_by_class_name('hoge')[2].click()
このXXXXXXXXXXXXXXに何をぶっこむべきかが分からない。
teratail先生に伺ったところCSSセレクタを使えとのこと。
test.py
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.fugafuga li:nth-child(3)')))
driver.find_element_by_id('hogehoge').find_elements_by_class_name('hoge')[2].click()
やはりteratailは神。
そして一度CSSをちゃんと勉強しようと思った。
Author And Source
この問題について(waitしたい時に直接idやclassで指定できないDOMでも指定する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/shirai116/items/d03e9184748b518b8cbb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .