添加or-publickey模块以生成助记词,并更新相关文档和处理函数以支持新功能。
This commit is contained in:
parent
d83e81efcc
commit
e128c47493
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ __pycache__/*.pyc
|
||||
chrome_user_data/*
|
||||
modules/__pycache__/*.pyc
|
||||
data/o-address.csv
|
||||
data/or_publickey.csv
|
||||
|
||||
10
main.py
10
main.py
@ -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 已经做了限制
|
||||
|
||||
@ -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 实例。
|
||||
|
||||
83
modules/or_publickey_handler.py
Normal file
83
modules/or_publickey_handler.py
Normal 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")
|
||||
|
||||
27
operate.md
27
operate.md
@ -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. 脚本将使用您手动打开的浏览器执行任务。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user