у вас не получиться сделать скриншот средставми JS, если iframe это внешний источник обращение к frame доступно только через postMessage в обоих направлениях.
Для локальных фреймов которые созданы родительским окном можно использовать все что угодно.
так работает например vpaid реклама на yootube и на милионах других сайтах.
Решение только использовать web-driver который запускает реальный браузер через selenium это chrome или firefox
на nodejs можно использовать безголовый-хром в лоб, на пхп уже не вспомню как запускать шайтан машину.
можно воспользоваться готовой библиотекой требует php8.1
посути это обертка вокруг безголового хрома.
https://github.com/spatie/browsershot