import asyncio import random from playwright.async_api import async_playwright from utils.enhanced_human_typing import EnhancedHumanTypingSimulator from utils.paste_typing import PasteTypingSimulator async def xhs_tag_input(page, tags: list, selector: str): """模拟小红书的标签输入逻辑""" element = await page.wait_for_selector(selector) await element.click() for i, tag in enumerate(tags): # 输入#号 await page.keyboard.press("Shift") await asyncio.sleep(random.uniform(0.1, 0.2)) await page.keyboard.press("3") await page.keyboard.up("Shift") await asyncio.sleep(random.uniform(0.2, 0.4)) # 输入标签文本 for char in tag: await page.keyboard.type(char, delay=random.randint(300, 500)) await asyncio.sleep(random.uniform(0.1, 0.2)) # 输入回车并等待 await page.keyboard.press("Enter") await asyncio.sleep(random.uniform(0.5, 0.8)) # 标签间额外停顿 if i < len(tags) - 1: await asyncio.sleep(random.uniform(0.8, 1.2)) async def xhs_type_text(page, text: str, selector: str): """模拟小红书的文本输入逻辑""" # 定位元素 element = await page.wait_for_selector(selector) await element.click() # 按段落分割 paragraphs = text.split('\n\n') for i, paragraph in enumerate(paragraphs): if not paragraph.strip(): continue # 逐字符输入 for j, char in enumerate(paragraph): # 特殊字符处理 if char in ',。!?、': # 中文标点输入稍慢 await page.keyboard.type(char, delay=random.randint(200, 300)) await asyncio.sleep(random.uniform(0.1, 0.2)) elif char in ',.!?': # 英文标点输入较快 await page.keyboard.type(char, delay=random.randint(150, 250)) await asyncio.sleep(random.uniform(0.08, 0.15)) else: # 普通字符正常速度 await page.keyboard.type(char, delay=random.randint(100, 200)) await asyncio.sleep(random.uniform(0.05, 0.1)) # 每输入15-25个字符后可能停顿思考 if j > 0 and j % random.randint(15, 25) == 0: await asyncio.sleep(random.uniform(0.3, 0.8)) # 段落间添加换行和思考时间 if i < len(paragraphs) - 1: # 段落结束,停顿思考 await asyncio.sleep(random.uniform(0.5, 1.0)) # 输入两个换行 await page.keyboard.press("Enter") await asyncio.sleep(random.uniform(0.1, 0.2)) await page.keyboard.press("Enter") # 准备输入下一段 await asyncio.sleep(random.uniform(0.8, 1.5)) async def test_typing(): test_text = """这是一段测试文本,用来展示人类化输入效果。 这是第二段落,包含一些标点符号:,。!? 以及一些英文字符和数字 Hello World 123。 最后一段用来测试段落之间的停顿效果。 ✨【交通指南】 ✅7号线直达施园站,步行5分钟入园 ✅自驾导航「北京环球城市大道」,停车场直通园区 ⏰建议早9点开园前排队,热门项目可节省1小时等待 🎢【必玩项目清单】 🔥哈利波特:对角巷买黄油啤酒,探索霍格沃茨城堡内部奥秘(需提前线上预约) 🔥侏罗纪世界:大冒险激流勇进必玩,恐龙特效超震撼 🔥变形金刚:霸天虎过山车速度与激情现场版 🔥小黄人乐园:适合带娃拍照,旋转扫把项目萌趣满分 🍽️【美食玄学】 ✔️好莱坞街区「霓虹街市集」汉堡配奶昔 ✔️功夫熊猫「平先生面馆」云吞面地道 ⚠️景区内餐标偏高,建议自带水杯续水 """ async with async_playwright() as playwright: # 启动浏览器,添加剪贴板权限 browser = await playwright.chromium.launch(headless=False) # 设置为False以便观察 context = await browser.new_context(permissions=['clipboard-read', 'clipboard-write']) page = await context.new_page() # 创建一个简单的HTML页面 await page.set_content('''