Як підключити 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")
Останній шматок коду який для 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()
Чекаємо 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.
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.
І чекаємо 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()
Клацаєм "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()
secret_phrase="secret phrase" wallet_password="wallet password"
Сюди треба вставити фразу та пароль.
На цьому все.
Всім удачі!
Підготовлено каналом: https://t.me/cryptopidval