私は.click()
のWebページのポップアップリストにいくつかの要素を追加しようとしていますが、move_to_elementsを試してもStaleElementReferenceException
を取得し続けます。move_to_element(Python)を実行しようとしているときにStaleElementReferenceExceptionが発生しました
コードは、フィード内のクリック可能な要素の数に基づいています。これらの要素をクリックすると、アクセス可能なクリック可能な要素が多いポップアップボックスが表示されます。
私はアップボックスpopupbox_linksはポップアップボックスの座標とのリンクがリストされている次のコード、とポップにアクセス:
for coordinate in popupbox_links:
actions = ActionChains(driver)
actions.move_to_element(coordinate["Popupbox location"]).perform()
time.sleep(3)
popupboxpath = coordinate["Popupbox link"]
popupboxpath.click()
time.sleep(3)
これが正常に動作します。ポップアップボックスが開いているときしかし、私は次のことを実行する:
seemore = driver.find_element_by_link_text("See More")
time.sleep(2)
actions.move_to_element(seemore).perform()
time.sleep(2)
seemore.click()
time.sleep(3)
findbuttons = driver.find_elements_by_link_text("Button")
time.sleep(2)
print(findbutton)
for button in findbuttons:
time.sleep(2)
actions.move_to_element(button).perform()
time.sleep(2)
button.click()
time.sleep(randint(1, 5))
トラブルが両方と「ボタン」、「詳細を参照してください」にactions.move_to_element
から始まります。 print(findbutton)は、実際には、クリックしたい要素を含む内容のリストを返しますが、Seleniumはこれらに対してmove_to_elementを実行できません。代わりに、StaleElementReferenceException
がスローされます。
もっと混乱させるために、スクリプトは時々動作するようです。通常はクラッシュしますが。
これを解決する手掛かりはありますか?事前に大きな感謝。
私はPython 3.6上で最新のSeleniumをChrome WebDriverで実行しています。
アドバイスをいただき、ありがとうございます。 seemore = driver.find_element_by_link_text( "もっと見る") ここでは反復する要素のリストではなく、ただ1つの特定の要素です。それに移動しようとするとStaleElementを取得します。 –
あなたは根本的な原因を知る必要があります。あなたがそれを手に入れた理由です。この場合は何でもかまいません。この状態を処理するために「Explicit Wait」もあります。 –