Playwrite un dected code
from playwright.sync_api import sync_playwright,expect
import re
with sync_playwright() as p:
browser = p.chromium.launch(
headless=False, # Launch browser with additional args to mimic a real Chrome instance
args=[
"--disable-blink-features=AutomationControlled", # Hides automation flags
"--disable-infobars", # Removes "Chrome is being controlled" banner
"--start-maximized" # Makes it look like a user-opened browser
]
)
context = browser.new_context( # Create a context with realistic settings
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
viewport={"width": 1280, "height": 720},
locale="en-US",
)
page = context.new_page() # Spoof webdriver detection
page.add_init_script("""
Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]});
Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
""")
page.goto("https://accounts.google.com/ServiceLogin", wait_until="domcontentloaded") # Navigate to Google login page
try:
expect(page).to_have_title(re.compile("Google"), timeout=2000)
except AssertionError as e:
print(f"Title mismatch: {e}")
print("Proceeding despite title mismatch...")
print(page.title()) #print page title -
input("Press Enter to close the browser...")
browser.close()
OR CLASS BASED:
from playwright.sync_api import sync_playwright, expect, TimeoutError
import time
import re
import csv
class Init:
def __init__(self):
# Initialize Playwright and browser
self.playwright = sync_playwright().start()
self.browser = self.playwright.chromium.launch(
channel="chrome",
headless=False,
args=[
"--disable-blink-features=AutomationControlled",
"--disable-infobars",
"--start-maximized" # Maximizes the browser window
]
)
# Create context with realistic settings
self.context = self.browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
locale="en-US",
viewport=None # Ensures maximum screen size with --start-maximized
)
# Create page object accessible to all methods
self.page = self.context.new_page()
# Spoof webdriver detection
self.page.add_init_script("""
Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]});
Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
""")
def google_login(self):
"""Perform Google login using the initialized page"""
# Navigate to Google login page
self.page.goto("https://accounts.google.com/ServiceLogin", wait_until="domcontentloaded")
# Fill email field
email_field = self.page.get_by_role("textbox", name="Email or phone")
email_field.click()
email_field.fill("mail@gmail.com")
self.page.get_by_role("button", name="Next").click()
def cleanup(self):
"""Clean up resources"""
self.context.close()
self.browser.close()
self.playwright.stop()
init = Init()
init.google_login()
input("Press any key to exit")
init.cleanup() # Cleanup when done