QWOP の Chrome で Selenium を使用すると
NoSuchElementException
問題
Selenium を使用して QWOP を再生しようとするとChrome では、次のエラーが発生します:
selenium.common.Exceptions.NoSuchElementException: <br>メッセージ: そのような要素はありません: 見つかりませんelement<br>{"method":"id","selector":"window1"<br>
分析
エラー「NoSuchElementException」は、Selenium WebDriver が指定された要素で識別される要素を見つけることができないことを示しますセレクター、この場合は「window1」キャンバス要素です。これは、次のようなさまざまな理由で発生する可能性があります。
- ロケーター戦略が正しくないか曖昧である
- 要素が表示されていないかビューポート内にない
- 要素は存在するが CSS によって非表示になっている (例: 、 "display: none")
- 内にネストされた要素iFrame
- 要素が HTML DOM にまだ存在していないか、インタラクティブではありません
解決策
この問題を解決するには、次のアプローチを検討してください。 :
-
正しいことを確認してくださいロケーター戦略: 「id」ロケーターが一意であり、目的のキャンバス要素を正確にターゲットにしていることを確認します。開発者ツール (Ctrl Shift I) を使用して要素を検査し、その属性を取得します。
-
ハンドルの非表示または位置: キャンバス要素が CSS スタイルにより非表示になっているか、外側に配置されているかを確認します。ページの表示領域。 JavaScript の「scrollIntoView()」メソッドを使用して要素をスクロールして表示します。
-
iFrame に切り替え: Canvas 要素が iFrame 内にある場合は、「」を使用して Selenium WebDriver のコンテキストを iFrame に切り替えます。 driver.switch_to.frame()".
-
雇用暗黙的/明示的な待機: 暗黙的または明示的な待機を誘発して、キャンバス要素が DOM 内に存在またはインタラクティブになるようにします。この手法は、特定の条件が満たされるまで WebDriver を一時停止します。
-
一意の識別: 同じ識別子を持つ複数の要素が存在する場合、より具体的なロケーターを使用して、目的のキャンバス要素を一意に識別します。
この用途に固有Case
この例では、「id」ロケーターは Canvas 要素に対して一意ではありません。キャンバスをクリックするには、次のコードを使用してキャンバスをクリック可能になるまで待ちます:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']"))).click()<br>
以上がQWOP ゲームの Canvas 要素を操作するときに Selenium が NoSuchElementException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。