前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python入门与实战--ENS未注册域名批量查询

python入门与实战--ENS未注册域名批量查询

作者头像
用户9875047
发布2022-07-04 14:13:19
5.6K0
发布2022-07-04 14:13:19
举报
文章被收录于专栏:机器视觉全栈er

0. 简介

去年,我购买了域名cvtutorials.com(一口气买了10年的:p),打算在这个网站以及自己的公众号:机器视觉全栈er上输出机器视觉领域文章,跌跌撞撞已经有大半年了。

由于不可抗因素,部分地区访问网站无法显示界面,我也无能为力:p

回过头来看,我选的域名还是蛮好的嘛(厚着脸皮),cv指的是计算机视觉,后面的tutorials意思是教程,你要是问我为啥没选mvtutorials,正好和机器视觉全栈er有呼应啊?那是因为我考虑到mv还有music video之意,所以就避开了。

恰好:p,我有机会接触到了web3.0,也想给自己的网站搞个web3.0时代的域名。首先我就利用python自己写了个代码实现web3.0域名的批量查询,看看域名是否已经注册了,看看能不能捡个漏。代码(代码获取方式直接到最后)实现的主要组成部分如下:

  • • 将序列化文件作为输入生成web3.0域名(我从网上下载了英语词典里面有英语常用词汇)
  • • 使用Selinum模拟用户对浏览器进行操作
  • • 多进程技术节省未注册域名批量查询时间

1. web 3.0及ENS域名

web3.0是web2.0和区块链的结合。和web2.0不同的是,web3.0时代的数据和内容不会被少数的大型科技公司垄断,会被参与者自己掌握。

web 1.0:1991~2004

web 2.0:2004~?

web 3.0:2014~?

web3.0时代,基于以太坊开发的Dapp层出不穷。和web2.0时代用可读性好的域名代替IP地址类似,web3.0时代,用可读性好的域名去替代地址(我个人觉得这个钱包地址类似身份证是你的身份),ENS就是其中的代表性的域名服务。ENS全称是Ethereum Name Service(以太坊域名服务),是从以太坊基金会孵化出来的。

2. 序列化文件生成域名

我们打开浏览器,在地址栏中输入app.ens.domains,可以看到如下界面:

在搜索框中输入cvtutorials,我们可以看到cvtutorials.eth还没有注册:p(Available表示没有被注册)

通过地址栏可以看出,为了想验证某个域名是否被注册,可以直接访问https://app.ens.domain/search/<domain_name>地址即可。首先,我们需要批量生成我们想要探查的域名,代码如下:

代码语言:javascript
复制
import csv 

# 访问域名的前缀
base_url = "https://app.ens.domains/search/"

# 从words5_ori.csv文件中获取单词用来批量生成域名
words5_ori = []
csv_reader = csv.reader(open("./words5_ori.csv"))
for line in csv_reader:
    words5_ori.append(line)

# 对单词表中的单词进行处理,包括移除两个字母的单词、移除空格等(移除的都是不符合ens域名规则的)
words5_remove_twocharacters = [i for i in words5_ori if len(i[0])>2]

words5_remove_space = [i for i in words5_remove_twocharacters if " " not in i[0]]

req_urls = [base_url + i[0] for i in words5_remove_space]

这样我们就生成了req_urls列表,里面是待检测的域名集合。

3. Selinum自动化操作

Selinum是一个开源的web UI自动化测试工具,可以通过浏览器的驱动程序(根据自己浏览器版本进行选择,点击这里进入下载界面)支持编程语言的开发。我们选择的浏览器是谷歌浏览器,需要下载谷歌浏览器的驱动。点击帮助--关于google chrom,可以看到google浏览器版本

将压缩包解压后,可以将ChromeDriver.exe放在固定路径下,然后将该路径放入到环境变量里即可。

3.1 浏览器无界面模式打开关闭自动化

根据下面的代码片段实现浏览器的无界面模式(不会看到浏览器打开)访问及关闭。

代码语言:javascript
复制
# 需要用pip install selenium安装selenium包
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

chrome_options=Options()
#设置chrome浏览器无界面模式,如果将这行代码去掉,会自动弹出浏览器
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
browser.get(url)
# TODO:将你想要执行的代码放在这里
# 关闭浏览器
browser.close()
# 关闭chreomedriver进程
browser.quit()

3.2 元素定位

根据前面的教程,我们已经知道如何生成域名以及自动操作浏览器了,现在需要得到访问网页之后的反馈结果,访问的域名是注册还是没有注册,也就是看搜索域名后,这个域名是available还是unavailable,前面已经有available了,现在,我们来看下unavailable的案例:

我们希望从箭头所指的地方读取英文单词,根据available还是unavailable就可以判断域名是否被注册,我们在谷歌浏览器中右击页面,点击检查,点击箭头所指符号:

将鼠标悬停到目标位置(这里是unavailable单词处)然后点击该处。

然后右边元素代码会高亮:

然后我们右击该处,选择copy,选择Copy XPath。

你就会得到如下值://*[@id="root"]/div/main/div[2]/a/div[1]/div。然后输出几个常见的eth后缀的域名,我们发现这个位置就对应available或unavailable。我们可以通过find_element()函数,利用XPATH定位元素的方法,获取到这个元素的值,这样我们就知道了域名是否已经注册。

3.3 测试单个ens域名

代码语言:javascript
复制
chrome_options=Options()
#设置chrome浏览器无界面模式
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
browser.get(url)
while 1:
    try:
        # global ens_dict
        # res = browser.find_element_by_xpath('//*[@id="root"]/div/main/div[2]/a/div[1]/div')
        ens_status = browser.find_element(by=By.XPATH, value='//*[@id="root"]/div/main/div[2]/a/div[1]/div')
        ens_name = browser.find_element(by=By.XPATH, value='//*[@id="root"]/div/main/div[2]/a/h2')
        ens_dict[ens_name.text[:3]] = ens_status.text 
        if ens_status.text == "Available":
            tf = open(ens_name.text[:3]+".json", "w")
            json.dump(ens_dict, tf)
            tf.close()
        break
    except:
        pass
# 关闭浏览器
browser.close()
# 关闭chreomedriver进程
browser.quit()

3. 多进程运行

由于python中的GIL的原因,我们选用多进程库multiprocessing去运行函数。num_workers根据自己的实际需求进行设置,我的CPU为16核心32线程,我就随便选了个数字8。

代码语言:javascript
复制
# 设置并行数
num_workers = 8
pool = multiprocessing.Pool(processes=num_workers)
pool_outputs = pool.map(test_ens_name, req_urls)
pool.close()
pool.join()

4. 后记

就在我用完这个方法后,发现了有python库有这个功能,放在下一期吧:p,关注公众号机器视觉全栈er,后台回复ens即可获取单词的csv文件及项目源码。(浏览器驱动要和你自己的浏览器对应)

后面还有批量制作NFT

参考文献:

  • • https://en.wikipedia.org/wiki/Web3
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉全栈er 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 简介
  • 1. web 3.0及ENS域名
  • 2. 序列化文件生成域名
  • 3. Selinum自动化操作
    • 3.1 浏览器无界面模式打开关闭自动化
      • 3.2 元素定位
        • 3.3 测试单个ens域名
        • 3. 多进程运行
        • 4. 后记
        相关产品与服务
        区块链
        云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档