Как выполнить действие с динамическими элементами на веб-странице - PullRequest
0 голосов
/ 10 июля 2019

] 1 Я пытаюсь автоматизировать просмотр историй на популярном сайте социальной сети. Какой самый простой способ нажать на историю каждого последователя?

   while True:
      time.sleep(3)
      WebDriverWait(driver, AWAIT_PRESENCE).until(EC.presence_of_element_located((By.XPATH, TARGET_FOLLOWERS_STORIES)))
      stories = driver.find_elements_by_xpath(TARGET_FOLLOWERS_STORIES)
      for story in stories:
          time.sleep(3)
          driver.execute_script("arguments[0].scrollIntoView();", story )
          driver.execute_script("arguments[0].click()", story)
          time.sleep(2)
          while True:
              try:
                  next_btn = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, TARGET_STORIES_NEXT)))
                  driver.execute_script("arguments[0].click()", next_btn)
                  time.sleep(1)
              except:
                  break

1 Ответ

0 голосов
/ 10 июля 2019

Как и при нажатии на любой элемент в списке, ссылка на элементы будет обновлена, и селен не может найти элементы из старого списка. Вот почему вы получаете staleElementException. Вам просто нужно немного подправить код, чтобы решить эту проблему. Всегда получайте количество историй и просматривайте истории, используя xpath с индексом [index] .

while True:
      time.sleep(3)
      WebDriverWait(driver, AWAIT_PRESENCE).until(EC.presence_of_element_located((By.XPATH, TARGET_FOLLOWERS_STORIES)))
      stories = driver.find_elements_by_xpath(TARGET_FOLLOWERS_STORIES)
      for storyNumber in range(len(stories)): #<== updated this line
          time.sleep(3)
          story = driver.find_element_by_xpath(TARGET_FOLLOWERS_STORIES + "[" +str(storyNumber+1) + "]") #<== updated this line
          driver.execute_script("arguments[0].scrollIntoView();", story )
          driver.execute_script("arguments[0].click()", story)
          time.sleep(2)
          while True:
              try:
                  next_btn = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, TARGET_STORIES_NEXT)))
                  driver.execute_script("arguments[0].click()", next_btn)
                  time.sleep(1)
              except:
                  break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...