Python Playwright网站登录脚本输入框无法键入内容问题求助
问题排查与修复方案
错误原因
- 选择器逻辑错误:你使用的
#user input[name="email"]是查找id为user的元素内部的邮箱输入框,但实际页面中id为user的元素本身就是邮箱输入框,不存在嵌套的子输入框,选择器匹配不到元素所以输入操作无响应。密码输入框的#myInput input[name="password"]存在完全相同的错误。 - 浏览器实例未初始化:代码中
browser = p.chromium.launch()被注释,运行时会直接抛出browser未定义的错误。 - 缺少可靠的元素等待逻辑:直接调用输入方法时可能输入框还未渲染完成,导致操作失效。
- 未添加登录提交逻辑:当前代码填完账号密码后直接关闭浏览器,不会提交登录请求。
修复后的代码
import json import sys import bs4 import urllib.parse from playwright.sync_api import sync_playwright link = 'https://secure.libertycable.com/login.php' with sync_playwright() as p: try: # 取消浏览器启动的注释,测试时可以加headless=False看可视化效果 browser = p.chromium.launch(headless=False) context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36') page = context.new_page() page.goto(link, wait_until="domcontentloaded") # 关闭弹窗,最多等2秒,没找到就跳过 try: page.wait_for_selector('#close', timeout=2000) page.click('#close') except Exception as e: pass # 修正选择器,直接用id定位输入框,先等待元素可交互再输入 email_input = page.locator('#user') email_input.wait_for(state="visible") email_input.fill("你的邮箱账号") pwd_input = page.locator('#myInput') pwd_input.wait_for(state="visible") pwd_input.fill("你的登录密码") # 点击登录按钮提交表单 page.locator('.btn-green', has_text="Login").click() # 等待登录完成可以加自己的后续逻辑,这里示例等3秒看效果 page.wait_for_timeout(3000) # 统一释放资源 page.close() context.close() browser.close() except Exception as e: print(f"Error in playwright script: {str(e)}") # 异常场景也释放资源 if 'page' in locals(): page.close() if 'context' in locals(): context.close() if 'browser' in locals(): browser.close()
内容的提问来源于stack exchange,提问作者user16050795
相关产品推荐
相关产品推荐

