I'm using Playwright with Chrome.
In other tools, one can easily change navigator.webdriver
like so:
Object.defineProperty(navigator, 'webdriver', { get: () => false });
In Playwright + Chrome (using .NET bindings, but same idea in Node / Python), I tried:
// attempt 1
await context.AddInitScriptAsync("""
Object.defineProperty(navigator, 'webdriver', { get: () => false });
""");
// attempt 2
await page.EvaluateAsync("""
Object.defineProperty(navigator, 'webdriver', { get: () => false });
""");
// attempt 3
await page.EvaluateAsync("""
delete Object.getPrototypeOf(navigator).webdriver;
Object.defineProperty(navigator, 'webdriver', { get: () => false });
""");
// attempt 4
await page.EvaluateAsync("""
const newProto = navigator.__proto__;
delete newProto.webdriver;
navigator.__proto__ = newProto;
""");
In all cases the browser still reports that it is using webdriver (e.g. here).
How do I do this with Playwright?