-
-
+
C H A T
-+
+
+
+
+ Task
+
+
+ No active task. Start a conversation to create a task.
+
+
Chat Interface
{messages.length === 0 ? (
- No messages yet. Type below to start!
@@ -205,9 +212,9 @@ function App() {
-
+ +
I N T E R F A C E
-+ +
+
)}
diff --git a/frontend/agentic-seek-front/src/colors.js b/frontend/agentic-seek-front/src/colors.js
new file mode 100644
index 0000000..7141ca4
--- /dev/null
+++ b/frontend/agentic-seek-front/src/colors.js
@@ -0,0 +1,63 @@
+export const colors = {
+ // Primary colors
+ primary: '#0066cc',
+ primaryLight: '#e6f2ff',
+ primaryDark: '#004c99',
+
+ // Secondary colors
+ secondary: '#6c757d',
+ secondaryLight: '#f8f9fa',
+ secondaryDark: '#343a40',
+
+ // Accent colors
+ accent: '#ff9500',
+ accentLight: '#fff4e6',
+ accentDark: '#cc7a00',
+
+ // Status colors
+ success: '#28a745',
+ successLight: '#e8f5e9',
+ warning: '#ffc107',
+ warningLight: '#fff9e6',
+ error: '#dc3545',
+ errorLight: '#ffebee',
+ info: '#17a2b8',
+ infoLight: '#e3f2fd',
+
+ // Neutral colors
+ white: '#ffffff',
+ gray100: '#f8f9fa',
+ gray200: '#e9ecef',
+ gray300: '#dee2e6',
+ gray400: '#ced4da',
+ gray500: '#adb5bd',
+ gray600: '#6c757d',
+ gray700: '#495057',
+ gray800: '#343a40',
+ gray900: '#212529',
+ black: '#000000',
+
+ // Text colors
+ textPrimary: '#212529',
+ textSecondary: '#6c757d',
+ textDisabled: '#adb5bd',
+
+ // Background colors
+ background: '#f8f8f8',
+ card: '#ffffff',
+
+ // Border colors
+ border: '#dee2e6',
+ divider: '#e9ecef',
+
+ // Transparent colors
+ transparent: 'transparent',
+ semiTransparent: 'rgba(0, 0, 0, 0.5)',
+
+ // Dark theme colors
+ darkBackground: '#0f172a',
+ darkCard: '#1e293b',
+ darkBorder: '#334155',
+ darkText: '#f8fafc',
+ darkTextSecondary: '#cbd5e1',
+};
diff --git a/sources/browser.py b/sources/browser.py
index 26429b7..5cc8165 100644
--- a/sources/browser.py
+++ b/sources/browser.py
@@ -56,6 +56,15 @@ def get_chrome_path() -> str:
return path
return None
+def get_random_user_agent() -> str:
+ """Get a random user agent string with associated vendor."""
+ user_agents = [
+ {"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36", "vendor": "Google Inc."},
+ {"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15", "vendor": "Apple Inc."},
+ {"ua": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0", "vendor": ""},
+ ]
+ return random.choice(user_agents)
+
def create_driver(headless=False, stealth_mode=True, crx_path="./crx/nopecha.crx") -> webdriver.Chrome:
"""Create a Chrome WebDriver with specified options."""
chrome_options = Options()
@@ -69,16 +78,16 @@ def create_driver(headless=False, stealth_mode=True, crx_path="./crx/nopecha.crx
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-webgl")
- #ua = UserAgent()
- #user_agent = ua.random # NOTE sometime return bad ua crash, investigate
- #chrome_options.add_argument(f'user-agent={user_agent}')
user_data_dir = tempfile.mkdtemp()
+ user_agent = get_random_user_agent()
chrome_options.add_argument(f"--user-data-dir={user_data_dir}")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
- chrome_options.add_argument("--autoplay-policy=user-gesture-required")
chrome_options.add_argument("--mute-audio")
chrome_options.add_argument("--disable-notifications")
+ chrome_options.add_argument("--autoplay-policy=user-gesture-required")
+ chrome_options.add_argument("--disable-blink-features=AutomationControlled")
+ chrome_options.add_argument(f'user-agent={user_agent["ua"]}')
resolutions = [(1920, 1080), (1366, 768), (1440, 900)]
width, height = random.choice(resolutions)
chrome_options.add_argument(f'--window-size={width},{height}')
@@ -98,20 +107,14 @@ def create_driver(headless=False, stealth_mode=True, crx_path="./crx/nopecha.crx
service = Service(chromedriver_path)
if stealth_mode:
+ chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = uc.Chrome(service=service, options=chrome_options)
- driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
- "source": """
- Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => Math.floor(Math.random() * 8) + 2 });
- Object.defineProperty(navigator, 'deviceMemory', { get: () => Math.floor(Math.random() * 8) + 2 });
- """
- })
+ driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
chrome_version = driver.capabilities['browserVersion']
- user_agent = f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chrome_version} Safari/537.36"
- chrome_options.add_argument(f'user-agent={user_agent}')
stealth(driver,
languages=["en-US", "en"],
- vendor="Google Inc.",
- platform="Win32",
+ vendor=user_agent["vendor"],
+ platform="Win64" if "Windows" in user_agent["ua"] else "MacIntel" if "Macintosh" in user_agent["ua"] else "Linux x86_64",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
@@ -598,12 +601,12 @@ if __name__ == "__main__":
input("press enter to continue")
print("AntiCaptcha / Form Test")
- #browser.go_to("https://practicetestautomation.com/practice-test-login/")
+ browser.go_to("https://www.browserscan.net/bot-detection")
#txt = browser.get_text()
#browser.go_to("https://www.google.com/recaptcha/api2/demo")
- browser.go_to("https://home.openweathermap.org/users/sign_up")
+ #browser.go_to("https://home.openweathermap.org/users/sign_up")
inputs_visible = browser.get_form_inputs()
print("inputs:", inputs_visible)
- inputs_fill = ['[q](checked)', '[q](checked)', '[user[username]](mlg)', '[user[email]](mlg.fcu@gmail.com)', '[user[password]](placeholder_P@ssw0rd123)', '[user[password_confirmation]](placeholder_P@ssw0rd123)']
- browser.fill_form(inputs_fill)
+ #inputs_fill = ['[q](checked)', '[q](checked)', '[user[username]](mlg)', '[user[email]](mlg.fcu@gmail.com)', '[user[password]](placeholder_P@ssw0rd123)', '[user[password_confirmation]](placeholder_P@ssw0rd123)']
+ #browser.fill_form(inputs_fill)
input("press enter to exit")