BrowserAct-ന്റെ സ്റ്റെൽത്ത് ബ്രൗസർ (stealth browser) ബോട്ട് ഡിറ്റക്ഷൻ പരിശോധനയിൽ വിജയിച്ചു; Playwright-ന്റെ ഡിഫോൾട്ട് ഹെഡ്‌ലെസ് റൺ (headless run) ഒരു ബോട്ട് ആണെന്ന് കണ്ടെത്തിയപ്പോൾ ഇത് സംഭവിച്ചു എന്നത് ശ്രദ്ധേയമാണ്. രണ്ട് സ്ക്രിപ്റ്റുകളും ഒരേ ലോഗിൻ പ്രക്രിയയാണ് പൂർത്തിയാക്കിയത് എന്നത് കൊണ്ട്, ഓട്ടോമേഷനെ തടയാൻ ശ്രമിക്കുന്ന വെബ്‌സൈറ്റുകളുമായി ഇടപഴകേണ്ടി വരുമ്പോൾ ഒരു ഏജന്റ് അധിഷ്ഠിത സമീപനം (agent-based approach) എന്തുകൊണ്ട് കൂടുതൽ സുരക്ഷിതമാകുന്നു എന്ന് ഈ വ്യത്യാസം കാണിച്ചുതരുന്നു.

ഈ പരിശോധനയുടെ പ്രാധാന്യം

ടെസ്റ്റിംഗ്, ഡാറ്റാ ശേഖരണം, അക്കൗണ്ട് മാനേജ്‌മെന്റ് എന്നിവയ്ക്കായി ഓട്ടോമേഷൻ ടൂളുകൾ ഉപയോഗിക്കുന്നു. Playwright പോലുള്ള സെലക്ടർ അധിഷ്ഠിത ഫ്രെയിംവർക്കുകൾ (selector-driven frameworks) മിക്ക ഡെവലപ്പർമാരും തിരഞ്ഞെടുക്കുന്നത് അവ ഉപയോഗിച്ച് കൃത്യമായ നിർദ്ദേശങ്ങൾ നൽകാൻ സാധിക്കുന്നതുകൊണ്ടാണ്—ഉദാഹരണത്തിന്, “ഈ CSS സെലക്ടറുള്ള ബട്ടൺ ക്ലിക്ക് ചെയ്യുക”—കൂടാതെ ഫലങ്ങൾ വേഗത്തിൽ പരിശോധിക്കാനും സാധിക്കും. എന്നാൽ, ആധുനിക വെബ്‌സൈറ്റുകൾ ഹെഡ്‌ലെസ് ബ്രൗസറുകളെ തിരിച്ചറിയാൻ സ്ക്രിപ്റ്റുകൾ ഉൾപ്പെടുത്താറുണ്ട്: ഒരു ജനറിക് യൂസർ-ഏജന്റ് സ്ട്രിംഗ് (user-agent string), webdriver പ്രോപ്പർട്ടി, അല്ലെങ്കിൽ മനുഷ്യസമാനമായ ഇടപെടലുകളുടെ അഭാവം എന്നിവ ഇതിലൂടെ കണ്ടെത്താം. ഇത്തരം സൂചനകൾ ലഭിക്കുമ്പോൾ, സൈറ്റ് ആ റിക്വസ്റ്റ് ബ്ലോക്ക് ചെയ്യുകയോ CAPTCHA കാണിക്കുകയോ ചെയ്യുന്നു, ഇത് സ്ക്രിപ്റ്റിന്റെ പ്രവർത്തനത്തെ ഫലപ്രദമായി തടയുന്നു.

ഏജന്റ് ബ്രൗസറുകൾ മുൻകൂട്ടി എഴുതിയ സെലക്ടറുകളെ ആശ്രയിക്കാതെ ഒരു മനുഷ്യ ഉപയോക്താവിനെ അനുകരിക്കാൻ ശ്രമിക്കുന്നു. അവ ഒരു പേജിനെ പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന ഘടകങ്ങളുടെ (actionable elements) ഒരു കൂട്ടമായി കാണുന്നു; ഒരു CSS പാത്തിന് പകരം ആന്തരിക ഇൻഡക്സിലെ (internal index) സ്ഥാനമനുസരിച്ചാണ് അവ ഓരോ ഘടകത്തെയും തിരഞ്ഞെടുക്കുന്നത്. ഒരു JavaScript-റെൻഡർ ചെയ്ത ലോഗിൻ പേജിലും ബോട്ട് പരിശോധനകൾ നടത്തുന്ന ഒരു സൈറ്റിലും ഈ രണ്ട് സമീപനങ്ങളെയും ഈ പരീക്ഷണം താരതമ്യം ചെയ്തു.

