Rapaz, eu não sou a pessoa mais indicada para ajudá-lo, pois não sou desenvolvedor. No entanto, posso compartilhar a pesquisa que fiz ontem à noite.
Eu consegui rodar no modo headless, pois pesquisando, encontrei o framework SeleniumBase, que funcionou perfeitamente no modo headless.
Você pode encontrar o código no GitHub: link para o repositório.
O SeleniumBase também possui o modo undetected (UC), que ajuda a evitar a detecção de automação em sites.
Ele oferece várias funcionalidades. Aqui está a documentação: Documentação do SeleniumBase.
O código não está perfeito; deve haver parâmetros em excesso, pois eu peguei a documentação, testei a navegação de página e depois pedi para o ChatGPT refatorar usando o SeleniumBase.
Já testei várias vezes e ele rodou perfeitamente no modo headless no Chrome. Porém, aqui na empresa, estou usando Windows e não Linux.
Você me fez fazer algo que não fazia há séculos, que é olhar documentação.
Eu aconselho rodar o Selenium de forma convencional para capturar a mensagem de captcha e testar no código do SeleniumBase, assim você consegue identificar quando ele dá erro inválido de captcha e pode rodar o código novamente. O PNCP às vezes apresenta esse erro.
A documentação diz que o SeleniumBase espera automaticamente os elementos, mas para mim, aqui, não funcionou. Continuei a usar o WebDriverWait e time.sleep. Eu diminui o tempo de espera do time.sleep, pois as mensagens atualizaram rápido.
Se o SeleniumBase não funcionar, você talvez precise buscar opções de low-level ou alguém que já esteja acostumado a fazer scraping de várias maneiras, pois já vi gente no YouTube fazendo scraping da memória do computador ao abrir a página ou utilizando ADB com emulador Android.