zhiyun-autoweb/modules/or_publickey_handler.py

83 lines
3.5 KiB
Python

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
def generate_public_key(driver: WebDriver):
"""
访问 https://bls-keygen.com/,生成新的主密钥,并提取助记词。
:param driver: Selenium WebDriver 实例
"""
url = "https://bls-keygen.com/"
print(f"正在访问: {url} ...")
driver.get(url)
try:
# 1. 等待并点击 "Generate New Master Key" 按钮
print("正在查找并点击 'Generate New Master Key' 按钮...")
generate_button = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Generate New Master Key')]"))
)
# 使用 JavaScript 点击以增加稳定性,避免普通点击被拦截
driver.execute_script("arguments[0].click();", generate_button)
# 2. 等待新页面加载并找到助记词元素
# 使用 XPath 定位到标题为 "Mnemonic" 的 <p> 标签,然后获取其后面的兄弟 <p> 标签,内容就在里面
print("正在等待新页面加载并提取助记词...")
mnemonic_element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/span/div[2]/div/div/div/div/div"))
)
mnemonic_phrase = mnemonic_element.text.split("\n")[1].strip()
# 3. 点击下一步按钮
next_button = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Next')]"))
)
driver.execute_script("arguments[0].click();", next_button)
# 4.输入助记词
input_element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/span/div[2]/div/div/div/div/div[1]/textarea"))
)
input_element.send_keys(mnemonic_phrase)
# 5. 点击下一步按钮
next_button = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Next')]"))
)
driver.execute_script("arguments[0].click();", next_button)
# 6. 找到两个公钥
master_public_key_element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/span/div[2]/div/div/div/div/div[1]/div[2]"))
)
master_public_key = master_public_key_element.text
valid_public_key_element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/span/div[2]/div/div/div/div/div[3]"))
)
valid_public_key = valid_public_key_element.text.split("\n")[1].strip()
return({"mnemonic_phrase": mnemonic_phrase, "master_public_key": master_public_key, "valid_public_key": valid_public_key})
except Exception as e:
print(f"❌ 在执行过程中发生错误: {e}")
print("请检查网页结构是否发生变化,或网络连接是否正常。")
def generate_or_address(driver: WebDriver, args):
print(f"开始生成{args.cnt}个地址")
key_infos = []
for i in range(args.cnt):
key_info = generate_public_key(driver)
key_infos.append(key_info)
# 将key_infos写入csv文件
df = pd.DataFrame(key_infos)
df.to_csv("data/or_publickey.csv", index=False)
print(f"已将{args.cnt}个地址写入data/or_publickey.csv")