添加or-publickey模块以生成助记词,并更新相关文档和处理函数以支持新功能。

This commit is contained in:
wangqifan 2025-08-10 12:51:53 +08:00
parent d83e81efcc
commit e128c47493
5 changed files with 121 additions and 2 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ __pycache__/*.pyc
chrome_user_data/*
modules/__pycache__/*.pyc
data/o-address.csv
data/or_publickey.csv

10
main.py
View File

@ -3,10 +3,12 @@
import argparse
from browser_manager import get_chrome_driver
from modules.or_address_handler import process_addresses
from modules.or_publickey_handler import generate_or_address
# 模块映射
MODULES = {
"or-address": process_addresses,
"or-publickey": generate_or_address,
# 在这里可以添加更多的模块
# "another-module": another_handler_function,
}
@ -29,6 +31,12 @@ def main():
action="store_true",
help="使用此参数连接到已存在的 Chrome 调试实例。"
)
parser.add_argument(
"--cnt",
type=int,
default=1,
help="生成地址的数量。"
)
args = parser.parse_args()
# 2. 根据参数选择浏览器启动方式
@ -46,7 +54,7 @@ def main():
if handler_function:
print(f"--- 开始执行模块: {module_name} ---")
handler_function(driver)
handler_function(driver, args)
print(f"--- 模块: {module_name} 执行完毕 ---")
else:
# 这段代码理论上不会执行,因为 argparse 的 choices 已经做了限制

View File

@ -7,7 +7,7 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def process_addresses(driver):
def process_addresses(driver,args):
"""
处理 o-address.csv 文件访问 Etherscan 并更新地址信息
:param driver: Selenium WebDriver 实例

View File

@ -0,0 +1,83 @@
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[1]/div[2]"))
)
valid_public_key = valid_public_key_element.text
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")

View File

@ -33,3 +33,30 @@
python main.py --module or-address --debug
```
4. 脚本将会自动接管在步骤一中打开的浏览器,并执行后续操作。请观察命令行中的输出信息以了解程序运行状态。
## 2、or-publickey助记词生成
本业务用于访问 [https://bls-keygen.com/](https://bls-keygen.com/) 网站,自动生成并提取助记词。
### 步骤一:运行主程序
对于此任务,您可以直接运行脚本,程序会自动打开和关闭浏览器。
1. 确保您的计算机已经安装了Python环境以及本项目所需的所有依赖包。
2. 打开一个新的命令行工具,并确保当前路径位于项目根目录下。
3. 执行以下命令启动自动化脚本:
```shell
python main.py --module or-publickey
```
4. 脚本将自动执行所有步骤,并在命令行中输出获取到的助记词。
### (可选)使用调试模式运行
如果您希望观察浏览器中的操作过程,也可以使用调试模式。
1. 按照 **"1、or钱包地址转换"** 中的 **"步骤一"** 启动一个调试模式的Chrome浏览器。
2. 运行以下命令:
```shell
python main.py --module or-publickey --debug --cnt=50
```
3. 脚本将使用您手动打开的浏览器执行任务。