Playwright Python获取Frame内页面源码问题求助
解决方案
你用page.content()获取的是整个页面的源码,而你需要的是Frame内部的内容,得调用Frame对象的content()方法才行。另外页面提示手机号无效,是因为点击继续按钮时,表单里的手机号字段没填写,触发了验证规则。
给你调整后的代码:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.firefox.launch(headless=False) page = browser.new_page() page.goto("https://www.icloud.com/") # 用更稳定的定位器替代冗长的CSS路径 page.click('text="继续"') page.click('text="创建 Apple ID"') # 等待Frame加载完成,直接获取Frame对象 page.wait_for_selector('#create-account-frame') frame = page.frame('#create-account-frame') # 优化输入框定位,用更简洁的选择器 frame.fill('#firstNameInput input', 'firstName') frame.fill('last-name-input input', 'lastname') # 补充填写手机号字段,避免验证提示 frame.fill('#phoneNumberInput input', '13800000000') # 替换成有效测试手机号 # 点击继续按钮 frame.click('button.button-primary.nav-action') # 获取Frame内部的源码 frame_content = frame.content() print(frame_content) page.wait_for_timeout(10000) # 用Playwright自带的等待替代time.sleep browser.close()
几个关键调整点:
- 用
page.frame('#create-account-frame')获取实际的Frame对象,再调用frame.content()就能拿到Frame内的源码 - 替换了冗长的CSS定位器,改用更简洁、稳定的选择器,避免页面结构变化导致定位失效
- 补充了手机号字段的填写,解决“Enter a valid phone number”的验证提示
- 用Playwright自带的
wait_for_selector和wait_for_timeout替代time.sleep,更符合工具最佳实践
内容的提问来源于stack exchange,提问作者Abu Sasuke
相关产品推荐
相关产品推荐

