Python Selenium: исключение StaleElementReference при прокрутке страницы социальной сети с сообщениями - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь go вернуться назад, насколько я могу, в истории твитов учетной записи в Твиттере (технической учетной записи блоггера, которую я хотел бы прочитать с момента ее создания).

Для этого у меня есть два варианта:

- купить доступ к API поиска из Twitter (НЕТ !!)

- использовать Selenium и прокручивать вниз твиты этого аккаунта и соберите сообщения в файл, прочитайте их позже

Я прочитал это Исключение StaleElementReference в PageFactory

Ниже приведен код. Моя проблема в том, что я получаю исключение StaleElementReference, которое, как я понимаю, связано с изменением страницы (refre sh).

Поскольку я прокручиваю вниз, я не уверен, как я могу предотвратить это. Любые предложения о том, как я могу улучшить код, все еще достигая того, что я хочу?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome('c:/Utils/ChromeDriver/chromedriver.exe')
driver.get("https://twitter.com/realpython/with_replies")
driver.implicitly_wait(0) 

time.sleep(10)  #wait for the chrome window to show up

SCROLL_PAUSE_TIME = 1.5
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
tweets=[]
tweets_file=open("tweets.txt",'a',encoding="utf-8")
while True:
    # Scroll down to bottom
    if i==0:
        SCROLL_PAUSE_TIME = 3  # give it more time in the first iteration

    else:
        SCROLL_PAUSE_TIME = 1
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    elements=driver.find_elements_by_tag_name("article")
    for element in elements:
        tweets_file.write(element.text)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height


tweets_file.close()

1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте увеличить время сна при паузе прокрутки

SCROLL_PAUSE_TIME = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...