Я пытаюсь 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()