{"id":24802947,"url":"https://github.com/ovoshatchery/ovos-phal-plugin-slave-browser","last_synced_at":"2025-03-25T05:37:19.167Z","repository":{"id":218143065,"uuid":"94574599","full_name":"OVOSHatchery/ovos-PHAL-plugin-slave-browser","owner":"OVOSHatchery","description":"firefox browser service for mycroft","archived":false,"fork":false,"pushed_at":"2019-01-10T18:25:55.000Z","size":2152,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-30T05:16:45.643Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OVOSHatchery.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-06-16T19:20:12.000Z","updated_at":"2024-03-15T00:43:22.000Z","dependencies_parsed_at":"2024-01-20T01:16:36.964Z","dependency_job_id":"672c8287-6fea-4755-b3d7-7c2cf1e289ea","html_url":"https://github.com/OVOSHatchery/ovos-PHAL-plugin-slave-browser","commit_stats":null,"previous_names":["jarbasskills/service-skill-browser","ovoshatchery/ovos-phal-plugin-slave-browser"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OVOSHatchery%2Fovos-PHAL-plugin-slave-browser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OVOSHatchery%2Fovos-PHAL-plugin-slave-browser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OVOSHatchery%2Fovos-PHAL-plugin-slave-browser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OVOSHatchery%2Fovos-PHAL-plugin-slave-browser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OVOSHatchery","download_url":"https://codeload.github.com/OVOSHatchery/ovos-PHAL-plugin-slave-browser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245407759,"owners_count":20610232,"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":[],"created_at":"2025-01-30T05:16:50.703Z","updated_at":"2025-03-25T05:37:19.143Z","avatar_url":"https://github.com/OVOSHatchery.png","language":"Python","funding_links":["https://paypal.me/jarbasai","https://www.patreon.com/jarbasAI"],"categories":[],"sub_categories":[],"readme":"# Firefox Browser Service Skill\n[![Donate with Bitcoin](https://en.cryptobadges.io/badge/micro/1QJNhKM8tVv62XSUrST2vnaMXh5ADSyYP8)](https://en.cryptobadges.io/donate/1QJNhKM8tVv62XSUrST2vnaMXh5ADSyYP8)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/jarbasai)\n\u003cspan class=\"badge-patreon\"\u003e\u003ca href=\"https://www.patreon.com/jarbasAI\" title=\"Donate to this project using Patreon\"\u003e\u003cimg src=\"https://img.shields.io/badge/patreon-donate-yellow.svg\" alt=\"Patreon donate button\" /\u003e\u003c/a\u003e\u003c/span\u003e\n[![Say Thanks!](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/JarbasAl)\n\nunder a refactoring, use at your own risk\n\n\nthis should be made into a priority skill in the config file\n\n        // General skill values\n          \"skills\": {\n            ...\n            // priority skills to be loaded first\n            \"priority_skills\": [\"skill-pairing\", \"browser_service\"],\n            ...\n          },\n\nit is a skill that keeps a webdriver instance ready to do stuff, helper class can be imported and used in any skill to control this browser\n\nif multiple skills make calls to webbrowser at once there will be trouble, some sort of queue will be implemented sometime\n\n# troubles\n\nif it complains of geckodriver, move it into usr/bin or export it into PATH\n\n# Usage\n\n        from mycroft_jarbas_utils.browser import BrowserControl\n\n\n# example, querying inspirobot\n\n           def handle_inspirobot_intent(self, message):\n                # get a browser control instance\n                browser = BrowserControl(self.emitter)\n                # get inspirobot url\n                open = browser.open_url(\"http://inspirobot.me/\")\n                if open is None:\n                    self.speak(\"Could not query inspirobot\")\n                    return\n\n                # search generate button by xpath\n                generate = \".//*[@id='top']/div[1]/div[2]/div/div[2]\"\n                browser.get_element(data=generate, name=\"generate\", type=\"xpath\")\n\n                # click generate button\n                browser.click_element(\"generate\")\n\n                # try until you find generated picture\n                fails = 0\n                sucess = False\n                while fails \u003c 5 and not sucess:\n                    # find generated picture by class_name\n                    browser.get_element(data=\"generated-image\", name=\"pic\", type=\"class\")\n                    # get attribute \"src\" of \"pic\" element\n                    src = browser.get_attribute('src', 'pic')\n                    # check if the adquired url is a generated picture or the default\n                    if \"generated.inspirobot\" not in src:\n                        fails += 1\n                        sleep(0.5)\n                    else:\n                        sucess = True\n\n                # tell user if you could not get picture\n                if not sucess:\n                    self.speak(\"could not get inspirobot generated picture\")\n                    return\n\n                # download the image\n                out_path = self.save_path + \"/\" + time.asctime() + \".jpg\"\n                urlretrieve(src, out_path.replace(\" \", \"_\"))\n\n                # give it to user # info in metadata can be captured\n                self.speak(\"Here is your Inspirobot picture\", metadata={\"file\":out_path, \"url\":src})\n\n# example, querying cleverbot website\n\n            def handle_ask_cleverbot_intent(self, message):\n                ask = message.data.get(\"Ask\")\n                # get a browser control instance, optionally set to auto-start/restart browser\n                browser = BrowserControl(self.emitter)#, autostart=False)\n                # restart webbrowser if it is open (optionally)\n                #started = browser.start_browser()\n                #if not started:\n                #    # TODO throw some error\n                #    return\n                browser.reset_elements()\n                # get clevebot url\n                open = browser.open_url(\"www.cleverbot.com\")\n                if open is None:\n                    return\n                # search this element by type and name it \"input\"\n                browser.get_element(data=\"stimulus\", name=\"input\", type=\"name\")\n                # clear element named input\n                #browser.clear_element(\"input\")\n                # send text to element named \"input\"\n                browser.send_keys_to_element(text=ask, name=\"input\", special=False)\n                # send a key_press to element named \"input\"\n                browser.send_keys_to_element(text=\"RETURN\", name=\"input\", special=True)\n\n                # wait until you find element by xpath and name it sucess\n                received = False\n                fails = 0\n                response = \" \"\n                while response == \" \":\n                    while not received and fails \u003c 5:\n                        # returns false when element wasnt found\n                        # this appears only after cleverbot finishes answering\n                        received = browser.get_element(data=\".//*[@id='snipTextIcon']\", name=\"sucess\", type=\"xpath\")\n                        fails += 1\n\n                    # find element by xpath, name it \"response\"\n                    browser.get_element(data=\".//*[@id='line1']/span[1]\", name=\"response\", type=\"xpath\")\n                    # get text of the element named \"response\"\n                    response = browser.get_element_text(\"response\")\n\n                self.speak(response)\n                # clean the used elements for this session\n                browser.reset_elements()\n                # optionally close the browser\n                #browser.close_browser()\n\n# skill logs\n\n        2017-06-16 20:16:01,046 - Skills - DEBUG - {\"type\": \"recognizer_loop:utterance\", \"data\": {\"source\": \"cli\", \"user\": \"unknown\", \"utterances\": [\"ask cleverbot what is the purpose of life\"]}, \"context\": null}\n        2017-06-16 20:16:01,112 - Skills - DEBUG - {\"type\": \"BrowserSkill:AskCleverbotIntent\", \"data\": {\"confidence\": 0.125, \"target\": \"cli\", \"mute\": false, \"intent_type\": \"BrowserSkill:AskCleverbotIntent\", \"user\": \"unknown\", \"Ask\": \"what is purpose of\", \"utterance\": \"ask cleverbot what is the purpose of life\"}, \"context\": {\"target\": \"cli\"}}\n        2017-06-16 20:16:01,116 - Skills - DEBUG - {\"type\": \"browser_reset_elements\", \"data\": {}, \"context\": null}\n        2017-06-16 20:16:01,122 - Skills - DEBUG - {\"type\": \"browser_elements_reset_result\", \"data\": {\"elements\": {}}, \"context\": null}\n        2017-06-16 20:16:01,415 - Mycroft-Browser - INFO - Browser reset elements: True\n        2017-06-16 20:16:01,417 - Skills - DEBUG - {\"type\": \"browser_url_request\", \"data\": {\"url\": \"www.cleverbot.com\"}, \"context\": null}\n        2017-06-16 20:16:01,419 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/url {\"url\": \"http://www.cleverbot.com\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\"}\n        2017-06-16 20:16:09,034 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,035 - selenium.webdriver.remote.remote_connection - DEBUG - GET http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/url {\"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\"}\n        2017-06-16 20:16:09,065 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,065 - BrowserSkill - INFO - url: http://www.cleverbot.com/\n        2017-06-16 20:16:09,066 - selenium.webdriver.remote.remote_connection - DEBUG - GET http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/title {\"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\"}\n        2017-06-16 20:16:09,086 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,086 - BrowserSkill - INFO - title: Cleverbot.com - a clever bot - speak to an AI with some Actual Intelligence?\n        2017-06-16 20:16:09,087 - selenium.webdriver.remote.remote_connection - DEBUG - GET http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/url {\"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\"}\n        2017-06-16 20:16:09,106 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,106 - selenium.webdriver.remote.remote_connection - DEBUG - GET http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/title {\"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\"}\n        2017-06-16 20:16:09,122 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,124 - Skills - DEBUG - {\"type\": \"browser_url_opened\", \"data\": {\"page_title\": \"Cleverbot.com - a clever bot - speak to an AI with some Actual Intelligence?\", \"result\": \"http://www.cleverbot.com/\", \"requested_url\": \"http://www.cleverbot.com\"}, \"context\": null}\n        2017-06-16 20:16:09,227 - Mycroft-Browser - INFO - Browser url open: True\n        2017-06-16 20:16:09,229 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"name\", \"data\": \"stimulus\", \"element_name\": \"input\"}, \"context\": null}\n        2017-06-16 20:16:09,231 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"css selector\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \"[name=\\\"stimulus\\\"]\"}\n        2017-06-16 20:16:09,306 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:09,310 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": true, \"data\": \"stimulus\", \"name\": \"input\", \"type\": \"name\"}, \"context\": null}\n        2017-06-16 20:16:09,528 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:09,531 - Skills - DEBUG - {\"type\": \"browser_send_keys_to_element\", \"data\": {\"text\": \"what is purpose of\", \"special_key\": false, \"element_name\": \"input\"}, \"context\": null}\n        2017-06-16 20:16:09,532 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element/98a2bd5a-5706-428f-90be-3247de79779d/value {\"text\": \"what is purpose of\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"id\": \"98a2bd5a-5706-428f-90be-3247de79779d\", \"value\": [\"w\", \"h\", \"a\", \"t\", \" \", \"i\", \"s\", \" \", \"p\", \"u\", \"r\", \"p\", \"o\", \"s\", \"e\", \" \", \"o\", \"f\"]}\n        2017-06-16 20:16:09,948 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:10,950 - Skills - DEBUG - {\"type\": \"browser_sent_keys\", \"data\": {\"sucess\": true, \"data\": \"what is purpose of\", \"name\": \"input\"}, \"context\": null}\n        2017-06-16 20:16:11,030 - Mycroft-Browser - INFO - Browser send keys element: True\n        2017-06-16 20:16:11,034 - Skills - DEBUG - {\"type\": \"browser_send_keys_to_element\", \"data\": {\"text\": \"RETURN\", \"special_key\": true, \"element_name\": \"input\"}, \"context\": null}\n        2017-06-16 20:16:11,035 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element/98a2bd5a-5706-428f-90be-3247de79779d/value {\"text\": \"\\ue006\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"id\": \"98a2bd5a-5706-428f-90be-3247de79779d\", \"value\": [\"\\ue006\"]}\n        2017-06-16 20:16:11,179 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:11,186 - Skills - DEBUG - {\"type\": \"browser_sent_keys\", \"data\": {\"sucess\": true, \"data\": \"RETURN\", \"name\": \"input\"}, \"context\": null}\n        2017-06-16 20:16:11,332 - Mycroft-Browser - INFO - Browser send keys element: True\n        2017-06-16 20:16:11,334 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='snipTextIcon']\", \"element_name\": \"sucess\"}, \"context\": null}\n        2017-06-16 20:16:11,336 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='snipTextIcon']\"}\n        2017-06-16 20:16:11,410 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:11,418 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": false, \"data\": \".//*[@id='snipTextIcon']\", \"name\": \"sucess\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:11,633 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:11,638 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='snipTextIcon']\", \"element_name\": \"sucess\"}, \"context\": null}\n        2017-06-16 20:16:11,639 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='snipTextIcon']\"}\n        2017-06-16 20:16:11,658 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:11,664 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": false, \"data\": \".//*[@id='snipTextIcon']\", \"name\": \"sucess\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:11,934 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:11,936 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='snipTextIcon']\", \"element_name\": \"sucess\"}, \"context\": null}\n        2017-06-16 20:16:11,945 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='snipTextIcon']\"}\n        2017-06-16 20:16:12,097 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:12,102 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": false, \"data\": \".//*[@id='snipTextIcon']\", \"name\": \"sucess\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:12,235 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:12,237 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='snipTextIcon']\", \"element_name\": \"sucess\"}, \"context\": null}\n        2017-06-16 20:16:12,240 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='snipTextIcon']\"}\n        2017-06-16 20:16:12,268 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:12,274 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": false, \"data\": \".//*[@id='snipTextIcon']\", \"name\": \"sucess\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:12,536 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:12,538 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='snipTextIcon']\", \"element_name\": \"sucess\"}, \"context\": null}\n        2017-06-16 20:16:12,540 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='snipTextIcon']\"}\n        2017-06-16 20:16:12,562 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:12,565 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": false, \"data\": \".//*[@id='snipTextIcon']\", \"name\": \"sucess\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:12,837 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:12,840 - Skills - DEBUG - {\"type\": \"browser_get_element\", \"data\": {\"type\": \"xpath\", \"data\": \".//*[@id='line1']/span[1]\", \"element_name\": \"response\"}, \"context\": null}\n        2017-06-16 20:16:12,840 - selenium.webdriver.remote.remote_connection - DEBUG - POST http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element {\"using\": \"xpath\", \"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"value\": \".//*[@id='line1']/span[1]\"}\n        2017-06-16 20:16:12,862 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:12,868 - Skills - DEBUG - {\"type\": \"browser_element_stored\", \"data\": {\"sucess\": true, \"data\": \".//*[@id='line1']/span[1]\", \"name\": \"response\", \"type\": \"xpath\"}, \"context\": null}\n        2017-06-16 20:16:13,138 - Mycroft-Browser - INFO - Browser get element: True\n        2017-06-16 20:16:13,141 - Skills - DEBUG - {\"type\": \"browser_get_element_text\", \"data\": {\"element_name\": \"response\"}, \"context\": null}\n        2017-06-16 20:16:13,143 - selenium.webdriver.remote.remote_connection - DEBUG - GET http://127.0.0.1:58852/session/a36877c6-06b3-4ab7-8612-ea0753f99967/element/3620c627-1693-4233-b7af-e55e335e7780/text {\"sessionId\": \"a36877c6-06b3-4ab7-8612-ea0753f99967\", \"id\": \"3620c627-1693-4233-b7af-e55e335e7780\"}\n        2017-06-16 20:16:13,199 - selenium.webdriver.remote.remote_connection - DEBUG - Finished Request\n        2017-06-16 20:16:13,203 - Skills - DEBUG - {\"type\": \"browser_element_text\", \"data\": {\"text\": \"The reason you do some\", \"name\": \"response\"}, \"context\": null}\n        2017-06-16 20:16:13,439 - Mycroft-Browser - INFO - Browser get element text: True\n        2017-06-16 20:16:13,442 - Skills - DEBUG - {\"type\": \"speak\", \"data\": {\"target\": \"cli\", \"mute\": false, \"expect_response\": false, \"more\": false, \"utterance\": \"The reason you do some\", \"metadata\": {\"source_skill\": \"BrowserSkill\"}}, \"context\": null}\n        2017-06-16 20:16:13,442 - Skills - DEBUG - {\"type\": \"browser_reset_elements\", \"data\": {}, \"context\": null}\n        2017-06-16 20:16:13,449 - Skills - DEBUG - {\"type\": \"browser_elements_reset_result\", \"data\": {\"elements\": {}}, \"context\": null}\n        2017-06-16 20:16:13,741 - Mycroft-Browser - INFO - Browser reset elements: True\n\n\n## Usage:\n\n        ask cleverbot what's up\n\n        inspirobot\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovoshatchery%2Fovos-phal-plugin-slave-browser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fovoshatchery%2Fovos-phal-plugin-slave-browser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fovoshatchery%2Fovos-phal-plugin-slave-browser/lists"}