使用selenium-python循环元素时遇到问题



我已经查看了整个Stackoverflow,试图找到这个问题的答案,但没有找到。我的代码的问题是,它点击了第一个元素,然后得到了我想要的"href",但在那之后就停止了,并抛出了类似的错误

box[x].click()

&

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

这是代码

box = driver.find_elements_by_class_name("info-section.info-primary")
x = 0
#for x in range(0, len(box)):
while True:
while x <= len(box):
#if box[x].is_displayed():
driver.implicitly_wait(2)
# error is happening here
box[x].click()
x += 1
try:
website = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "primary-btn.website-link"))
)
print(website.get_attribute('href'))
driver.back()
except:
driver.back()
if not driver.find_element_by_class_name('ajax-page'):
break
else:
driver.find_element_by_class_name('ajax-page').click()

由于定义了box,导航到另一个页面,然后再次尝试使用box变量,因此会出现StaleElementReference错误。解决这个问题的最快方法是定位没有变量的元素每个循环:

box = driver.find_elements_by_class_name("info-section.info-primary")
x = 0
#for x in range(0, len(box)):
while True:
while x <= len(box):
#if box[x].is_displayed():
driver.implicitly_wait(2)
# error is happening here
driver.find_elements_by_class_name("info-section.info-primary")[x].click()
x += 1
try:
website = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "primary-btn.website-link"))
)
print(website.get_attribute('href'))
driver.back()
except:
driver.back()
if not driver.find_element_by_class_name('ajax-page'):
break
else:
driver.find_element_by_class_name('ajax-page').click()

最新更新