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

如何让Playwright逐个输入变量字符至搜索框?

解决方案

你的代码存在几个核心问题:

  • 自定义的R_10()函数仅在终端打印字符,完全没有对页面输入框进行操作
  • 最终还是调用了fill()方法一次性填入内容,和你想要的逐个输入需求矛盾
  • click后未加括号,不会执行点击操作

下面是两种可行的修复方案:

方案一:使用Playwright自带的type方法(推荐)

Playwright的type方法原生支持设置字符输入间隔,无需手动写循环就能实现逐个输入效果:

import random

lda_10 = {
    1: "bahria town - overseas A",
    2: "bahria town - awais qarni block",
    3: "bahria town - shaheen block",
    4: "bahria town - shaheen block extension",
    5: "bahria town - Ghouri block",
    6: "bahria town - takbeer block",
    7: "bahria town - Gulbahar Block",
}

# 随机选取一个地点
selected_location = random.choice(list(lda_10.values()))

# 逐个字符输入,每个字符间隔0.2秒(delay单位为毫秒)
page.locator("#location_id_input").type(selected_location, delay=200)

# 点击下拉选项(注意加括号执行方法)
page.locator("(//ul)[8]/li[1]").click()

方案二:手动循环逐个输入字符

如果需要更灵活的输入控制,也可以循环每个字符手动输入:

import random
import time

lda_10 = {
    1: "bahria town - overseas A",
    2: "bahria town - awais qarni block",
    3: "bahria town - shaheen block",
    4: "bahria town - shaheen block extension",
    5: "bahria town - Ghouri block",
    6: "bahria town - takbeer block",
    7: "bahria town - Gulbahar Block",
}

selected_location = random.choice(list(lda_10.values()))
input_locator = page.locator("#location_id_input")

# 先清空输入框(可选,根据实际需求调整)
input_locator.fill("")

# 逐个输入每个字符
for char in selected_location:
    input_locator.press(char)
    # 也可以用 input_locator.fill(char, append=True) 实现追加输入
    time.sleep(0.2)

# 点击下拉选项
page.locator("(//ul)[8]/li[1]").click()

额外提醒:

  • 下拉选项的定位器(//ul)[8]依赖页面结构,一旦页面布局变动就会失效,建议改用更稳定的定位方式(比如基于class、data属性等)
  • 如果输入框有默认内容,优先调用fill("")清空后再输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:05:17