参考这个代码
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)
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?