Вот код, с которым я работаю:
Код: Выделить всё
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
from datetime import datetime, timezone
class TwitterScraper:
def __init__(self, username, max_scrolls=10):
self.username = username
self.max_scrolls = max_scrolls
# Set start time to timezone-aware datetime
self.start_time = datetime.now(timezone.utc)
options = webdriver.ChromeOptions()
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
self.driver = webdriver.Chrome(options=options)
self.url = f'https://twitter.com/{username}'
self.last_tweet_time = None
def start(self):
self.driver.get(self.url)
scroll_attempts = 0
while scroll_attempts < self.max_scrolls:
try:
WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "article"))
)
tweets = self.driver.find_elements(By.CSS_SELECTOR, "article")
for tweet in tweets:
timestamp_element = tweet.find_element(By.TAG_NAME, "time")
tweet_time = datetime.fromisoformat(timestamp_element.get_attribute("datetime"))
# Ensure tweet_time is timezone-aware
if tweet_time.tzinfo is None:
tweet_time = tweet_time.replace(tzinfo=timezone.utc)
else:
tweet_time = tweet_time.astimezone(timezone.utc)
if tweet_time > self.start_time:
tweet_text = tweet.text
print("New Tweet Detected:")
print(tweet_text)
# Save to CSV
df = pd.DataFrame([{ "text": tweet_text, "time": tweet_time }])
df.to_csv('latest_tweet.csv', mode='a', header=False, index=False)
print("Latest tweet saved to latest_tweet.csv")
# Scroll down
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
scroll_attempts += 1
except Exception as e:
print(f"Error: {e}")
scroll_attempts += 1
self.driver.quit()
if __name__ == "__main__":
scraper = TwitterScraper("FabrizioRomano", max_scrolls=20)
scraper.start()
Когда я запускаю сценарий, браузер Chrome открывается, но закрывается через несколько секунд, не печатая и не обнаруживая никаких твитов. Я планирую переключиться на безголовый режим позже, но сейчас мне просто нужно, чтобы основные функции работали. Вывод пуст.
Я подозреваю, что проблема связана либо с:
Как обнаруживаются твиты (возможно, селекторы статей или времени неверны или не найден).
Логика прокрутки или сравнение start_time.
Будем признательны за любые указания о том, почему браузер закрывается так быстро без очистки твитов и опубликован ли подход к обнаружению твитов после запуска скрипта это правильно.
Подробнее здесь: https://stackoverflow.com/questions/793 ... new-tweets