如何让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
相关产品推荐
相关产品推荐

