1

I want to connect metamask to this site https://sendit.arcana.network/app/login via WalletConnect. i'm using selenium and i can't click on the metamask icon because there's a DOM in the DOM. So I want to know how I can connect the wallet through the link that WalletConnect provides

link from WalletConnect: wc:5f83a3ccbac958c359d6d176df0cd3ee506fb1a849246688ffc6cc9ca399026c@2?relay-protocol=irn&symKey=00b35938bf6b10e8a11cd2efc6df4c24bfc50f5f297f6031d85fef6e3eaf26a1

My code:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from multiprocessing import Pool
from utils import proxy_utils
from seleniumwire import webdriver
import config

from fake_useragent import UserAgent


def main(thread):
    while True:
        try:
            def expand_shadow_element(element):
                shadow_root = driver.execute_script(f'return arguments[0].shadowRoot', element)
                return shadow_root
      
            # Driver Options
            options = webdriver.ChromeOptions()
            options.add_argument(f'user-agent={fake_useragent.UserAgent()}')
            options.add_extension('extensions/metamask.crx')

            options.add_argument('--disable-blink-features=AutomationControlled')
            options.add_argument('--log-level=3')
            options.add_experimental_option('excludeSwitches', ['enable-logging'])

            proxy_options = proxy_utils.proxy_options(config.use_proxys)

            s = Service('utils/chromedriver.exe')
            driver = webdriver.Chrome(service=s, seleniumwire_options=proxy_options, options=options)
            wait = WebDriverWait(driver, 30)

            driver.get("https://sendit.arcana.network/app/login")

            wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/main/main/div/div[2]/div[2]/div/section/section/section[2]/div/button')))

            driver.find_element(By.XPATH, '//*[@id="app"]/main/main/div/div[2]/div[2]/div/section/section/section[2]/div/button').click()

            root1 = driver.find_element(By.XPATH, '/html/body/w3m-modal[2]')
            shadow_root1 = expand_shadow_element(root1)

            root2 = shadow_root1.find_element(By.XPATH, '/div/div/w3m-modal-router')
            shadow_root2 = expand_shadow_element(root2[0])

        except Exception as error: print(f"Error: {error}")

        finally:
            try: driver.quit()
            except: pass

if __name__ == '__main__':
    with Pool(processes=config.threads) as pool:
        pool.map(main, range(config.threads))
Axcent
  • 13
  • 2

1 Answers1

0

This is how you can fix it.

import time
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

options = ChromeOptions()
options.add_argument("--start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])

driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 20)
driver.get(url="https://sendit.arcana.network/app/login")

# Click on the "Connect Wallet" button on the page
wait.until(EC.element_to_be_clickable((By.XPATH, '//span[text()=" Connect Wallet "]'))).click()
time.sleep(2)

# Click on the "View All" to see all wallet options
driver.execute_script(
    """document.querySelector('w3m-modal').shadowRoot.querySelector('w3m-modal-router').shadowRoot.querySelector('w3m-connect-wallet-view').shadowRoot.querySelector('w3m-desktop-wallet-selection').shadowRoot.querySelector('w3m-modal-footer').querySelector('div.w3m-grid').querySelector('w3m-view-all-wallets-button').shadowRoot.querySelector('button').click();""")

time.sleep(2)
# Click on the "MetaMask" wallet option
driver.execute_script(
"""document.querySelector('w3m-modal').shadowRoot.querySelector('w3m-modal-router').shadowRoot.querySelector('w3m-wallet-explorer-view').shadowRoot.querySelector('div.w3m-grid').querySelector('[name="MetaMask"]').shadowRoot.querySelector('button').click();""")

time.sleep(2)

Run the script:

reference:

Ajeet Verma
  • 2,938
  • 3
  • 13
  • 24