പരീക്ഷണം

ഒരേ ഘട്ടങ്ങൾ തന്നെ ചെയ്യുന്ന രണ്ട് സ്ക്രിപ്റ്റുകൾ ഞാൻ എഴുതി: ലോഗിൻ പേജ് ലോഡ് ചെയ്യുക, ക്രെഡൻഷ്യലുകൾ നൽകുക, സബ്മിറ്റ് ചെയ്യുക, ഇൻവെന്ററി പേജിൽ എത്തുക. ഒരു സ്ക്രിപ്റ്റ് Playwright-ന്റെ ഡിഫോൾട്ട് ഹെഡ്‌ലെസ് മോഡും, മറ്റേത് ബോട്ട് ഡിറ്റക്ഷൻ ഉണ്ടാക്കുന്ന ഫിംഗർപ്രിന്റുകൾ മറച്ചുവെക്കുന്ന BrowserAct-ന്റെ സ്റ്റെൽത്ത് ബ്രൗസറുമാണ് ഉപയോഗിച്ചത്.

രണ്ട് സ്ക്രിപ്റ്റുകളും ഒരു സാൻഡ്ബോക്സ് സൈറ്റിൽ (sandbox site) വിജയകരമായി ലോഗിൻ ചെയ്തു, ഇത് ഏത് ടൂൾ ഉപയോഗിച്ചാലും അടിസ്ഥാന ലോഗിൻ പ്രക്രിയ പ്രവർത്തിക്കുമെന്ന് തെളിയിക്കുന്നു. എന്നാൽ, isBot എന്ന JSON ഫ്ലാഗ് നൽകുന്ന ഒരു ബോട്ട്-ഡിറ്റക്ഷൻ പേജ് സന്ദർശിച്ചപ്പോൾ ഇവ തമ്മിലുള്ള വ്യത്യാസം പ്രകടമായി. Playwright isBot: true എന്ന് റിപ്പോർട്ട് ചെയ്തു, അഞ്ച് വ്യത്യസ്ത ഡിറ്റക്ഷൻ പരിശോധനകളിൽ അത് പരാജയപ്പെട്ടു. എന്നാൽ BrowserAct isBot: false എന്ന് നൽകി, അതായത് ആ പേജ് അതിനെ ഒരു സാധാരണ മനുഷ്യ ഉപയോക്താവായിട്ടാണ് പരിഗണിച്ചത്.

ഈ വ്യത്യാസത്തിന് പിന്നിലെ രണ്ട് സാങ്കേതിക കാരണങ്ങൾ ഞാൻ കണ്ടെത്തി. Playwright-ന്റെ ഡിഫോൾട്ട് കോൺഫിഗറേഷൻ ഒരു ജനറിക് യൂസർ-ഏജന്റ് സ്ട്രിംഗ് അയക്കുകയും webdriver ഫ്ലാഗ് വെളിപ്പെടുത്തുകയും ചെയ്യുന്നു—ഇവ രണ്ടും ഒരു ഡിറ്റക്ഷൻ സ്ക്രിപ്റ്റിന് എളുപ്പത്തിൽ കണ്ടെത്താൻ സാധിക്കും. എന്നാൽ BrowserAct-ന്റെ സ്റ്റെൽത്ത് മോഡ് യൂസർ-ഏജന്റ് മാറ്റിയെഴുതുകയും, webdriver പ്രോപ്പർട്ടി നീക്കം ചെയ്യുകയും, അതിന്റെ ഫിംഗർപ്രിന്റ് ഒരു സാധാരണ ഡെസ്ക്ടോപ്പ് ബ്രൗസറിന്റേതിന് സമാനമാക്കുകയും ചെയ്യുന്നു.

ടൂളുകൾ തമ്മിലുള്ള സാങ്കേതിക വ്യത്യാസങ്ങൾ

