You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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}")

关键逻辑说明

  1. 域名提取:用urlparse剥离URL的协议部分,确保传入查询框的是纯域名(如youtube.com而非https://youtube.com)
  2. 页面等待:结合隐式等待和短时间sleep,避免页面未加载完成就解析源码
  3. 状态判断:通过BeautifulSoup查找页面特征文本:
    • 可用状态匹配关键词This domain name is available
    • 不可用状态匹配is registered/parked/does not exist等关键词
  4. 资源清理:用try-finally确保浏览器无论是否出错都会关闭

注意事项

  • 如果网站页面结构更新,需要对应调整BeautifulSoup的查找规则(比如修改关键词或定位元素的class/id)
  • 频繁请求可能触发反爬,建议适当延长sleep时间,或添加随机等待间隔

内容的提问来源于stack exchange,提问作者TheBotHunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:01:13