18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > python入门与实战--ENS未注册域名批量查询

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

时间:2023-02-13 02:09:01 | 来源:建站知识

时间:2023-02-13 02:09:01 来源:建站知识

0. 简介

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

由于不可抗因素,部分地区访问网站无法显示界面,我也无能为力:p
回过头来看,我选的域名还是蛮好的嘛(厚着脸皮),cv指的是计算机视觉,后面的tutorials意思是教程,你要是问我为啥没选mvtutorials,正好和机器视觉全栈er有呼应啊?那是因为我考虑到mv还有music video之意,所以就避开了。

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

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>地址即可。首先,我们需要批量生成我们想要探查的域名,代码如下:

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 浏览器无界面模式打开关闭自动化

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

# 需要用pip install selenium安装selenium包from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import Bychrome_options=Options()#设置chrome浏览器无界面模式,如果将这行代码去掉,会自动弹出浏览器chrome_options.add_argument('--headless')browser = webdriver.Chrome(options=chrome_options)browser.get(url)# TODO:将你想要执行的代码放在这里# 关闭浏览器browser.close()# 关闭chreomedriver进程browser.quit()
pip安装速度慢可以用国内源,方法点击这里

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域名

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。

# 设置并行数num_workers = 8pool = multiprocessing.Pool(processes=num_workers)pool_outputs = pool.map(test_ens_name, req_urls)pool.close()pool.join()

4. 后记

就在我用完这个方法后,发现了有python库有这个功能,放在下一期吧:p,关注公众号

后台回复ens即可获取单词的csv文件及项目源码。(浏览器驱动要和你自己的浏览器对应)

后面还有批量制作NFT,请关注公众号追踪最新进展:p
参考文献:

关键词:注册,入门,实战

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