由于不可抗因素,部分地區(qū)訪問網(wǎng)站" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 建站知識 > python入門與實戰(zhàn)--ENS未注冊域名批量查詢

python入門與實戰(zhàn)--ENS未注冊域名批量查詢

時間:2023-02-13 02:09:01 | 來源:建站知識

時間:2023-02-13 02:09:01 來源:建站知識

0. 簡介

去年,我在阿里云那里購買了域名http://cvtutorials.com(一口氣買了10年的:p),打算在這個網(wǎng)站以及自己的公眾號:機器視覺全棧er上輸出機器視覺領(lǐng)域文章,跌跌撞撞已經(jīng)有大半年了。

由于不可抗因素,部分地區(qū)訪問網(wǎng)站無法顯示界面,我也無能為力:p
回過頭來看,我選的域名還是蠻好的嘛(厚著臉皮),cv指的是計算機視覺,后面的tutorials意思是教程,你要是問我為啥沒選mvtutorials,正好和機器視覺全棧er有呼應(yīng)?。磕鞘且驗槲铱紤]到mv還有music video之意,所以就避開了。

在選取域名的時候,還用上了阿里云的批量查詢未注冊域名的功能。恰好:p,我有機會接觸到了web3.0,也想給自己的網(wǎng)站搞個web3.0時代的域名。首先我就利用python自己寫了個代碼實現(xiàn)web3.0域名的批量查詢,看看域名是否已經(jīng)注冊了,看看能不能撿個漏。代碼(代碼獲取方式直接到最后)實現(xiàn)的主要組成部分如下:

1. web 3.0及ENS域名

web3.0是web2.0和區(qū)塊鏈的結(jié)合。和web2.0不同的是,web3.0時代的數(shù)據(jù)和內(nèi)容不會被少數(shù)的大型科技公司壟斷,會被參與者自己掌握。

web 1.0:1991~2004

web 2.0:2004~?

web 3.0:2014~?

web3.0時代,基于以太坊開發(fā)的Dapp層出不窮。和web2.0時代用可讀性好的域名代替IP地址類似,web3.0時代,用可讀性好的域名去替代地址(我個人覺得這個錢包地址類似身份證是你的身份),ENS就是其中的代表性的域名服務(wù)。ENS全稱是Ethereum Name Service(以太坊域名服務(wù)),是從以太坊基金會孵化出來的。

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域名規(guī)則的)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自動化測試工具,可以通過瀏覽器的驅(qū)動程序(根據(jù)自己瀏覽器版本進行選擇,點擊這里進入下載界面)支持編程語言的開發(fā)。我們選擇的瀏覽器是谷歌瀏覽器,需要下載谷歌瀏覽器的驅(qū)動。點擊幫助--關(guān)于google chrom,可以看到google瀏覽器版本

將壓縮包解壓后,可以將ChromeDriver.exe放在固定路徑下,然后將該路徑放入到環(huán)境變量里即可。

3.1 瀏覽器無界面模式打開關(guān)閉自動化

根據(jù)下面的代碼片段實現(xiàn)瀏覽器的無界面模式(不會看到瀏覽器打開)訪問及關(guān)閉。

# 需要用pip install selenium安裝selenium包from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import By?chrome_options=Options()#設(shè)置chrome瀏覽器無界面模式,如果將這行代碼去掉,會自動彈出瀏覽器chrome_options.add_argument('--headless')browser = webdriver.Chrome(options=chrome_options)browser.get(url)# TODO:將你想要執(zhí)行的代碼放在這里# 關(guān)閉瀏覽器browser.close()# 關(guān)閉chreomedriver進程browser.quit()
pip安裝速度慢可以用國內(nèi)源,方法點擊這里

3.2 元素定位

根據(jù)前面的教程,我們已經(jīng)知道如何生成域名以及自動操作瀏覽器了,現(xiàn)在需要得到訪問網(wǎng)頁之后的反饋結(jié)果,訪問的域名是注冊還是沒有注冊,也就是看搜索域名后,這個域名是available還是unavailable,前面已經(jīng)有available了,現(xiàn)在,我們來看下unavailable的案例:

我們希望從箭頭所指的地方讀取英文單詞,根據(jù)available還是unavailable就可以判斷域名是否被注冊,我們在谷歌瀏覽器中右擊頁面,點擊檢查,點擊箭頭所指符號:

將鼠標懸停到目標位置(這里是unavailable單詞處)然后點擊該處。

然后右邊元素代碼會高亮:

然后我們右擊該處,選擇copy,選擇Copy XPath。

你就會得到如下值://*[@id="root"]/div/main/div[2]/a/div[1]/div。然后輸出幾個常見的eth后綴的域名,我們發(fā)現(xiàn)這個位置就對應(yīng)available或unavailable。我們可以通過find_element()函數(shù),利用XPATH定位元素的方法,獲取到這個元素的值,這樣我們就知道了域名是否已經(jīng)注冊。

3.3 測試單個ens域名

chrome_options=Options()#設(shè)置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# 關(guān)閉瀏覽器browser.close()# 關(guān)閉chreomedriver進程browser.quit()

3. 多進程運行

由于python中的GIL的原因,我們選用多進程庫multiprocessing去運行函數(shù)。num_workers根據(jù)自己的實際需求進行設(shè)置,我的CPU為16核心32線程,我就隨便選了個數(shù)字8。

# 設(shè)置并行數(shù)num_workers = 8pool = multiprocessing.Pool(processes=num_workers)pool_outputs = pool.map(test_ens_name, req_urls)pool.close()pool.join()

4. 后記

就在我用完這個方法后,發(fā)現(xiàn)了有python庫有這個功能,放在下一期吧:p,關(guān)注公眾號

后臺回復ens即可獲取單詞的csv文件及項目源碼。(瀏覽器驅(qū)動要和你自己的瀏覽器對應(yīng))

后面還有批量制作NFT,請關(guān)注公眾號追蹤最新進展:p
參考文獻:

關(guān)鍵詞:注冊,入門,實戰(zhàn)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