Spaces:
Sleeping
Sleeping
| # Goal: Automates webpage scrolling with various scrolling actions, including element-specific scrolling. | |
| import asyncio | |
| import os | |
| import sys | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| from browser_use import Agent, ChatOpenAI | |
| from browser_use.browser import BrowserProfile, BrowserSession | |
| if not os.getenv('OPENAI_API_KEY'): | |
| raise ValueError('OPENAI_API_KEY is not set') | |
| """ | |
| Example: Enhanced 'Scroll' action with page amounts and element-specific scrolling. | |
| This script demonstrates the new enhanced scrolling capabilities: | |
| 1. PAGE-LEVEL SCROLLING: | |
| - Scrolling by specific page amounts using 'num_pages' parameter (0.5, 1.0, 2.0, etc.) | |
| - Scrolling up or down using the 'down' parameter | |
| - Uses JavaScript window.scrollBy() or smart container detection | |
| 2. ELEMENT-SPECIFIC SCROLLING: | |
| - NEW: Optional 'index' parameter to scroll within specific elements | |
| - Perfect for dropdowns, sidebars, and custom UI components | |
| - Uses direct scrollTop manipulation (no mouse events that might close dropdowns) | |
| - Automatically finds scroll containers in the element hierarchy | |
| - Falls back to page scrolling if no container found | |
| 3. IMPLEMENTATION DETAILS: | |
| - Does NOT use mouse movement or wheel events | |
| - Direct DOM manipulation for precision and reliability | |
| - Container-aware scrolling prevents unwanted side effects | |
| """ | |
| llm = ChatOpenAI(model='gpt-4.1-mini') | |
| browser_profile = BrowserProfile(headless=False) | |
| browser_session = BrowserSession(browser_profile=browser_profile) | |
| # Example 1: Basic page scrolling with custom amounts | |
| agent1 = Agent( | |
| task="Navigate to 'https://en.wikipedia.org/wiki/Internet' and scroll down by one page - then scroll up by 0.5 pages - then scroll down by 0.25 pages - then scroll down by 2 pages.", | |
| llm=llm, | |
| browser_session=browser_session, | |
| ) | |
| # Example 2: Element-specific scrolling (dropdowns and containers) | |
| agent2 = Agent( | |
| task="""Go to https://semantic-ui.com/modules/dropdown.html#/definition and: | |
| 1. Scroll down in the left sidebar by 2 pages | |
| 2. Then scroll down 1 page in the main content area | |
| 3. Click on the State dropdown and scroll down 1 page INSIDE the dropdown to see more states | |
| 4. The dropdown should stay open while scrolling inside it""", | |
| llm=llm, | |
| browser_session=browser_session, | |
| ) | |
| # Example 3: Text-based scrolling alternative | |
| agent3 = Agent( | |
| task="Navigate to 'https://en.wikipedia.org/wiki/Internet' and scroll to the text 'The vast majority of computer'", | |
| llm=llm, | |
| browser_session=browser_session, | |
| ) | |
| async def main(): | |
| print('Choose which scrolling example to run:') | |
| print('1. Basic page scrolling with custom amounts (Wikipedia)') | |
| print('2. Element-specific scrolling (Semantic UI dropdowns)') | |
| print('3. Text-based scrolling (Wikipedia)') | |
| choice = input('Enter choice (1-3): ').strip() | |
| if choice == '1': | |
| print('π Running Example 1: Basic page scrolling...') | |
| await agent1.run() | |
| elif choice == '2': | |
| print('π Running Example 2: Element-specific scrolling...') | |
| await agent2.run() | |
| elif choice == '3': | |
| print('π Running Example 3: Text-based scrolling...') | |
| await agent3.run() | |
| else: | |
| print('β Invalid choice. Running Example 1 by default...') | |
| await agent1.run() | |
| if __name__ == '__main__': | |
| asyncio.run(main()) | |