{ "info": { "author": "Connor Wolf", "author_email": "github@imaginaryindustries.com", "bugtrack_url": null, "classifiers": [], "description": "### Chrome Remote Control interface and debug protocol and toolkit. [![Build Status](https://travis-ci.org/fake-name/ChromeController.svg?branch=master)](https://travis-ci.org/fake-name/ChromeController)[![Coverage Status](https://img.shields.io/coveralls/fake-name/ChromeController.svg)](https://coveralls.io/r/fake-name/ChromeController)\n\nNOTE: Tests are currently broken due to an upstream Chromium bug: https://bugs.chromium.org/p/chromium/issues/detail?id=849972\n\nThe one-stop-shop for using google-chrome and/or chromium from python. With ChromeController you have\ncomplete access to the entire debugging interface you'd get from javascript, but in a language that \ndoesn't make one want to go become a sheep herder instead.\n\nProcess lifecycle management, tab management, plus the complete chrome remote debugging \ninterface is exposed through to python.\n\nAutomatically updates via automatic code generation by parsing the remote debugging protocol\ndescripion json files. \n\n#### Quickstart:\n\n```python\nimport ChromeController\n\nwith ChromeController.ChromeContext(binary=\"google-chrome\") as cr:\n \n # Do a blocking navigate to a URL, and get the page content as served by the remote\n # server, with no modification by local javascript (if applicable)\n raw_source = cr.blocking_navigate_and_get_source(\"http://www.google.com\")\n \n # Since the page is now rendered by the blocking navigate, we can\n # get the page source after any javascript has modified it.\n rendered_source = cr.get_rendered_page_source()\n \n # We can get the current browser URL, after any redirects.\n current_url = cr.get_current_url()\n \n # We can get the page title as the browser sees it.\n page_title, page_url = cr.get_page_url_title()\n \n # Or take a screenshot\n # The screenshot is the size of the remote browser's configured viewport,\n # which by default is set to 1024 * 1366. This size can be changed via the\n # Emulation_setVisibleSize(width, height) function if needed.\n png_bytestring = cr.take_screeshot()\n \n \n # We can spoof user-agent headers:\n new_headers = {\n 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36,gzip(gfe)', \n 'Accept-Language' : 'en-us, en;q=1.0,fr-ca, fr;q=0.5,pt-br, pt;q=0.5,es;q=0.5', \n 'Accept' : 'image/png, text/plain;q=0.8, text/html;q=0.9, application/xhtml+xml, application/xml, */*;q=0.1', \n 'Accept-Encoding' : 'gzip,deflate',\n }\n cr.update_headers(new_headers)\n \n \n # We can extract the cookies from the remote browser.\n # This call returns a list of python http.cookiejar.Cookie cookie\n # objects (the Chrome cookies are converted to python cookies).\n cookie_list = cr.get_cookies()\n \n # We can also set cookies in the remote browser.\n # Again, this interacts with http.cookiejar.Cookie() objects\n # directly.\n cook = http.cookiejar.Cookie()\n cr.set_cookie(cook)\n\n # We can create more tabs in the current browser context.\n # Note that these additional tabs are scoped to the same lifetime as the original \n # chromium object (`cr`), so they will become invalid after leaving the \n # ChromeContext() context manager.\n tab_2 = cr.new_tab()\n tab_3 = cr.new_tab()\n\n # At this time, multiple tabs are not thread safe, so they *probably* shouldn't \n # be accessed concurrently. This *is* something that I'd like to change.\n\n```\n\nThis library makes extensive use of the python `logging` framework, and logs to \nthe `Main.ChromeController.*` log path.\n\nAutomatic wrapper class creation for the remote interface by parsing\nthe chrome `protocol.json` file, and dynamic code generation through dynamic \nAST building. While this is not the most maintainable design, I chose it mostly\nbecause I wanted an excuse to learn/experiment with python AST manipulation.\n\nA higher level automation layer is implemented on top of the autogenerated \nwrapper. Both the higher-level interface, and it's associated documentation are \nvery much a work in process at the moment.\n\nInterface documentation is here: \nhttps://fake-name.github.io/ChromeController/ChromeController.ChromeRemoteDebugInterface.html\n\nAll remote methods are wrapped in named functions, with (partial) validation \nof passed parameter types and return types.\nRight now, simple parameter type validation is done (e.g. text arguments must be\nof type string, numeric arguments must be either an int or a float, etc..). \nHowever, the compound type arguments (bascally, anything that takes an array \nor object) are not validated, due to the complexity of properly constructing \ntype validators for their semantics given the architecture (read: writing the\nvalidator in raw AST broke my brain).\n\nTested mostly on python 3.5, 3.6, lightly on 3.4 and 3.7, all on linux. If you are \nusing python 2, please stahp. It works with normal chromium and on windows, \nbut that has only been very lightly used. My test-target is the \ngoogle-provided `chrome` binary.\n\nNote that this tool generates and manipulates the AST directly, so it is \nEXTREMELY sensitive to implementation details. It is *probably* broken on \npython > 3.7 or < 3.4.\n\nTransport layer (originally) from https://github.com/minektur/chrome_remote_shell\n\nThe library also has a relatively useful CLI interface, principally useful for \ndoing things like fetching pages which have jerberscript-rendered content:\n\n```\n python3 -m ChromeController --help\nUsage: __main__.py [OPTIONS] COMMAND [ARGS]...\n\n ChromeController\n\n Usage: python3 -m ChromeController [-s | --silent] [-v | --verbose]\n python3 -m ChromeController fetch [--binary ] [--outfile ]\n python3 -m ChromeController update\n python3 -m ChromeController (-h | --help)\n python3 -m ChromeController --version\n\n Options:\n -s --silent Suppress all output aside from the fetched content\n This basically makes ChromeController act like a alternative to curl\n -v --verbose The opposite of silent. Causes the internal logging to output\n all traffic over the chromium control interface. VERY noisy.\n --version Show version.\n fetch Fetch a specified URL's content, and output it to the console.\n\n\nOptions:\n -v, --verbose The opposite of silent. Causes the internal logging to output\n all traffic over the chromium control interface. VERY noisy.\n -s, --silent Suppress all output aside from the fetched content.\n This can be used to make ChromeController act like\n an alternative to curl with proper JS rendering.\n --help Show this message and exit.\n\nCommands:\n fetch Fetch a specified URL's content, and output...\n update Update the generated class\n version Print the ChromeController Version\n\n```\n\n\n\nLicense:\nBSD\n\n\n\n\n------\n\nCurrent Usage so far has been basically to find bugs or strangeness in the \nchromium remote debug interface:\n\n - Strange Behaviour is `network.getCookies` (fixed) \n https://bugs.chromium.org/p/chromium/issues/detail?id=668932\n - `network.clearBrowserCookies` appears to have no effect \n https://bugs.chromium.org/p/chromium/issues/detail?id=672744\n - Overriding accept header fails \n https://bugs.chromium.org/p/chromium/issues/detail?id=849972", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fake-name/ChromeController", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "ChromeController", "package_url": "https://pypi.org/project/ChromeController/", "platform": "", "project_url": "https://pypi.org/project/ChromeController/", "project_urls": { "Homepage": "https://github.com/fake-name/ChromeController" }, "release_url": "https://pypi.org/project/ChromeController/0.3.10/", "requires_dist": null, "requires_python": "", "summary": "Chrome Remote Debugger interface.", "version": "0.3.10" }, "last_serial": 5543046, "releases": { "0.1.10": [ { "comment_text": "", "digests": { "md5": "94f7c5c25a346da10dc61d41187e6b18", "sha256": "5f65a48f0f20820ddae03f87264bd48643ee9e55b2ea037765d5cd626784c8da" }, "downloads": -1, "filename": "ChromeController-0.1.10.tar.gz", "has_sig": false, "md5_digest": "94f7c5c25a346da10dc61d41187e6b18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124102, "upload_time": "2018-03-28T01:08:12", "url": "https://files.pythonhosted.org/packages/0d/6b/e996ba2b5662f884e2d89058a314b031b4a8c351908d9d3ff6dee979539f/ChromeController-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "e4625ee070565b28dafd741bc025fa8d", "sha256": "5d0700176f085d262b314b79a025eee7f480b6c01464dec9c8825c3724b6998b" }, "downloads": -1, "filename": "ChromeController-0.1.11.tar.gz", "has_sig": false, "md5_digest": "e4625ee070565b28dafd741bc025fa8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122037, "upload_time": "2018-03-28T01:18:05", "url": "https://files.pythonhosted.org/packages/7a/ea/50dfe71c031b39ae4fe08a155487fe5bdfcf531a5f8fe207bcd60d1f156f/ChromeController-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "8d671c770f2e6ab8aab05535c28024c1", "sha256": "0a0f836105e770aa5a6ba2767230ad4ffa762376785393c19fa1a3961c03b10b" }, "downloads": -1, "filename": "ChromeController-0.1.12.tar.gz", "has_sig": false, "md5_digest": "8d671c770f2e6ab8aab05535c28024c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122129, "upload_time": "2018-03-28T01:30:45", "url": "https://files.pythonhosted.org/packages/85/78/08e5178a23ecc928db81e0dbf869ac9a358129551296800ae54fb81e12c8/ChromeController-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "9e8e419fc9d8f8f6c0349eb1710cd3ed", "sha256": "de3df88c88c965055936fae48dede9b45f764494902fe0b322e54c90a418bed1" }, "downloads": -1, "filename": "ChromeController-0.1.13.tar.gz", "has_sig": false, "md5_digest": "9e8e419fc9d8f8f6c0349eb1710cd3ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122349, "upload_time": "2018-03-28T06:33:57", "url": "https://files.pythonhosted.org/packages/b3/20/bc99a98c6007ab4c2471469b1d6f9b5ce96137a8e71be619d87eb6a43907/ChromeController-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "4e3baffd73c92d38fc82af763211f9ad", "sha256": "cb0d7bacd70186039ce20ad044a3dcb4a3e7da114f1467db88bfd63b22d1628f" }, "downloads": -1, "filename": "ChromeController-0.1.14.tar.gz", "has_sig": false, "md5_digest": "4e3baffd73c92d38fc82af763211f9ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124418, "upload_time": "2018-03-28T06:53:27", "url": "https://files.pythonhosted.org/packages/c1/1b/22212dfa4ed7debb216804f2884288ad102f1285fdfb75de7d6c7e44a430/ChromeController-0.1.14.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "98e20ef9e034c8f282a1e99e183ff4e3", "sha256": "343a45797006b6299f1f9a360a386e0e0a38634a9c3e08d140e6d2ad586bed55" }, "downloads": -1, "filename": "ChromeController-0.1.19.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "98e20ef9e034c8f282a1e99e183ff4e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206970, "upload_time": "2018-06-05T03:16:28", "url": "https://files.pythonhosted.org/packages/2a/ee/b7c641c619d8fd8f32aa157606b798191b98446e042f56204ec338bc020d/ChromeController-0.1.19.linux-x86_64.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "355bf75d60f13439f3888a828a7b2cf4", "sha256": "c7c5ef35c78b755ed22d20e33513499d680d859d9e6ca340055f7603d8cb197f" }, "downloads": -1, "filename": "ChromeController-0.1.4.tar.gz", "has_sig": false, "md5_digest": "355bf75d60f13439f3888a828a7b2cf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 121272, "upload_time": "2018-01-29T06:55:21", "url": "https://files.pythonhosted.org/packages/c6/39/b4e54c76f0902460512b07f6c3b90d63363c037a671c572bd035c36e4451/ChromeController-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "fbeeb973065752067103b9d6c6260e02", "sha256": "3e22c94db01881cecbfb43717966f8132d7d86bda74d1670c0706e4318fef390" }, "downloads": -1, "filename": "ChromeController-0.1.5.tar.gz", "has_sig": false, "md5_digest": "fbeeb973065752067103b9d6c6260e02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123143, "upload_time": "2018-01-29T07:12:52", "url": "https://files.pythonhosted.org/packages/8e/e1/1f23b7246a0bcfb5b9162d599408d6cd49cb3a950eb049a37dcf675565c8/ChromeController-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "1c940752a675966184285e8fea1eb744", "sha256": "5a6c4e073b2aa36f32c7e9c3c334d89ecd72a7e7172c7321fe64e592f984f017" }, "downloads": -1, "filename": "ChromeController-0.1.6.tar.gz", "has_sig": false, "md5_digest": "1c940752a675966184285e8fea1eb744", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123240, "upload_time": "2018-02-01T05:34:53", "url": "https://files.pythonhosted.org/packages/d0/78/37a3ea9851bb221ed9493052e3218f9f2864e8392f520bfdf8e6ab183789/ChromeController-0.1.6.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "028599f164fb7cf3e35dab2e86a829f2", "sha256": "1a7438ba7cf7863c187010337d6338645e8e16ea14b5ec9eb697219d3e240a76" }, "downloads": -1, "filename": "ChromeController-0.1.8.tar.gz", "has_sig": false, "md5_digest": "028599f164fb7cf3e35dab2e86a829f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123255, "upload_time": "2018-03-27T03:34:14", "url": "https://files.pythonhosted.org/packages/fc/ad/7e2994774fc22738a42af6f035406e88326524d33b243b2dd213b33527bd/ChromeController-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "cc34d896577ee50e448e00fb2d4ac5f3", "sha256": "7357fbbc0cbaa7144a5eb62742e6611d0a4601c199d9d59d74f0b05bd26617a1" }, "downloads": -1, "filename": "ChromeController-0.1.9.tar.gz", "has_sig": false, "md5_digest": "cc34d896577ee50e448e00fb2d4ac5f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124086, "upload_time": "2018-03-28T00:05:03", "url": "https://files.pythonhosted.org/packages/90/44/17f6d91bab10c24a0d239a3af674304b2b7ffd83906ab311666318019652/ChromeController-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7d61f51d8fed0076b887914bd5473ba4", "sha256": "ad7038a042a63e6ff242b0222d14c2acfe9103e5ff616655685ae68d2e768133" }, "downloads": -1, "filename": "ChromeController-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7d61f51d8fed0076b887914bd5473ba4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 126074, "upload_time": "2018-06-05T03:22:58", "url": "https://files.pythonhosted.org/packages/76/54/263a2cfe72111bba63e90d5a55b351d12236371e08daf49a56cc63173583/ChromeController-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "33e29726da4e964913db20c9c9010747", "sha256": "f34b9e16d222b8a0d190f661865d072894aa43b306572fb0d6f7880ea4041e5b" }, "downloads": -1, "filename": "ChromeController-0.2.1.tar.gz", "has_sig": false, "md5_digest": "33e29726da4e964913db20c9c9010747", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 123767, "upload_time": "2018-06-05T03:31:41", "url": "https://files.pythonhosted.org/packages/47/5c/171f6489a134b0c554e5d03731112ce543defbe167f8fa81f89dff8184f4/ChromeController-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "9f856b3cfc36d5a67b6983cadd24944f", "sha256": "2f523e04886adfe222d7577a4c3079d4e9e697f249cac38da0b5f4d6f6eafbad" }, "downloads": -1, "filename": "ChromeController-0.2.2.tar.gz", "has_sig": false, "md5_digest": "9f856b3cfc36d5a67b6983cadd24944f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125932, "upload_time": "2018-06-05T04:14:12", "url": "https://files.pythonhosted.org/packages/10/2c/03152ddc8ed50a125f2eccefc68b3ee3fe656415035d8d48b3ec2b3dc4f3/ChromeController-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c60ae6243f27bf96d0136071bae91f3d", "sha256": "49974ce20f47927d309b8b7ee513da7386e1c305f7196e7d5620c1c622fe6349" }, "downloads": -1, "filename": "ChromeController-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c60ae6243f27bf96d0136071bae91f3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125801, "upload_time": "2018-06-05T04:31:42", "url": "https://files.pythonhosted.org/packages/21/5a/eda407e94fcfc0cd8b8d218f5389a737b40edc14d60d7eba58498a04f518/ChromeController-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "76da9486bab020ec7e7e7363b130329c", "sha256": "a62c00ac1fd2fc5c515c3a9ee8e2527c62a660dae54f43bd8905606ccfbe352a" }, "downloads": -1, "filename": "ChromeController-0.3.1.tar.gz", "has_sig": false, "md5_digest": "76da9486bab020ec7e7e7363b130329c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 129185, "upload_time": "2018-06-09T08:13:59", "url": "https://files.pythonhosted.org/packages/1f/07/dcdd4c88bc0a2634657930b2de59a108598046a7c234fa227038bd61f9a7/ChromeController-0.3.1.tar.gz" } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "c6352a9a59420b8e1f0c62a84fd42807", "sha256": "17d43d75cb88c119325d6ce4b988aaca38bee9f2cd0f6181b9599235f671fb3f" }, "downloads": -1, "filename": "ChromeController-0.3.10.tar.gz", "has_sig": false, "md5_digest": "c6352a9a59420b8e1f0c62a84fd42807", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138401, "upload_time": "2019-07-16T22:46:22", "url": "https://files.pythonhosted.org/packages/29/37/4c3fab89e84be7a7d82486a2d0bad92f0644084d504eb29cd723eab587f4/ChromeController-0.3.10.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8137e33f651f9ff8d3a25749f33043d1", "sha256": "487f470798bfa491e35704726f49db1ead352593682d5dd01ff0ab0b6b4b68e8" }, "downloads": -1, "filename": "ChromeController-0.3.2.tar.gz", "has_sig": false, "md5_digest": "8137e33f651f9ff8d3a25749f33043d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127978, "upload_time": "2018-06-09T09:03:11", "url": "https://files.pythonhosted.org/packages/1e/54/d406206da9a40d36a93eaf83e032062db527787b91629b5358386382c091/ChromeController-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "284ed9907b6c8ff0c2391571fdd047d1", "sha256": "836cbaa3d92c7427fbe5d06b6e352dabcd5d8775522ef7bf755a2ad4a2ab4e1b" }, "downloads": -1, "filename": "ChromeController-0.3.3.tar.gz", "has_sig": false, "md5_digest": "284ed9907b6c8ff0c2391571fdd047d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127878, "upload_time": "2018-06-09T09:32:39", "url": "https://files.pythonhosted.org/packages/09/c4/ef1ee91c8f6b62e8f80e8ad106ffd2bcb7ce019472802b619982fe9a2398/ChromeController-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "ca1bfb4885b901fefc9310248a6d67a6", "sha256": "ec802b737996b3025d8d5efa13a7542cbfc93892641052e45ee033bed76a5f10" }, "downloads": -1, "filename": "ChromeController-0.3.4.tar.gz", "has_sig": false, "md5_digest": "ca1bfb4885b901fefc9310248a6d67a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 128168, "upload_time": "2018-06-09T09:46:48", "url": "https://files.pythonhosted.org/packages/5a/fb/ad937a640b4720d628f05cb48c88b1a325b2b067636836c335346f245c1a/ChromeController-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "cd161db50e1c069a6c25c5e4ffd70c84", "sha256": "1f7170bf0f70209bdb95ebfc3c9877910f107503972c626749add99e741fabcd" }, "downloads": -1, "filename": "ChromeController-0.3.5.tar.gz", "has_sig": false, "md5_digest": "cd161db50e1c069a6c25c5e4ffd70c84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 135293, "upload_time": "2018-06-11T04:54:08", "url": "https://files.pythonhosted.org/packages/0e/02/51d1a3063130b07c55e5a597aa2d7f808e937c5c3f8172c91d3726a5886a/ChromeController-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "f14310362ff3062de59ce02632418b08", "sha256": "bf9f02a6d99f4e86e4df18bb5a6674599fbab36643011e4cbc3a283bced79edd" }, "downloads": -1, "filename": "ChromeController-0.3.6.tar.gz", "has_sig": false, "md5_digest": "f14310362ff3062de59ce02632418b08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 135591, "upload_time": "2018-06-12T04:09:14", "url": "https://files.pythonhosted.org/packages/c6/51/7fe401ae46fe353130bd6489f8dfe5fc8a9a62eb09811177f6fc493c148f/ChromeController-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "0b648d6c5c8cd8b12c91ac10a14354f7", "sha256": "56542db0fb5033c4852c92e7628bd9c077fdc2052fcf08cb3db7570063ebc5c8" }, "downloads": -1, "filename": "ChromeController-0.3.7.tar.gz", "has_sig": false, "md5_digest": "0b648d6c5c8cd8b12c91ac10a14354f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 140286, "upload_time": "2018-06-16T08:58:44", "url": "https://files.pythonhosted.org/packages/4c/55/39dce420bc50e7d7a93c9189f06892b9e33d18a83b93dddc76fe8164862e/ChromeController-0.3.7.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "af5be3531616ee4f148c25768d6d15ac", "sha256": "f6a943a598379d8dcc81953e613270b54b92da4874ccec37fc870d6f6e347d47" }, "downloads": -1, "filename": "ChromeController-0.3.8-py3.5.egg", "has_sig": false, "md5_digest": "af5be3531616ee4f148c25768d6d15ac", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 260132, "upload_time": "2019-07-13T07:23:00", "url": "https://files.pythonhosted.org/packages/86/01/dce6f47047747092a1543ea5ffdec4377e54e7b6be9ff8fe3f38a0c59e58/ChromeController-0.3.8-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "f2f510b0140b484982d49934ffd8bb93", "sha256": "ffd949cfa2f4550e21671a16dbd1a189e5b8e59be12d3b0d2537b24dc41393ec" }, "downloads": -1, "filename": "ChromeController-0.3.8.tar.gz", "has_sig": false, "md5_digest": "f2f510b0140b484982d49934ffd8bb93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 135920, "upload_time": "2019-07-13T07:23:02", "url": "https://files.pythonhosted.org/packages/fd/a7/615c213bccfad5646995bfb32b0653cf9af08b94cafa3d13733a20c3b995/ChromeController-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "9f2f686f77d3ca28cae48ee62103acb6", "sha256": "26a38b86938b29c93993fad8f788eac8b1c01ac9bb97f500d07b95c0cf18f865" }, "downloads": -1, "filename": "ChromeController-0.3.9.tar.gz", "has_sig": false, "md5_digest": "9f2f686f77d3ca28cae48ee62103acb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 135984, "upload_time": "2019-07-13T07:23:04", "url": "https://files.pythonhosted.org/packages/e8/ac/2e57aa7903be28dd9dffd4c93f01a6e4d9f5dd46ed2cfc22c542459581e4/ChromeController-0.3.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6352a9a59420b8e1f0c62a84fd42807", "sha256": "17d43d75cb88c119325d6ce4b988aaca38bee9f2cd0f6181b9599235f671fb3f" }, "downloads": -1, "filename": "ChromeController-0.3.10.tar.gz", "has_sig": false, "md5_digest": "c6352a9a59420b8e1f0c62a84fd42807", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138401, "upload_time": "2019-07-16T22:46:22", "url": "https://files.pythonhosted.org/packages/29/37/4c3fab89e84be7a7d82486a2d0bad92f0644084d504eb29cd723eab587f4/ChromeController-0.3.10.tar.gz" } ] }