这是一个playwright自动打开一个新闻网站后台,输入内容的示例代码:
from playwright.sync_api import sync_playwright, expect
import time
import platform # 用于判断操作系统
def get_dom_and_paste(url: str, target_selector: str, text_to_paste: str):
"""
打开网页,获取 DOM,并在指定元素中模拟粘贴操作。
Args:
url: 目标网页 URL。
target_selector: 要粘贴内容的目标元素的 CSS 选择器。
text_to_paste: 要模拟粘贴的文本。
"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
# 重要:授予浏览器访问剪贴板的权限
context = browser.new_context(permissions=["clipboard-read", "clipboard-write"])
page = context.new_page()
try:
print(f"正在导航到: {url}")
page.goto(url, wait_until='domcontentloaded')
print("页面加载完成。")
# --- 1. 获取 DOM 树结构 ---
print("\n--- 获取页面 DOM 结构 ---")
dom_content = page.content()
print("DOM 结构 (前 500 字符):")
print(dom_content[:500] + "...")
# 你可以将 dom_content 保存到文件或进行进一步分析
# with open("page_dom.html", "w", encoding="utf-8") as f:
# f.write(dom_content)
# print("完整的 DOM 结构已保存到 page_dom.html")
# --- 2. 模拟粘贴操作 ---
print(f"\n--- 在元素 '{target_selector}' 中模拟粘贴 ---")
# 定位目标元素
target_element = page.locator(target_selector)
# 确保元素可见且可用
print("等待目标元素可见...")
target_element.wait_for(state="visible", timeout=10000)
expect(target_element).to_be_editable() # 确保是可编辑元素
print("目标元素已找到且可编辑。")
# 聚焦到目标元素
print("聚焦目标元素...")
target_element.focus()
time.sleep(0.5) # 短暂等待确保焦点生效
# 将指定文本写入浏览器剪贴板
print(f"将文本 '{text_to_paste}' 写入浏览器剪贴板...")
# 使用 page.evaluate 在页面上下文中执行 JS
page.evaluate(f"navigator.clipboard.writeText('{text_to_paste}')")
print("文本已写入剪贴板。")
time.sleep(0.5) # 等待剪贴板操作完成
# 判断操作系统以使用正确的快捷键
paste_key = "Control" if platform.system() != "Darwin" else "Meta"
# 模拟粘贴快捷键
print(f"模拟按下 {paste_key}+V ...")
page.keyboard.press(f"{paste_key}+V")
print("粘贴操作已模拟。")
# 验证粘贴结果
print("验证粘贴结果...")
# 使用 expect 断言输入框的值是否符合预期
expect(target_element).to_have_value(text_to_paste)
print(f"验证成功:元素的值现在是 '{text_to_paste}'")
time.sleep(3) # 暂停查看结果
except Exception as e:
print(f"在处理页面时发生错误: {e}")
page.screenshot(path="paste_error.png")
print("已保存错误截图到 paste_error.png")
import traceback
traceback.print_exc()
finally:
print("关闭浏览器...")
context.close() # 关闭带有权限的上下文
browser.close()
# --- 主程序 ---
if __name__ == "__main__":
# --- 配置 ---
# 替换为你要测试的网页 URL
# 可以使用一个简单的在线文本编辑器或你自己的测试页面
test_url = "https://www.rapidtables.com/tools/notepad.html"
# 替换为目标输入框的 CSS 选择器
# 对于上面的 rapidtables 记事本,是 #area 文本域
input_selector = "#area"
text = "这是通过 Playwright 粘贴的文本!"
# --- 执行 ---
get_dom_and_paste(test_url, input_selector, text) 网友回复


