import pychrome
import base64
browser = pychrome.Browser(url="http://127.0.0.1:9222")
tab = browser.new_tab()
tab.start()
tab.call_method("Network.enable")
tab.call_method("Page.enable")
tab.call_method("Network.setUserAgentOverride", userAgent="Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36" )
scripts = [
"""
(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => false,
});
})()
""",
"""
(() => {
// We can mock this in as much depth as we need for the test.
window.navigator.chrome = {
runtime: {},
// etc.
};
})()
""",
"""
(() => {
const originalQuery = window.navigator.permissions.query;
return window.navigator.permissions.query = (parameters) => (
parameters.name === 'notifications' ?
Promise.resolve({ state: Notification.permission }) :
originalQuery(parameters)
);
})()
""",
"""
(() => {
// Overwrite the `plugins` property to use a custom getter.
Object.defineProperty(navigator, 'plugins', {
// This just needs to have `length > 0` for the current test,
// but we could mock the plugins too if necessary.
get: () => [1, 2, 3, 4, 5],
});
})()
""",
"""
(() => {
// Overwrite the `plugins` property to use a custom getter.
Object.defineProperty(navigator, 'languages', {
get: () => ['en-US', 'en'],
});
})()
"""
]
for s in scripts:
tab.call_method("Page.addScriptToEvaluateOnNewDocument", source=s )
#tab.call_method("Page.navigate", url="https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html", _timeout=5)
tab.call_method("Page.navigate", url="https://www.whitepages.com", _timeout=5)
tab.wait(2)
png = tab.call_method("Page.captureScreenshot")
with open("screenshot.png", "wb") as fh:
fh.write(base64.decodestring(png['data']))
fh.close()
tab.stop()
browser.close_tab(tab)