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

如何用Python(含Selenium)高效提取网页字母布局与可用字母数据?

提取Kurnik Literaki棋盘数据的高效方案

由于目标网站的棋盘和字母数据是通过JavaScript动态渲染的,静态爬取(如requests库)无法获取到最终的DOM内容,必须使用Selenium这类模拟浏览器的工具来提取数据。以下是具体实现步骤:

1. 环境准备

  • 安装Selenium:pip install selenium
  • 下载对应浏览器的驱动(如ChromeDriver),确保驱动版本与浏览器版本匹配,可将驱动路径配置到系统环境变量,或在初始化浏览器时直接指定路径。

2. 核心实现步骤

初始化浏览器并等待页面加载

启动浏览器访问目标网站,通过WebDriverWait等待关键元素加载完成,避免因DOM未渲染完全导致提取失败。

提取棋盘布局

通过浏览器开发者工具查看棋盘格子的DOM属性(如class),遍历所有格子,将每个格子的字母(空格子记为空字符串)整理成15x15的二维数组。

提取可用字母

找到玩家字母池的DOM元素,提取每个字母并组成列表。

保存数据到文本文件

将棋盘数组和可用字母列表格式化后写入本地文本文件。

3. 示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome浏览器(若驱动未在环境变量,需指定executable_path参数)
driver = webdriver.Chrome()
driver.get("https://www.kurnik.pl/literaki")

# 等待棋盘元素加载完成(根据实际页面DOM调整选择器)
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "literaki-board-cell")))

# 提取15x15的棋盘布局
board_cells = driver.find_elements(By.CLASS_NAME, "literaki-board-cell")
board = []
current_row = []
for idx, cell in enumerate(board_cells):
    # 提取格子中的字母,空格子用空字符串表示
    letter = cell.text.strip() if cell.text.strip() else ""
    current_row.append(letter)
    # 每15个格子组成一行
    if (idx + 1) % 15 == 0:
        board.append(current_row)
        current_row = []

# 提取玩家当前可用字母
rack_tiles = driver.find_elements(By.CLASS_NAME, "literaki-rack-tile")
available_letters = [tile.text.strip() for tile in rack_tiles]

# 写入文本文件
with open("literaki_record.txt", "w", encoding="utf-8") as f:
    f.write("棋盘布局:\n")
    for row in board:
        f.write(" ".join(row) + "\n")
    f.write("\n可用字母:\n")
    f.write(" ".join(available_letters) + "\n")

# 关闭浏览器
driver.quit()

注意事项

  • DOM选择器调整:网站可能会更新页面结构,需通过浏览器开发者工具(F12)确认棋盘格子和字母池的最新class或元素属性,替换代码中的选择器。
  • 登录处理:若需要登录才能进入游戏页面,需在代码中添加登录步骤(如定位账号密码输入框、点击登录按钮)。
  • Headless模式:可启用浏览器的headless模式,避免弹出浏览器窗口,提升运行效率:
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")
    driver = webdriver.Chrome(options=options)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:50:27