如何使用Python中的selenium遍历不一致的组中的联系人?我尝试了这段代码,出现了这样的错误: selenium.common.exceptions.StaleElementReferenceException:消息:的元素引用已过时;元素不再附加到DOM,它不在当前框架上下文中,或者文档已刷新
问题是滚动条和联系人都在不断更新...我试过这段代码:
while True:
num=0
try:
users_list = driver.find_elements_by_css_selector("div.memberOnline-1CIh-0.member-3W1lQa")
for user in users_list:
num+=1
user.click()
driver.execute_script("arguments[0].scrollIntoView();",user)
print('User number {}'.format(num))
except StaleElementReferenceException and ElementClickInterceptedException:
print('bad')
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight",users_list)发布于 2018-06-04 09:15:07
从您给定的代码中,您只需要滚动元素,所以Stale异常的原因是您没有等待页面加载完成,或者至少没有等待联系人未加载完成。
出于调试的目的,您可以简单地在循环之前添加一个长睡眠,如sleep(15),并替换为显式等待if生产代码,如
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)here上显式等待的详细信息
如果在循环中调用click(),则需要在循环中再次查找元素:
while True:
num=0
try:
time.sleep(15)
users_list = driver
.find_elements_by_css_selector("div.memberOnline-1CIh-0.member-3W1lQa")
length = len(users_list)
for num in range(0, length):
user = users_list[num]
user.click()
time.sleep(15)
driver.execute_script("arguments[0].scrollIntoView();",user)
print('User number {}'.format(num+1))
// because the above `click` make page happen changes
// so selenium will treat it as a new page,
// those element reference found on `old` page, can not work on `new` page
// you need to find elements belongs to `old` page again on `new` page
// find users_list again from `new` page
users_list = driver
.find_elements_by_css_selector("div.memberOnline-1CIh-0.member-3W1lQa")
except StaleElementReferenceException and ElementClickInterceptedException:
print('bad')
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight",
users_list)https://stackoverflow.com/questions/50672029
复制相似问题