Есть ли способ подключиться к кошельку Phantom во время просмотра веб-страниц с помощью JavaScript и Puppeteer?
Есть ли способ при работе с интерактивным окном подключиться к криптокошельку, такому как Phantom (необходим блокчейн Solana)? Я пытался найти кнопку, нажать «подключить кошелек», но расширение Chrome не всплывает в интерактивном окне, как в обычном браузере.
1 ответ
Похоже, у вас уже есть кукловод, загружающий расширение Chrome, но если это не так. Вы захотите добавить аргументы следующим образом:
const browser = await puppeteer.launch({
headless: false,
devtools,
args: [
'--disable-extensions-except=./replacer-chrome-extension',
'--load-extension=./replacer-chrome-extension',
],
...(slowMo && { slowMo }),
});
Шаг 2: Найдите идентификатор расширения. У вас была правильная идея попытаться найти элемент, но расширение представляет собой другое дерево DOM, поэтому мы хотим загрузить расширение в новую вкладку, ссылаясь на
chrome-extension://
namespace для доступа к этим ресурсам.
const extensionTarget = targets.find(target => target.type() === 'service_worker');
const partialExtensionUrl = extensionTarget._targetInfo.url || '';
const [, , extensionID] = partialExtensionUrl.split('/');
Как получить идентификатор расширения для расширения Manifest V2?Как получить идентификатор расширения для расширения Manifest V2?const PAGE_TITLE = 'Расширение заменителя текста'; константные цели = ожидание browser.targets();extensionTarget = target.find(({ _targetInfo }) => _targetInfo.title === PAGE_TITLE);const partialExtensionUrl = extensionTarget._targetInfo.url || '';
Как только мы определяем идентификатор, мы загружаем расширение во вкладку и, как и в случае с приложением, получаем ссылку на страницу и возвращаем ее.
const extPage = await browser.newPage();
const extensionUrl = `chrome-extension://${extensionId}/popup.html`;
await extPage.goto(extensionUrl, { waitUntil: 'load' });
return {
appPage,
browser,
extensionUrl,
extPage,
};
Источник: https://tweak-extension.com/blog/complete-guide-test-chrome-extension-puppeteer/