如何用Selenium从EuroDNS抓取域名可用性检测结果
批量域名检测解决方案(结合Selenium与BeautifulSoup)
第一步:修正初始代码的基础问题
你的初始代码存在几个明显问题,先修正并补充必要依赖:
- 未初始化ChromeDriver实例
- 循环中错误地将整个
cli列表传入输入框,而非当前遍历的域名 - XPATH字符串未加引号
- 缺少
By类导入、BeautifulSoup依赖及页面等待逻辑
第二步:完整实现代码
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from bs4 import BeautifulSoup from urllib.parse import urlparse import time # 待检测域名列表(带协议) cli = ['https://youtube.com', 'https://google.com', 'https://minecraft.net', 'https://something.odoo.com'] available_domains = [] # 初始化ChromeDriver并设置隐式等待 driver = webdriver.Chrome(ChromeDriverManager().install()) driver.implicitly_wait(10) driver.maximize_window() try: for url in cli: # 提取纯域名(去掉协议部分) domain = urlparse(url).netloc if not domain: print(f"无效URL:{url}") continue # 打开WHOIS查询页面 driver.get("https://www.eurodns.com/whois-search/app-domain-name") # 清空输入框并填入当前域名 input_box = driver.find_element(By.CSS_SELECTOR, "input[name='whoisDomainName']") input_box.clear() input_box.send_keys(domain) # 点击查询按钮 driver.find_element(By.XPATH, "/html/body/div/div[3]/div/div[2]/form/div/div/div/button").click() # 等待结果加载(显式等待更稳妥,这里用简单sleep适配) time.sleep(2) # 用BeautifulSoup解析页面源码 soup = BeautifulSoup(driver.page_source, "html.parser") # 根据页面特征判断域名状态 # 检测"可用"状态的特征文本 available_text = soup.find(string="This domain name is available") if available_text: available_domains.append(domain) print(f"域名 {domain} 可用,已加入列表") else: # 检测已注册/停放/不存在的提示 registered_text = soup.find(string=lambda text: text and ("is registered" in text or "parked" in text or "does not exist" in text)) if registered_text: print(f"域名 {domain}:{registered_text.strip()}") else: print(f"域名 {domain}:无法识别状态,请检查页面结构") finally: # 关闭浏览器 driver.quit() # 输出最终可用域名列表 print("\n可用域名列表:") for domain in available_domains: print(f"- {domain}")
关键逻辑说明
- 域名提取:用
urlparse剥离URL的协议部分,确保传入查询框的是纯域名(如youtube.com而非https://youtube.com) - 页面等待:结合隐式等待和短时间sleep,避免页面未加载完成就解析源码
- 状态判断:通过BeautifulSoup查找页面特征文本:
- 可用状态匹配关键词
This domain name is available - 不可用状态匹配
is registered/parked/does not exist等关键词
- 可用状态匹配关键词
- 资源清理:用
try-finally确保浏览器无论是否出错都会关闭
注意事项
- 如果网站页面结构更新,需要对应调整BeautifulSoup的查找规则(比如修改关键词或定位元素的class/id)
- 频繁请求可能触发反爬,建议适当延长sleep时间,或添加随机等待间隔
内容的提问来源于stack exchange,提问作者TheBotHunter
相关产品推荐
相关产品推荐

