Metadata-Version: 2.1
Name: pyppeteerstealth
Version: 0.0.4
Summary: A general collection of robot-evading tweaks for pyppeteer-ng
Home-page: https://github.com/dgtlmoon/pyppeteerstealth
License: MIT
Keywords: pyppeteer,puppeteer,chrome,chromium,pyppeteerstealth,stealth,robot,captcha
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Project-URL: Bug Tracker, https://github.com/dgtlmoon/pyppeteerstealth/issues
Project-URL: Repository, https://github.com/dgtlmoon/pyppeteerstealth
Description-Content-Type: text/markdown

# pyppeteerstealth

A bunch of hacks from different websites

## Note!
- **Does not yet pass https://arh.antoinevastel.com/bots/areyouheadless** please help!
- Probably wont help where sites are using https://developer.mozilla.org/en-US/docs/Web/API/User-Agent_Client_Hints_API (`navigator.userAgentData.brands` etc)

__**If you know what is missing, please make a PR!!!**__

If you compare loading https://arh.antoinevastel.com/bots/ in your application, versus in your browser you might be able
to see what is required to get the fingerprint closer to a "normal" browser (further away from a "headless" browser)

This is intended to be used with https://github.com/dgtlmoon/pyppeteer-ng and is also part of the 
https://changedetection.io project.

```python
browser = await pyppeteer_instance.connect(browserWSEndpoint="ws://127.0.0.1:3000",
                                           ignoreHTTPSErrors=True
                                           )

self.page = (pages := await browser.pages) and len(pages) or await browser.newPage()
# Should be set with setUserAgent
user_agent = next((value for key, value in request_headers.items() if key.lower().strip() == 'user-agent'), DEFAULT_USER_AGENT)
await self.page.setUserAgent(user_agent)

try:
    from pyppeteerstealth import inject_evasions_into_page
except ImportError:
    logger.debug("pyppeteerstealth module not available, skipping")
    pass
else:
    await inject_evasions_into_page(self.page)

response = await self.page.goto("https://example.com", waitUntil="load")
```

Last report from https://bot.sannysoft.com/

![last fingerprint status](assets/last-screenshot.png "Last fingerprint status")