വശം (Aspect) Playwright (default) BrowserAct (stealth)
ഇന്ററാക്ഷൻ മോഡൽ (Interaction model) സെലക്ടർ അധിഷ്ഠിതം, ഡിറ്റർമിനിസ്റ്റിക് (Selector-driven, deterministic) ഏജന്റ് അധിഷ്ഠിതം, ഇൻഡക്സ് അടിസ്ഥാനമാക്കിയത് (Agent-driven, index-based)
മുൻകൂട്ടി എഴുതിയ സെലക്ടറുകളുടെ ആവശ്യം നിർബന്ധം; സ്ക്രിപ്റ്റിന് കൃത്യമായ DOM ഘടന അറിയണം ആവശ്യമില്ല; ഏജന്റ് റൺടൈമിൽ പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന ഘടകങ്ങൾ കണ്ടെത്തുന്നു
ലേഔട്ട് മാറ്റങ്ങൾ കൈകാര്യം ചെയ്യുന്നത് സെലക്ടറുകൾ മാറിയാൽ സ്ക്രിപ്റ്റ് പരാജയപ്പെടും ഘടകങ്ങളുടെ സ്ഥാനം ഇൻഡക്സ് ലിസ്റ്റിൽ ഉള്ളിടത്തോളം കാലം പ്രവർത്തിക്കും
ബോട്ട് പരിശോധനകൾ നേരിടുന്നത് യൂസർ-ഏജന്റും webdriver-ഉം മാറ്റമില്ലാതെ തുടരുന്നു ഫിംഗർപ്രിന്റുകൾ മനഃപൂർവ്വം മറച്ചുവെക്കുന്നു
സാധാരണ ഉപയോഗം ഇന്റേണൽ സൈറ്റുകൾ, സ്ഥിരതയുള്ള UI, വേഗത്തിലുള്ള ടെസ്റ്റ് സൈക്കിളുകൾ ആന്റി-ഓട്ടോമേഷൻ സംവിധാനങ്ങളുള്ള പബ്ലിക് സൈറ്റുകൾ, നിരന്തരം മാറിക്കൊണ്ടിരിക്കുന്ന പേജുകൾ

ഈ പട്ടിക പ്രായോഗികമായ ഗുണദോഷങ്ങളെ വ്യക്തമാക്കുന്നു. വെബ്‌സൈറ്റ് നിങ്ങളുടെ നിയന്ത്രണത്തിലാണെങ്കിൽതും ഘടകങ്ങൾ (elements) സ്ഥിരമാണെന്ന് ഉറപ്പാക്കാൻ കഴിയുമെങ്കിൽതും Playwright മികച്ചതാണ്. എന്നാൽ പേജിന്റെ ഘടന മുൻകൂട്ടി പ്രവചിക്കാൻ കഴിയില്ലെങ്കിലോ സൈറ്റ് സ്ക്രിപ്റ്റുകളെ തടയാൻ സജീവമായി ശ്രമിക്കുന്നുണ്ടെങ്കിലോ ഒരു ഏജന്റ് ബ്രൗസർ കൂടുതൽ ഫലപ്രദമാണ്.

ആർക്കൊക്കെ ഗുണമുണ്ടാകും, ആർക്കൊക്കെ റിസ്ക് ഉണ്ട്?

സ്വന്തം ആപ്ലിക്കേഷനുകൾക്കായി റിഗ്രഷൻ സ്യൂട്ടുകൾ (regression suites) നിർമ്മിക്കുന്ന ഡെവലപ്പർമാർക്ക് Playwright ഉപയോഗിക്കുന്നതിലൂടെ ചിലവ് കുറയ്ക്കാനും ടെസ്റ്റ് വേഗത വർദ്ധിപ്പിക്കാനും സാധിക്കും. ഇതിന്റെ ഡിറ്റർമിനിസ്റ്റിക് സ്വഭാവം പരാജയങ്ങൾ നേരിട്ട് കോഡ് റിഗ്രഷനുകളിലേക്ക് ചൂണ്ടിക്കാണിക്കുന്നു, കൂടാതെ അധികമായ സ്റ്റെൽത്ത് ലെയറുകളുടെ അഭാവം സങ്കീർണ്ണത കുറയ്ക്കുന്നു.

നേരെമറിച്ച്, ഡാറ്റാ സ്ക്രാപ്പിംഗ് (data scraping), അക്കൗണ്ട് നിർമ്മാണം ഓട്ടോമേറ്റ് ചെയ്യുക, അല്ലെങ്കിൽ എതിരാളികളുടെ സൈറ്റുകൾ നിരീക്ഷിക്കുക എന്നിവ ചെയ്യുന്ന ടീമുകൾക്ക് പലപ്പോഴും തടസ്സങ്ങൾ നേരിടേണ്ടി വരാറുണ്ട്; കാരണം ടാർഗെറ്റ് പേജുകൾ ഇടയ്ക്കിടെ മാറിക്കൊണ്ടിരിക്കുകയോ ശക്തമായ ബോട്ട് ഡിറ്റക്ഷൻ സംവിധാനങ്ങൾ ഉണ്ടാവുകയോ ചെയ്യുന്നു. അത്തരം സാഹചര്യങ്ങളിൽ, ഒരു ഏജന്റ് ബ്രൗസർ "നിങ്ങൾ ഒരു ബോട്ട് ആണ്" എന്ന തടസ്സത്തിൽ പെടാതെ ആവശ്യമായ ഡാറ്റയിലേക്ക് മുന്നോട്ട് പോകാൻ സഹായിക്കുന്നു.

