scraper.py реализует Selenium fallback для скрапинга Fansly чатов когда GraphQL API недоступен или token invalid.
Получает список новых сообщений из чатов.
Возвращает:
[
{'fan': 'message text', 'chat_id': 'chat_id_123'},
...
]Пример использования:
from scraper import poll_chats
# С driver (после логина)
messages = poll_chats(driver)
print(f"Found {len(messages)} messages")
# Без driver (создает новый, требует логин)
messages = poll_chats()Основной класс для Selenium скрапинга.
login(email, password)- Логин через Seleniumnavigate_to_messages()- Переход на страницу сообщенийpoll_chats(driver=None)- Получение сообщенийsend_reply(chat_id, reply_text)- Отправка ответаstart_polling(callback, interval=30)- Непрерывный polling
Автоматический fallback при invalid token:
from scraper import create_scraper_with_fallback
from auth import FanslyAuth
auth = FanslyAuth()
token = auth.get_token('email@example.com', 'password')
# Если token invalid, автоматически создается Selenium scraper
scraper = create_scraper_with_fallback(
auth_instance=auth,
email='email@example.com',
password='password'
)MessageScraper автоматически использует Selenium fallback:
from bot import MessageScraper, ChatBot
from auth import FanslyAuth
auth = FanslyAuth()
# ... логин ...
# MessageScraper автоматически переключится на Selenium при ошибках API
scraper = MessageScraper(
auth_session=auth.session,
auth_instance=auth,
email='email@example.com',
password='password'
)
# ChatBot также поддерживает fallback
bot = ChatBot(
auth_session=auth.session,
auth_instance=auth,
email='email@example.com',
password='password'
)Селекторы могут потребовать обновления через DevTools:
SELECTORS = {
'email_input': 'input[type="email"]',
'password_input': 'input[type="password"]',
'login_button': 'button[type="submit"]',
'chat_items': '.chat-item',
'message_text': '.message-text',
'reply_input': 'textarea[placeholder*="reply"]',
'send_button': 'button:contains("Send")',
'chat_id_attr': 'data-chat-id'
}- Headless режим - работает без видимого браузера
- Random delays - имитация человеческого поведения (1-3 секунды)
- Error handling - обработка NoSuchElementException, TimeoutException
- Anti-detection - скрытие автоматизации
- Автоматический fallback - переключение при ошибках API
# Простой тест
python -c "from scraper import poll_chats; print(poll_chats())"
# Полный тест
python test_scraper.pypip install selenium webdriver-managerfrom scraper import FanslySeleniumScraper
# Создание scraper
scraper = FanslySeleniumScraper(headless=True)
# Логин
if scraper.login('email@example.com', 'password'):
# Переход на страницу сообщений
scraper.navigate_to_messages()
# Polling каждые 30 секунд
def handle_messages(messages):
for msg in messages:
print(f"Chat {msg['chat_id']}: {msg['fan']}")
# Отправка ответа
scraper.send_reply(msg['chat_id'], "Thanks for your message!")
scraper.start_polling(callback=handle_messages, interval=30)
else:
print("Login failed")- Selenium Python Tutorial 2025 (BrowserStack guide)
- GitHub chatgpt_selenium_automation (adapted for Fansly)