my parser code hit error on gscholar link scraping. please look at the error and see whats wrong:

ERROR

Error: Page.evaluate: TypeError: Cannot redefine property: webdriver
    at Function.defineProperty (<anonymous>)
    at eval (eval at evaluate (:234:30), <anonymous>:2:16)
    at eval (<anonymous>)
    at UtilityScript.evaluate (<anonymous>:234:30)
    at UtilityScript.<anonymous> (<anonymous>:1:44), retrying...

CODE

@sleep_and_retry
@limits(calls=5, period=60)
async def call_with_rate_limit_async(func, *args, **kwargs):
    return await func(*args, **kwargs)

async def perform_stealth(page):
    """
    Implements stealth-like features for Playwright.
    Mimics human activity to avoid detection.
    """
    await page.evaluate("""
        // mask webdriver property
        Object.defineProperty(navigator, 'webdriver', { get: () => false });
        
        // override user-agent properties to look more natural
        Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
        Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });

        // mock plugins and mime types
        window.navigator.__defineGetter__('plugins', function() { 
            return [1, 2, 3]; // mimic real plugins count
        });
        window.navigator.__defineGetter__('languages', function() { 
            return ['en-US', 'en']; // mimic browser languages
        });

        // set random screen size and color depth
        window.screen.width = Math.floor(Math.random() * (1920 - 1366) + 1366);
        window.screen.height = Math.floor(Math.random() * (1080 - 768) + 768);
        window.screen.colorDepth = 24;
    """)

    # Simulate random mouse movements
    for _ in range(random.randint(3, 7)):
        x, y = random.randint(0, 1920), random.randint(0, 1080)
        await page.mouse.move(x, y, steps=random.randint(5, 20))
        await asyncio.sleep(random.uniform(0.1, 0.5))


async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)  # Use headless=False for stealth
        for _ in range(5):  # Number of queries
            try:
                # Get proxy and user agent
                proxy = next(proxy_generator)
                user_agent = random.choice(user_agents) if user_agents else None

                # Create browser context
                context = await browser.new_context(
                    proxy=proxy,
                    user_agent=user_agent,
                    viewport={"width": 1366, "height": 768},  # Realistic viewport
                    locale="en-US",  # Set language
                    timezone_id="America/New_York",  # Set timezone
                    permissions=["geolocation"],  # Set permissions
                    geolocation={"latitude": 40.7128, "longitude": -74.0060}  # Set fake geolocation
                )

                # Add stealth tweaks to context
                await context.add_init_script("""
                    // mask webdriver property
                    Object.defineProperty(navigator, 'webdriver', { get: () => false });
                    
                    // override user-agent properties
                    Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
                    Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });

                    // mock plugins and mime types
                    Object.defineProperty(navigator, 'plugins', {
                        get: () => [1, 2, 3]  // mimic real plugins count
                    });
                    Object.defineProperty(navigator, 'languages', {
                        get: () => ['en-US', 'en']  // mimic browser languages
                    });

                    // Set random screen size and color depth
                    window.screen.width = Math.floor(Math.random() * (1920 - 1366) + 1366);
                    window.screen.height = Math.floor(Math.random() * (1080 - 768) + 768);
                    window.screen.colorDepth = 24;
                """)

                # Open a new page
                page = await context.new_page()

                # Perform stealth tweaks
                await perform_stealth(page)

                query = 'sadness'
                url_scholar = f'https://scholar.google.com/scholar?q={query}&hl=en&gl=us&start=0'

                print(f"Using proxy: {proxy['server']}, user-agent: {user_agent}")

                # Navigate with rate-limited calls
                response = await call_with_rate_limit_async(page.goto, url_scholar, timeout=60000)
                if response.status != 200:
                    print(f"Non-200 response: {response.status}")
                    raise Exception("response error")

                # Scraping example
                html = await page.content()
                print(html[:500])  # Preview page content

                # Add random scrolls to mimic human reading
                for _ in range(random.randint(3, 10)):
                    scroll_distance = random.randint(200, 800)
                    await page.evaluate(f"window.scrollBy(0, {scroll_distance});")
                    await asyncio.sleep(random.uniform(1, 3))

                await context.close()
                time.sleep(random.randint(5, 15))  # Random delay

            except Exception as e:
                print(f"Error: {e}, retrying...")
                continue

        await browser.close()

asyncio.run(main())