“ഇത് പ്രവർത്തിച്ചു” എന്നതിലെ മറഞ്ഞിരിക്കുന്ന ചിലവുകൾ

ഒരു സ്ക്രിപ്റ്റ് വിജയകരമായി പൂർത്തിയാകുന്നു എന്നത് അത് ഉദ്ദേശിച്ച രീതിയിൽ പ്രവർത്തിച്ചു എന്ന് ഉറപ്പുനൽകുന്നില്ലെന്ന് ഞാൻ മുന്നറിയിപ്പ് നൽകുന്നു. Playwright റണ്ണിൽ, സ്ക്രിപ്റ്റ് ഒരു എറർ പോലും കാണിക്കാതെ പൂർത്തിയായി, എങ്കിലും ആ പേജ് ആ റിക്വസ്റ്റിനെ ഒരു ബോട്ട് ആയിട്ടാണ് കണക്കാക്കിയത്. ഇതിന്റെ ഫലമായി ഉണ്ടായ മറഞ്ഞിരിക്കുന്ന പരാജയം ഇതാണ്: മനുഷ്യർക്ക് മാത്രം ലഭ്യമാകുന്ന ഉള്ളടക്കത്തെ ആശ്രയിക്കുന്ന തുടർന്നുള്ള ഘട്ടങ്ങൾക്ക് (downstream steps) പ്രതീക്ഷിച്ച ഡാറ്റ ലഭിച്ചില്ല.

ഇത്തരം നിശബ്ദമായ പരാജയങ്ങൾ കണ്ടെത്താൻ, ഓരോ റണ്ണിന് ശേഷവും പേജ് തെളിവുകൾ പരിശോധിക്കുക: scroll position, document height, കൂടാതെ network calls എന്നിവ ശ്രദ്ധിക്കുക. ഒരു മനുഷ്യൻ കാണുന്നതിൽ നിന്ന് വ്യത്യസ്തമാണ് DOM എന്ന് തോന്നിയാലോ, അല്ലെങ്കിൽ network traffic-ൽ വെരിഫിക്കേഷൻ ചലഞ്ചുകളിലേക്കുള്ള (verification challenges) അപ്രതീക്ഷിത റീഡയറക്റ്റുകൾ ഉൾപ്പെട്ടിട്ടുണ്ടെങ്കിലോ, ഓട്ടോമേഷൻ അതിന്റെ ലക്ഷ്യം കൈവിട്ടുപോയിട്ടുണ്ടാകാം.

ചുരുക്കത്തിൽ

നിങ്ങൾ സൈറ്റിന്റെ ഉടമയാണെങ്കിൽ കൂടാതെ stable selectors ഉപയോഗിച്ച് സ്ക്രിപ്റ്റ് ചെയ്യാൻ കഴിയുമെങ്കിൽ, Playwright ആണ് പ്രായോഗികമായ തിരഞ്ഞെടുപ്പ്—ഇത് വേഗതയേറിയതും, ചിലവ് കുറഞ്ഞതും, CI pipelines-ൽ എളുപ്പത്തിൽ സംയോജിപ്പിക്കാൻ കഴിയുന്നതുമാണ്. അറിയപ്പെടാത്ത ലേഔട്ടുകൾ, ശക്തമായ anti-automation പ്രതിരോധങ്ങൾ, അല്ലെങ്കിൽ ഇടയ്ക്കിടെയുള്ള UI മാറ്റങ്ങൾ എന്നിവ നേരിടേണ്ടി വരുമ്പോൾ, BrowserAct പോലുള്ള ഒരു agent browser കൂടുതൽ കരുത്തുറ്റ ഒരു മാർഗ്ഗം വാഗ്ദാനം ചെയ്യുന്നു. ഒരു റൺ വിജയകരമായി പൂർത്തിയായി എന്നതുകൊണ്ട് മാത്രം അത് കണ്ണടച്ച് വിശ്വസിക്കരുത്; പേജ് ഒരു മനുഷ്യൻ പ്രവർത്തിക്കുന്നത് പോലെയാണോ പ്രവർത്തിക്കുന്നത് എന്ന് പരിശോധിക്കുക, കൂടാതെ നിങ്ങളുടെ ടാർഗെറ്റ് സൈറ്റിന്റെ risk profile-ന് അനുയോജ്യമായ ടൂൾ തിരഞ്ഞെടുക്കുക.