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

Python Playwright:函数复用已打开Page对象及外部变量方法

问题解决方法

你的代码存在几个核心问题:page对象未传入函数、loc变量未传递、重复初始化Playwright上下文,还有车型文本获取的语法错误,以下是修正方案:

关键修改点

  • 将page和loc作为参数传入run函数,让函数直接使用已打开的浏览器页面和当前地点值
  • 移除循环中重复创建的sync_playwright上下文,复用已经初始化好的浏览器和页面
  • 修正车型名称的获取方式,改用Playwright官方的text_content()方法

修正后的完整代码

from playwright.sync_api import Playwright, sync_playwright, expect

locationList = [
    'London Luton Airport',
    'London Hilton',
    'London City',
    'London Wembley',
    'London Battersea',
    'London Shepherds Bush'
]

def run(page, loc):
    # 点击地点输入框并填充当前地点
    page.locator("[placeholder=\"Find a location\"]").click()
    page.locator("[placeholder=\"Find a location\"]").fill(loc)
    # 点击匹配的地点选项(若定位不准可调整为更精确的选择器)
    page.locator(f'text={loc}').click()
    # 点击显示报价按钮(每次切换地点需触发)
    page.locator("button:has-text(\"Show offers\")").click()
    # 等待页面加载完成,避免元素未渲染
    page.wait_for_load_state("networkidle")
    # 获取所有车型名称
    carnames = page.locator("//h2[@class='vehicle-item__title']")
    # 直接获取所有元素的文本内容列表
    carnamelist = carnames.all_text_contents()
    print(f"地点 {loc} 的车型列表:")
    print(carnamelist)

if __name__ == "__main__":
    with sync_playwright() as playwright:
        # 仅初始化一次浏览器和页面
        chromium = playwright.chromium
        browser = chromium.launch(channel="chrome", headless=False)
        page = browser.new_page()
        page.set_viewport_size({"width": 1920, "height": 1080})
        page.goto("https://www.sixt.co.uk/")
        # 仅同意一次隐私政策
        page.locator("[data-testid=\"uc-accept-all-button\"]").click()

        # 遍历地点列表,复用同一个page对象
        for loc in locationList:
            run(page, loc)
        
        # 任务完成后关闭浏览器
        browser.close()

额外说明

  • 原代码中手动填充"luton"的测试操作已移除,循环会自动处理所有地点
  • 若地点选择器text={loc}无法匹配目标元素,可替换为原代码的XPath写法:page.locator(f'//div[text()="{loc}"]').click()
  • 添加page.wait_for_load_state("networkidle")确保页面加载完成后再获取元素,避免因渲染延迟导致的空列表问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:55:22