{"id":13469314,"url":"https://github.com/miyakogi/pyppeteer","last_synced_at":"2025-10-01T00:31:46.135Z","repository":{"id":71245926,"uuid":"101664683","full_name":"miyakogi/pyppeteer","owner":"miyakogi","description":"Headless chrome/chromium automation library (unofficial port of puppeteer)","archived":true,"fork":false,"pushed_at":"2021-08-05T11:47:49.000Z","size":4541,"stargazers_count":3565,"open_issues_count":153,"forks_count":369,"subscribers_count":100,"default_branch":"dev","last_synced_at":"2025-01-18T09:41:41.745Z","etag":null,"topics":["browser-automation","headless-chrome","puppeteer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miyakogi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-08-28T16:39:17.000Z","updated_at":"2025-01-18T00:11:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"f8adf01a-9c5c-43ed-997f-6d0eb4d74e74","html_url":"https://github.com/miyakogi/pyppeteer","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyakogi%2Fpyppeteer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyakogi%2Fpyppeteer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyakogi%2Fpyppeteer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyakogi%2Fpyppeteer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miyakogi","download_url":"https://codeload.github.com/miyakogi/pyppeteer/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234803427,"owners_count":18889252,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser-automation","headless-chrome","puppeteer"],"created_at":"2024-07-31T15:01:33.102Z","updated_at":"2025-10-01T00:31:45.573Z","avatar_url":"https://github.com/miyakogi.png","language":"Python","funding_links":[],"categories":["Python","Python (1887)","📚 فهرست","Tools"],"sub_categories":["وب اسکرپینگ"],"readme":"Pyppeteer\n=========\n\nPyppeteer has moved to [pyppeteer/pyppeteer](https://github.com/pyppeteer/pyppeteer)\n====================================================================================\n\n---\n\n[![PyPI](https://img.shields.io/pypi/v/pyppeteer.svg)](https://pypi.python.org/pypi/pyppeteer)\n[![PyPI version](https://img.shields.io/pypi/pyversions/pyppeteer.svg)](https://pypi.python.org/pypi/pyppeteer)\n[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://miyakogi.github.io/pyppeteer)\n[![Travis status](https://travis-ci.org/miyakogi/pyppeteer.svg)](https://travis-ci.org/miyakogi/pyppeteer)\n[![AppVeyor status](https://ci.appveyor.com/api/projects/status/nb53tkg9po8v1blk?svg=true)](https://ci.appveyor.com/project/miyakogi/pyppeteer)\n[![codecov](https://codecov.io/gh/miyakogi/pyppeteer/branch/master/graph/badge.svg)](https://codecov.io/gh/miyakogi/pyppeteer)\n\nUnofficial Python port of\n[puppeteer](https://github.com/GoogleChrome/puppeteer) JavaScript (headless)\nchrome/chromium browser automation library.\n\n* Free software: MIT license (including the work distributed under the Apache 2.0 license)\n* Documentation: https://miyakogi.github.io/pyppeteer\n\n## Installation\n\nPyppeteer requires python 3.6+.\n(experimentally supports python 3.5)\n\nInstall by pip from PyPI:\n\n```\npython3 -m pip install pyppeteer\n```\n\nOr install latest version from [github](https://github.com/miyakogi/pyppeteer):\n\n```\npython3 -m pip install -U git+https://github.com/miyakogi/pyppeteer.git@dev\n```\n\n## Usage\n\n\u003e **Note**: When you run pyppeteer first time, it downloads a recent version of Chromium (~100MB).\n\u003e If you don't prefer this behavior, run `pyppeteer-install` command before running scripts which uses pyppeteer.\n\n**Example**: open web page and take a screenshot.\n\n```py\nimport asyncio\nfrom pyppeteer import launch\n\nasync def main():\n    browser = await launch()\n    page = await browser.newPage()\n    await page.goto('http://example.com')\n    await page.screenshot({'path': 'example.png'})\n    await browser.close()\n\nasyncio.get_event_loop().run_until_complete(main())\n```\n\n**Example**: evaluate script on the page.\n\n```py\nimport asyncio\nfrom pyppeteer import launch\n\nasync def main():\n    browser = await launch()\n    page = await browser.newPage()\n    await page.goto('http://example.com')\n    await page.screenshot({'path': 'example.png'})\n\n    dimensions = await page.evaluate('''() =\u003e {\n        return {\n            width: document.documentElement.clientWidth,\n            height: document.documentElement.clientHeight,\n            deviceScaleFactor: window.devicePixelRatio,\n        }\n    }''')\n\n    print(dimensions)\n    # \u003e\u003e\u003e {'width': 800, 'height': 600, 'deviceScaleFactor': 1}\n    await browser.close()\n\nasyncio.get_event_loop().run_until_complete(main())\n```\n\nPyppeteer has almost same API as puppeteer.\nMore APIs are listed in the\n[document](https://miyakogi.github.io/pyppeteer/reference.html).\n\n[Puppeteer's document](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#)\nand [troubleshooting](https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md) are also useful for pyppeteer users.\n\n## Differences between puppeteer and pyppeteer\n\nPyppeteer is to be as similar as puppeteer, but some differences between python\nand JavaScript make it difficult.\n\nThese are differences between puppeteer and pyppeteer.\n\n### Keyword arguments for options\n\nPuppeteer uses object (dictionary in python) for passing options to\nfunctions/methods. Pyppeteer accepts both dictionary and keyword arguments for\noptions.\n\nDictionary style option (similar to puppeteer):\n\n```python\nbrowser = await launch({'headless': True})\n```\n\nKeyword argument style option (more pythonic, isn't it?):\n\n```python\nbrowser = await launch(headless=True)\n```\n\n### Element selector method name (`$` -\u003e `querySelector`)\n\nIn python, `$` is not usable for method name.\nSo pyppeteer uses\n`Page.querySelector()`/`Page.querySelectorAll()`/`Page.xpath()` instead of\n`Page.$()`/`Page.$$()`/`Page.$x()`. Pyppeteer also has shorthands for these\nmethods, `Page.J()`, `Page.JJ()`, and `Page.Jx()`.\n\n### Arguments of `Page.evaluate()` and `Page.querySelectorEval()`\n\nPuppeteer's version of `evaluate()` takes JavaScript raw function or string of\nJavaScript expression, but pyppeteer takes string of JavaScript. JavaScript\nstrings can be function or expression. Pyppeteer tries to automatically detect\nthe string is function or expression, but sometimes it fails. If expression\nstring is treated as function and error is raised, add `force_expr=True` option,\nwhich force pyppeteer to treat the string as expression.\n\nExample to get page content:\n\n```python\ncontent = await page.evaluate('document.body.textContent', force_expr=True)\n```\n\nExample to get element's inner text:\n\n```python\nelement = await page.querySelector('h1')\ntitle = await page.evaluate('(element) =\u003e element.textContent', element)\n```\n\n## Future Plan\n\n1. Catch up development of puppeteer\n    * Not intend to add original API which puppeteer does not have\n\n## Credits\n\nThis package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) project template.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyakogi%2Fpyppeteer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiyakogi%2Fpyppeteer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyakogi%2Fpyppeteer/lists"}