# x_autopost.py — efflora_run social task # stack: browser_use 0.4 · langchain_anthropic · Claude opus 4.7 controller = Controller() @controller.action(description="Open compose, attach a photo via the OS file chooser") async def attach_photo(browser_session, path: str) -> str: page = browser_session.current_page await page.click('div[data-testid="tweetTextarea_0"]') async with page.expect_file_chooser() as fc_info: await page.click('button[aria-label="Add photos or video"]') chooser = await fc_info.value await chooser.set_files(path) await page.wait_for_selector('img[data-testid="attachments"]') return f"attached {Path(path).name}" @controller.action(description="Type the tweet body via IME composition") async def type_body(browser_session, text: str) -> str: box = browser_session.current_page.locator( 'div[data-testid="tweetTextarea_0"] > div > div' ).first await box.click() await box.type(text, delay=24) return f"committed {len(text)} chars" @controller.action(description="Confirm the 'Post this?' modal and verify post landed") async def submit_and_verify(browser_session) -> str: page = browser_session.current_page await page.get_by_role("button", name="Post").nth(0).click() await page.locator('div[role="dialog"]').wait_for(state="visible") await page.get_by_role("button", name="Post").last.click() await page.get_by_text("Your post was sent.").wait_for() head = page.locator('main article[data-testid="tweet"]').first assert EXPECTED_BODY in await head.inner_text() return "post_visible: True"