""" Script principal para executar o spider com Selenium """ import sys import os import argparse # Adiciona o diretório raiz ao path do Python sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from tibiawiki.spiders.selenium_spider import SeleniumSpider def parse_arguments(): """ Parse argumentos da linha de comando """ parser = argparse.ArgumentParser( description='TibiaWiki Scraper - Extrai dados e imagens do TibiaWiki', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Exemplos de uso: # Modo completo (todas as categorias) python main_selenium.py # Link específico python main_selenium.py --url "https://www.tibiawiki.com.br/wiki/Espadas" # Múltiplos links via arquivo python main_selenium.py --file links.txt """ ) parser.add_argument( '--url', type=str, help='URL específica para fazer scraping (ex: --url "https://www.tibiawiki.com.br/wiki/Espadas")' ) parser.add_argument( '--file', type=str, help='Arquivo TXT com múltiplas URLs (uma por linha)' ) parser.add_argument( '--headless', action='store_true', help='Executar Chrome em modo headless (sem interface gráfica)' ) args = parser.parse_args() # Validação: apenas um modo por vez if args.url and args.file: parser.error("Erro: não é possível usar --url e --file ao mesmo tempo. Escolha apenas um.") return args def main(): """ Executa o spider com Selenium """ args = parse_arguments() print("=" * 80) print("TibiaWiki Scraper - Selenium Edition") print("=" * 80) # Determina modo de operação if args.url: print("\nModo: Link Específico") print(f"URL: {args.url}") elif args.file: print("\nModo: Arquivo de Links") print(f"Arquivo: {args.file}") else: print("\nModo: Completo (todas as categorias)") print("\nO processo pode demorar de 30min a 1h dependendo da quantidade de categorias.") print("\nEste scraper usa Selenium para contornar bloqueios anti-bot.") print("Um navegador Chrome será aberto automaticamente.") print("Aguarde...\n") # Cria spider spider = SeleniumSpider( db_path='data/tibiawiki.db', images_path='data/images', headless=args.headless ) # Executa no modo apropriado if args.url: spider.run(single_url=args.url) elif args.file: spider.run(urls_file=args.file) else: spider.run() print("\n" + "=" * 80) print("Extração concluída!") print("=" * 80) print("\nDados salvos em:") print("- Banco SQLite: data/tibiawiki.db") print("- Imagens: data/images/") print("\nPara ver os dados:") print(" sqlite3 data/tibiawiki.db") print(" .tables") print(" SELECT * FROM capacetes LIMIT 10;") print("\n") if __name__ == '__main__': try: main() except KeyboardInterrupt: print("\n\nScraping interrompido pelo usuário.") sys.exit(0) except Exception as e: print(f"\n\nErro: {e}") sys.exit(1)