May 18, 2022

Як підключити Phantom Wallet через Selenium

from selenium import webdriver
from time import sleep
import config

Для початку імортнемо ліби: selenium, time та config.

Остання ліба це файл який вам треба створити "config.py", в ньому буде секретна фраза від гаманця та пароль який на нього поставиться.

З time ми імпортуємо sleep це штука яка просто нічого не робить(спить) певну кількість секунд.

Як додати розширення?

В фаєрфоксі трохи все інакше тому ось стаття.

Для хрома ось так.
Для початку треба отримати файл розширення на цьому сайті вставляєте посилання на розширення в chrome webstore.
Оце Phantom який ми будемо використовувати.
Файл crx який ми скачали кидаємо в папку з прогою.
Ось код:

EXTENSION_PATH = 'extension_22_4_26_0.crx'
opt = webdriver.ChromeOptions()
opt.add_extension(EXTENSION_PATH)
driver = webdriver.Chrome(chrome_options=opt)

Цей код бере наше розширення(ім'я файлу ставите своє) і підключає його.

driver.get("chrome-extension://bfnaelmomeimhlpmgjnjophhpkkoljpa/onboarding.html")
Головна сторінка Phantom.

Останній шматок коду який для chrome та firefox різний.
Він відкриває головну сторінку Phantom.
Оці букви ви берете з посилання розширення https://chrome.google.com/webstore/detail/phantom/bfnaelmomeimhlpmgjnjophhpkkoljpa

driver.switch_to.window(driver.window_handles[-1])
sleep(3)

Переключаємось на вкладку яку ми відкрили, а також чекаємо 3 секунди щоб все підвантажилось.

driver.find_elements_by_tag_name("button")[1].click()
sleep(3)

Клацаємо на другу кнопку яка відповідає за імпорт гаманця. І знову чекаємо)))

for i,j in enumerate(config.secret_phrase.split()):

for цикл тут в i індекси, а в j слова фрази.
Наступні рядки будуть в for циклі!

driver.execute_script("arguments[0].setAttribute('type',arguments[1])",driver.find_element_by_id(f"word_{i}"), "password")

Тут використовується execute_script він ставить атрибут type для інпут password.
Завдяки find ми беремо елемент куди ми вставимо слова фрази.
Отже тепер коли ми вставимо туди фразу її не буде видно що добре.

driver.find_element_by_id(f"word_{i}").send_keys(j)
Поля для вводу сід фрази.

Вставляємо слово фрази.
UPD станом на 01.03.2023 тут треба трохи змінити останні два рядки на:

driver.execute_script("arguments[0].setAttribute('type',arguments[1])",driver.find_element(By.XPATH , f"/html/body/div/main/div[2]/form/div/div[2]/div[{i+1}]/input"), "password")
driver.find_element(By.XPATH , f"/html/body/div/main/div[2]/form/div/div[2]/div[{i+1}]/input").send_keys(j)

Тепер рядки вже не в for циклі!

sleep(3)
driver.find_elements_by_tag_name("button")[0].click()
Кнопка Import Wallet.

Чекаємо 3 секунди і клацаємо на кнопку import wallet.

while True:
  if "Import Selected Accounts" in driver.page_source:break
  else:sleep(1)

Якщо з'явилось Import Selected Accounts а отже сторінка підвантажилась виходимо із циклу.
Якщо ні, то чекаєм секунду.

sleep(3)
driver.find_elements_by_tag_name("button")[0].click()
Кнопка Import Selected Accounts.

Клацаємо на кнопку Import Selected Accounts.

while True:
    try:
        driver.find_element_by_name("password")
    except:sleep(1)
    else:break

В цьому циклі ми шукаємо елемент з атрибутом name="password" якщо він є то виходимо з циклу, якщо ні, то чекаєму 1 сеукунду.

driver.find_element_by_name("password").send_keys(config.wallet_password)
driver.find_element_by_name("confirmPassword").send_keys(config.wallet_password)
Поля ля паролів.

Тут ми пишемо та підтверджуємо пароль.

driver.find_elements_by_tag_name("input")[2].click()
sleep(1)
Кнопка підтвердження Terms of Service.

Клацаємо на підтвердження Terms of Service.
І чекаємо 1 секунду.

driver.find_elements_by_tag_name("button")[0].click()
sleep(1)
Кнопка Continue.

Клацаємо на кнопу "Continue".

driver.find_elements_by_tag_name("button")[-1].click()
sleep(1)
driver.find_elements_by_tag_name("button")[-1].click()
Кнопка Continue.
Кнопка Finish.

Клацаєм "Continue" знову.
Чекаєм 1 секунду.
І клацаємо "Finish".
Фінальний main.py:

from selenium import webdriver
from time import sleep
import config
EXTENSION_PATH = 'extension_22_4_26_0.crx'
opt = webdriver.ChromeOptions()
opt.add_extension(EXTENSION_PATH)
driver = webdriver.Chrome(chrome_options=opt)
driver.get("chrome-extension://bfnaelmomeimhlpmgjnjophhpkkoljpa/onboarding.html")
driver.switch_to.window(driver.window_handles[-1])
sleep(3)
driver.find_elements_by_tag_name("button")[1].click()
sleep(3)
for i,j in enumerate(config.secret_phrase.split()):
    driver.execute_script("arguments[0].setAttribute('type',arguments[1])",driver.find_element_by_id(f"word_{i}"), "password")
    driver.find_element_by_id(f"word_{i}").send_keys(j)
sleep(3)
driver.find_elements_by_tag_name("button")[0].click()
while True:
    if "Import Selected Accounts" in driver.page_source:break
    else:sleep(1)
sleep(3)
driver.find_elements_by_tag_name("button")[0].click()
while True:
    try:
        driver.find_element_by_name("password")
    except:sleep(1)
    else:break
driver.find_element_by_name("password").send_keys(config.wallet_password)
driver.find_element_by_name("confirmPassword").send_keys(config.wallet_password)
driver.find_elements_by_tag_name("input")[2].click()
sleep(1)
driver.find_elements_by_tag_name("button")[0].click()
sleep(1)
driver.find_elements_by_tag_name("button")[-1].click()
sleep(1)
driver.find_elements_by_tag_name("button")[-1].click()

config.py:

secret_phrase="secret phrase"
wallet_password="wallet password"

Сюди треба вставити фразу та пароль.

На цьому все.
Всім удачі!
Підготовлено каналом: https://t.me/cryptopidval