{"action":"created","comment":{"url":"https://api.github.com/repos/scrapinghub/splash/pulls/comments/74686593","id":74686593,"diff_hunk":"@@ -0,0 +1,393 @@\n+.. _splash-element:\n+\n+Element Object\n+==============\n+\n+Element objects are instanced by :ref:`splash-select`;\n+\n+.. _splash-element-attributes:\n+\n+Attributes\n+~~~~~~~~~~\n+\n+The following fields are read-only.\n+\n+.. _splash-element-id:\n+\n+element.id\n+----------\n+\n+Id of the inner representation of the element.\n+\n+Methods\n+~~~~~~~\n+\n+To modify or retrieve some information about the element you can use the following methods.\n+Note that all of the following methods return flag indicating whether the operation was\n+successful or not. The methods returns ``ok, reason_or_value`` pair. If ``ok`` is nil\n+then error happened during the operation; ``reason`` provides an information about error type;\n+otherwise ``ok`` is ``true`` and the returned value is stored in the second variable.\n+\n+\n+.. _splash-element-exists:\n+\n+element:exists\n+--------------\n+\n+Check whether the element exists in DOM. If the element doesn't exist almost all other\n+methods will fail.\n+\n+**Signature:** ``exists = element:exists()``\n+\n+**Returns:** ``exists`` indicated whether the element exists.\n+\n+**Async:** no.\n+\n+\n+.. _splash-node-property:\n+\n+element:node_property\n+---------------------\n+\n+Return the value of the specified property of the element\n+\n+**Signature:** ``ok, value = element:node_property(property_name)``\n+\n+**Parameters:**\n+\n+* property_name - name of the node property\n+\n+**Returns:** ``ok, value`` pair. If ``ok`` is nil then error happened during the function\n+call; ``value`` provides an information about error type; otherwise ``value`` is a value of\n+the specified property\n+\n+**Async:** no.\n+\n+\n+.. _splash-node-method:\n+\n+element:node_method\n+-------------------\n+\n+Return the callable Lua function which call the specified node method.\n+\n+**Signature:** ``ok, method = element:node_method(method_name)``\n+\n+**Parameters:**\n+\n+* method_name - name of the node method\n+\n+**Returns:** ``ok, method`` pair. If ``ok`` is nil then error happened during the function\n+call; ``method`` provides an information about error type; otherwise ``value`` is a function\n+that can be called from Lua to execute node method in page context.\n+\n+**Async:** no.\n+\n+See more in :ref:`splash-jsfunc`.\n+\n+.. note::\n+\n+    If the specified method returns another HTML element it will be represented as a table with\n+    ``type`` property which equals to ``'node'``\n+\n+\n+.. _splash-element-mouse-click:\n+\n+element:mouse_click\n+-------------------\n+\n+Trigger mouse click event on the top-left corner of the element.\n+\n+**Signature:** ``ok, reason = element:mouse_click()``\n+\n+**Returns:** ``ok, reason`` pair. If ``ok`` is nil then error happened during the\n+function call; ``reason`` provides an information about error type.\n+\n+**Async:** no.\n+\n+See more about mouse events in :ref:`splash-mouse-click`.\n+\n+\n+.. _splash-element-mouse-hover:\n+\n+element:mouse_click\n+-------------------\n+\n+Trigger mouse hover (JavaScript mouseover) event on the top-left corner of the element.\n+\n+**Signature:** ``ok, reason = element:mouse_hover()``\n+\n+**Returns:** ``ok, reason`` pair. If ``ok`` is nil then error happened during the\n+function call; ``reason`` provides an information about error type.\n+\n+**Async:** no.\n+\n+See more about mouse events in :ref:`splash-mouse-click`.\n+\n+\n+.. _splash-element-get-styles:\n+\n+element:get_styles\n+------------------\n+\n+Return the computed styles of the element.\n+\n+**Signature:** ``ok, styles = element:get_styles()``\n+\n+**Returns:** ``ok, styles`` pair. If ``ok`` is nil then error happened during the\n+function call; ``styles`` provides an information about error type; otherwise\n+``styles`` is a table with computed styles of the element.\n+\n+**Async:** no.\n+\n+Example of getting the font size of the element.\n+\n+.. code-block:: lua\n+\n+    function main(splash)\n+        local element = splash:select('.element')\n+        local ok, styles = assert(element:get_styles())\n+\n+        return styles['font-size']\n+    end\n+\n+\n+.. _splash-element-get-bounds:\n+\n+element:get_bounds\n+------------------\n+\n+Return the bounding client rectangle of the element\n+\n+**Signature:** ``ok, styles = element:get_bounds()``\n+\n+**Returns:** ``ok, bounds`` pair. If ``ok`` is nil then error happened during the\n+function call; ``bounds`` provides an information about error type; otherwise\n+``bounds`` is a table with the client bounding rectangle with the ``top``, ``right``,\n+``bottom`` and ``left`` coordinates.\n+\n+**Async:** no.\n+\n+Example of getting the bounds of the element.\n+\n+.. code-block:: lua\n+\n+    function main(splash)\n+        local element = splash:select('.element')\n+        local ok, bounds = assert(element:get_bounds())\n+        -- e.g. bounds is { top = 10, right = 20, bottom = 20, left = 10 }\n+        return bounds\n+    end\n+\n+\n+.. _splash-element-png:\n+\n+element:png\n+-----------\n+\n+Return a screenshot of the element in PNG format\n+\n+**Signature:** ``ok, shot = element:png{width=nil, height=nil, scale_method='raster'}``\n+\n+**Parameters:**\n+\n+* width - optional, width of a screenshot in pixels;\n+* height - optional, height of a screenshot in pixels;\n+* scale_method - optional, method to use when resizing the image, ``'raster'``\n+  or ``'vector'``;\n+\n+**Returns:** ``ok, shot`` pair. If ``ok`` is nil then error happened during the\n+function call; ``shot`` provides an information about error type; otherwise\n+``shot`` is a PNG screenshot data, as a :ref:`binary object <binary-objects>`.\n+When the result is empty (e.g. if the element is not visible) ``nil`` is returned.\n+\n+**Async:** no.\n+\n+See more in :ref:`splash-png`.\n+\n+\n+\n+.. _splash-element-jpeg:\n+\n+element:jpeg\n+------------\n+\n+Return a screenshot of the element in JPEG format\n+\n+**Signature:** ``ok, shot = element:jpeg{width=nil, height=nil, scale_method='raster', quality=75, region=nil}``\n+\n+**Parameters:**\n+\n+* width - optional, width of a screenshot in pixels;\n+* height - optional, height of a screenshot in pixels;\n+* scale_method - optional, method to use when resizing the image, ``'raster'``\n+  or ``'vector'``;\n+* quality - optional, quality of JPEG image, integer in range from ``0`` to ``100``;\n+\n+**Returns:** ``ok, shot`` pair. If ``ok`` is nil then error happened during the\n+function call; ``shot`` provides an information about error type; otherwise\n+``shot`` is a JPEG screenshot data, as a :ref:`binary object <binary-objects>`.\n+When the result is empty (e.g. if the element is not visible) ``nil`` is returned.\n+\n+**Async:** no.\n+\n+See more in :ref:`splash-jpeg`.\n+\n+\n+.. _splash-element-visible:\n+\n+element:visible\n+---------------\n+\n+Check whether the element is visible.\n+\n+**Signature:** ``ok, visible = element:visible()``\n+\n+**Returns:** ``ok, visible`` pair. If ``ok`` is nil then error happened during the function\n+call; ``visible`` provides an information about error type; otherwise ``visible`` indicated whether\n+the element is visible.\n+\n+**Async:** no.\n+\n+\n+.. _splash-element-fetch-text:\n+\n+element:fetch_text\n+------------------\n+\n+Fetch a text information from the element\n+\n+**Signature:** ``ok, visible = element:fetch_text()``\n+\n+**Returns:** ``ok, text`` pair. If ``ok`` is nil then error happened during the function call;\n+``text`` provides an information about error type; otherwise ``text`` is a text content\n+of the element.\n+\n+**Async:** no.\n+\n+It tries to return the value of the following JavaScript ``Node`` properties:\n+\n+* textContent\n+* innerText\n+* value\n+\n+If all of them are empty an empty string is returned.\n+\n+\n+.. _splash-element-info:\n+\n+element:info\n+------------\n+\n+Get useful information about the element.\n+\n+**Signature:** ``ok, info = element:info()``\n+\n+**Returns:** ``ok, info`` pair. If ``ok`` is nil then error happened during the function call;\n+``info`` provides an information about error type; otherwise ``info`` is a table with info.\n+\n+**Async:** no.\n+\n+Info is a table with the following fields:\n+\n+* nodeName - node name in a lower case (e.g. *h1*)\n+* attributes - table with attributes names and its values\n+* tag - html string representation of the element\n+* html - inner html of the element\n+* text - inner text of the element\n+* x - x coordinate of the element\n+* y - y coordinate of the element\n+* width - width of the element\n+* height - height of the element\n+* visible - flag representing if the element is visible\n+\n+\n+.. _splash-field-value:\n+\n+element:field_value\n+-------------------\n+\n+Get value of the field element (input, select).\n+\n+**Signature:** ``ok, info = element:field_value()``\n+\n+**Returns:** ``ok, value`` pair. If ``ok`` is nil then error happened during the function call;\n+``value`` provides an information about error type; otherwise ``value`` is a value of the\n+element.\n+\n+**Async:** no.\n+\n+The value can be a\n+* string - for text/radio input and select and other element types\n+* array of strings - for multi select\n+* boolean - for checkbox input\n+\n+\n+.. _splash-form-values:\n+\n+element:form_values\n+-------------------\n+\n+Return a table with form values if the element type is *form*\n+\n+**Signature:** ``ok, info = element:form_values()``\n+\n+**Returns:** ``ok, values`` pair. If ``ok`` is nil then error happened during the function call\n+or node type is not *form*; ``values`` provides an information about error type; otherwise\n+``values`` is a table of values.\n+\n+**Async:** no.\n+\n+\n+.. _splash-send-keys:\n+\n+element:send_keys\n+-----------------\n+\n+Send keyboard events to the element.\n+\n+**Signature:** ``ok = element:send_keys(keys)``\n+\n+**Parameters**\n+\n+* keys - string representing the keys to be sent as keyboard events.\n+\n+**Returns:** ``ok`` pair. If ``ok`` is nil then error happened during the function call.\n+\n+**Async:** no.\n+\n+This methods do the following:\n+\n+* checks whether the selected element is editable","path":"docs/scripting-element-object.rst","position":361,"original_position":361,"commit_id":"8ea320b41ba39ac75344c8195a6308bf2d55f3ba","original_commit_id":"8ea320b41ba39ac75344c8195a6308bf2d55f3ba","user":{"login":"mike1808","id":3942554,"avatar_url":"https://avatars.githubusercontent.com/u/3942554?v=3","gravatar_id":"","url":"https://api.github.com/users/mike1808","html_url":"https://github.com/mike1808","followers_url":"https://api.github.com/users/mike1808/followers","following_url":"https://api.github.com/users/mike1808/following{/other_user}","gists_url":"https://api.github.com/users/mike1808/gists{/gist_id}","starred_url":"https://api.github.com/users/mike1808/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mike1808/subscriptions","organizations_url":"https://api.github.com/users/mike1808/orgs","repos_url":"https://api.github.com/users/mike1808/repos","events_url":"https://api.github.com/users/mike1808/events{/privacy}","received_events_url":"https://api.github.com/users/mike1808/received_events","type":"User","site_admin":false},"body":"The overall idea of \"sending keys to element\" is so obvious. What does it mean to send keys to the element? \r\n\r\nThe original idea was taken from casperj's \"setField\" method which do almost the same:\r\n- checks whether the element is editable \r\n- focuses on it \r\n- send key events\r\n\r\nHowever, in Splash we have more control over the web page (e.g. we can simulate a \"real\" mouse click, w/o using JS). So, I think you point is good. :)","created_at":"2016-08-13T12:49:57Z","updated_at":"2016-08-13T12:49:57Z","html_url":"https://github.com/scrapinghub/splash/pull/471#discussion_r74686593","pull_request_url":"https://api.github.com/repos/scrapinghub/splash/pulls/471","_links":{"self":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/comments/74686593"},"html":{"href":"https://github.com/scrapinghub/splash/pull/471#discussion_r74686593"},"pull_request":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/471"}}},"pull_request":{"url":"https://api.github.com/repos/scrapinghub/splash/pulls/471","id":74829169,"html_url":"https://github.com/scrapinghub/splash/pull/471","diff_url":"https://github.com/scrapinghub/splash/pull/471.diff","patch_url":"https://github.com/scrapinghub/splash/pull/471.patch","issue_url":"https://api.github.com/repos/scrapinghub/splash/issues/471","number":471,"state":"closed","locked":false,"title":"[WIP] Add Element class for manipulating DOM elements in Lua","user":{"login":"mike1808","id":3942554,"avatar_url":"https://avatars.githubusercontent.com/u/3942554?v=3","gravatar_id":"","url":"https://api.github.com/users/mike1808","html_url":"https://github.com/mike1808","followers_url":"https://api.github.com/users/mike1808/followers","following_url":"https://api.github.com/users/mike1808/following{/other_user}","gists_url":"https://api.github.com/users/mike1808/gists{/gist_id}","starred_url":"https://api.github.com/users/mike1808/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mike1808/subscriptions","organizations_url":"https://api.github.com/users/mike1808/orgs","repos_url":"https://api.github.com/users/mike1808/repos","events_url":"https://api.github.com/users/mike1808/events{/privacy}","received_events_url":"https://api.github.com/users/mike1808/received_events","type":"User","site_admin":false},"body":"some test lua code\r\n\r\n```lua\r\nfunction main(splash)\r\n  assert(splash:go('http://localhost:8000/'))\r\n\r\n  local element = splash:select('button')\r\n  element:mouse_click()\r\n  assert(splash:wait(0.0001))\r\n\r\n  local title = splash:select('#title')\r\n\r\n  return {title:get_styles()[\"display\"], title:node_property('nodeName')}\r\nend\r\n```\r\nfor the following html\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n   <title>Index 1</title>\r\n</head>\r\n<body>\r\n<button type=\"button\" onclick=\"document.getElementById('title').style.display = 'block'\">Click me</button>\r\n<h1 id=\"title\" style=\"display: none\">Index 1</h1>\r\n</body>\r\n</html>\r\n```","created_at":"2016-06-22T17:59:44Z","updated_at":"2016-08-13T12:49:58Z","closed_at":"2016-08-13T10:55:19Z","merged_at":null,"merge_commit_sha":"a939e339821c141876d478439e34ef820e0a2970","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/scrapinghub/splash/pulls/471/commits","review_comments_url":"https://api.github.com/repos/scrapinghub/splash/pulls/471/comments","review_comment_url":"https://api.github.com/repos/scrapinghub/splash/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scrapinghub/splash/issues/471/comments","statuses_url":"https://api.github.com/repos/scrapinghub/splash/statuses/8ea320b41ba39ac75344c8195a6308bf2d55f3ba","head":{"label":"mike1808:dom-element","ref":"dom-element","sha":"8ea320b41ba39ac75344c8195a6308bf2d55f3ba","user":{"login":"mike1808","id":3942554,"avatar_url":"https://avatars.githubusercontent.com/u/3942554?v=3","gravatar_id":"","url":"https://api.github.com/users/mike1808","html_url":"https://github.com/mike1808","followers_url":"https://api.github.com/users/mike1808/followers","following_url":"https://api.github.com/users/mike1808/following{/other_user}","gists_url":"https://api.github.com/users/mike1808/gists{/gist_id}","starred_url":"https://api.github.com/users/mike1808/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mike1808/subscriptions","organizations_url":"https://api.github.com/users/mike1808/orgs","repos_url":"https://api.github.com/users/mike1808/repos","events_url":"https://api.github.com/users/mike1808/events{/privacy}","received_events_url":"https://api.github.com/users/mike1808/received_events","type":"User","site_admin":false},"repo":{"id":54326662,"name":"splash","full_name":"mike1808/splash","owner":{"login":"mike1808","id":3942554,"avatar_url":"https://avatars.githubusercontent.com/u/3942554?v=3","gravatar_id":"","url":"https://api.github.com/users/mike1808","html_url":"https://github.com/mike1808","followers_url":"https://api.github.com/users/mike1808/followers","following_url":"https://api.github.com/users/mike1808/following{/other_user}","gists_url":"https://api.github.com/users/mike1808/gists{/gist_id}","starred_url":"https://api.github.com/users/mike1808/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mike1808/subscriptions","organizations_url":"https://api.github.com/users/mike1808/orgs","repos_url":"https://api.github.com/users/mike1808/repos","events_url":"https://api.github.com/users/mike1808/events{/privacy}","received_events_url":"https://api.github.com/users/mike1808/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mike1808/splash","description":"Lightweight, scriptable browser as a service with an HTTP API","fork":true,"url":"https://api.github.com/repos/mike1808/splash","forks_url":"https://api.github.com/repos/mike1808/splash/forks","keys_url":"https://api.github.com/repos/mike1808/splash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mike1808/splash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mike1808/splash/teams","hooks_url":"https://api.github.com/repos/mike1808/splash/hooks","issue_events_url":"https://api.github.com/repos/mike1808/splash/issues/events{/number}","events_url":"https://api.github.com/repos/mike1808/splash/events","assignees_url":"https://api.github.com/repos/mike1808/splash/assignees{/user}","branches_url":"https://api.github.com/repos/mike1808/splash/branches{/branch}","tags_url":"https://api.github.com/repos/mike1808/splash/tags","blobs_url":"https://api.github.com/repos/mike1808/splash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mike1808/splash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mike1808/splash/git/refs{/sha}","trees_url":"https://api.github.com/repos/mike1808/splash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mike1808/splash/statuses/{sha}","languages_url":"https://api.github.com/repos/mike1808/splash/languages","stargazers_url":"https://api.github.com/repos/mike1808/splash/stargazers","contributors_url":"https://api.github.com/repos/mike1808/splash/contributors","subscribers_url":"https://api.github.com/repos/mike1808/splash/subscribers","subscription_url":"https://api.github.com/repos/mike1808/splash/subscription","commits_url":"https://api.github.com/repos/mike1808/splash/commits{/sha}","git_commits_url":"https://api.github.com/repos/mike1808/splash/git/commits{/sha}","comments_url":"https://api.github.com/repos/mike1808/splash/comments{/number}","issue_comment_url":"https://api.github.com/repos/mike1808/splash/issues/comments{/number}","contents_url":"https://api.github.com/repos/mike1808/splash/contents/{+path}","compare_url":"https://api.github.com/repos/mike1808/splash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mike1808/splash/merges","archive_url":"https://api.github.com/repos/mike1808/splash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mike1808/splash/downloads","issues_url":"https://api.github.com/repos/mike1808/splash/issues{/number}","pulls_url":"https://api.github.com/repos/mike1808/splash/pulls{/number}","milestones_url":"https://api.github.com/repos/mike1808/splash/milestones{/number}","notifications_url":"https://api.github.com/repos/mike1808/splash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mike1808/splash/labels{/name}","releases_url":"https://api.github.com/repos/mike1808/splash/releases{/id}","deployments_url":"https://api.github.com/repos/mike1808/splash/deployments","created_at":"2016-03-20T16:00:44Z","updated_at":"2016-03-20T16:00:45Z","pushed_at":"2016-08-13T12:38:11Z","git_url":"git://github.com/mike1808/splash.git","ssh_url":"git@github.com:mike1808/splash.git","clone_url":"https://github.com/mike1808/splash.git","svn_url":"https://github.com/mike1808/splash","homepage":"","size":2766,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scrapinghub:master","ref":"master","sha":"fa2f50e6b1a4a6fe153b475b1a99519374b6d06c","user":{"login":"scrapinghub","id":699596,"avatar_url":"https://avatars.githubusercontent.com/u/699596?v=3","gravatar_id":"","url":"https://api.github.com/users/scrapinghub","html_url":"https://github.com/scrapinghub","followers_url":"https://api.github.com/users/scrapinghub/followers","following_url":"https://api.github.com/users/scrapinghub/following{/other_user}","gists_url":"https://api.github.com/users/scrapinghub/gists{/gist_id}","starred_url":"https://api.github.com/users/scrapinghub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scrapinghub/subscriptions","organizations_url":"https://api.github.com/users/scrapinghub/orgs","repos_url":"https://api.github.com/users/scrapinghub/repos","events_url":"https://api.github.com/users/scrapinghub/events{/privacy}","received_events_url":"https://api.github.com/users/scrapinghub/received_events","type":"Organization","site_admin":false},"repo":{"id":10182205,"name":"splash","full_name":"scrapinghub/splash","owner":{"login":"scrapinghub","id":699596,"avatar_url":"https://avatars.githubusercontent.com/u/699596?v=3","gravatar_id":"","url":"https://api.github.com/users/scrapinghub","html_url":"https://github.com/scrapinghub","followers_url":"https://api.github.com/users/scrapinghub/followers","following_url":"https://api.github.com/users/scrapinghub/following{/other_user}","gists_url":"https://api.github.com/users/scrapinghub/gists{/gist_id}","starred_url":"https://api.github.com/users/scrapinghub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scrapinghub/subscriptions","organizations_url":"https://api.github.com/users/scrapinghub/orgs","repos_url":"https://api.github.com/users/scrapinghub/repos","events_url":"https://api.github.com/users/scrapinghub/events{/privacy}","received_events_url":"https://api.github.com/users/scrapinghub/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scrapinghub/splash","description":"Lightweight, scriptable browser as a service with an HTTP API","fork":false,"url":"https://api.github.com/repos/scrapinghub/splash","forks_url":"https://api.github.com/repos/scrapinghub/splash/forks","keys_url":"https://api.github.com/repos/scrapinghub/splash/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scrapinghub/splash/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scrapinghub/splash/teams","hooks_url":"https://api.github.com/repos/scrapinghub/splash/hooks","issue_events_url":"https://api.github.com/repos/scrapinghub/splash/issues/events{/number}","events_url":"https://api.github.com/repos/scrapinghub/splash/events","assignees_url":"https://api.github.com/repos/scrapinghub/splash/assignees{/user}","branches_url":"https://api.github.com/repos/scrapinghub/splash/branches{/branch}","tags_url":"https://api.github.com/repos/scrapinghub/splash/tags","blobs_url":"https://api.github.com/repos/scrapinghub/splash/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scrapinghub/splash/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scrapinghub/splash/git/refs{/sha}","trees_url":"https://api.github.com/repos/scrapinghub/splash/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scrapinghub/splash/statuses/{sha}","languages_url":"https://api.github.com/repos/scrapinghub/splash/languages","stargazers_url":"https://api.github.com/repos/scrapinghub/splash/stargazers","contributors_url":"https://api.github.com/repos/scrapinghub/splash/contributors","subscribers_url":"https://api.github.com/repos/scrapinghub/splash/subscribers","subscription_url":"https://api.github.com/repos/scrapinghub/splash/subscription","commits_url":"https://api.github.com/repos/scrapinghub/splash/commits{/sha}","git_commits_url":"https://api.github.com/repos/scrapinghub/splash/git/commits{/sha}","comments_url":"https://api.github.com/repos/scrapinghub/splash/comments{/number}","issue_comment_url":"https://api.github.com/repos/scrapinghub/splash/issues/comments{/number}","contents_url":"https://api.github.com/repos/scrapinghub/splash/contents/{+path}","compare_url":"https://api.github.com/repos/scrapinghub/splash/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scrapinghub/splash/merges","archive_url":"https://api.github.com/repos/scrapinghub/splash/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scrapinghub/splash/downloads","issues_url":"https://api.github.com/repos/scrapinghub/splash/issues{/number}","pulls_url":"https://api.github.com/repos/scrapinghub/splash/pulls{/number}","milestones_url":"https://api.github.com/repos/scrapinghub/splash/milestones{/number}","notifications_url":"https://api.github.com/repos/scrapinghub/splash/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scrapinghub/splash/labels{/name}","releases_url":"https://api.github.com/repos/scrapinghub/splash/releases{/id}","deployments_url":"https://api.github.com/repos/scrapinghub/splash/deployments","created_at":"2013-05-20T21:20:33Z","updated_at":"2016-08-13T09:16:06Z","pushed_at":"2016-08-13T12:38:11Z","git_url":"git://github.com/scrapinghub/splash.git","ssh_url":"git@github.com:scrapinghub/splash.git","clone_url":"https://github.com/scrapinghub/splash.git","svn_url":"https://github.com/scrapinghub/splash","homepage":"","size":3720,"stargazers_count":815,"watchers_count":815,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":146,"mirror_url":null,"open_issues_count":106,"forks":146,"open_issues":106,"watchers":815,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/471"},"html":{"href":"https://github.com/scrapinghub/splash/pull/471"},"issue":{"href":"https://api.github.com/repos/scrapinghub/splash/issues/471"},"comments":{"href":"https://api.github.com/repos/scrapinghub/splash/issues/471/comments"},"review_comments":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/471/comments"},"review_comment":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/471/commits"},"statuses":{"href":"https://api.github.com/repos/scrapinghub/splash/statuses/8ea320b41ba39ac75344c8195a6308bf2d55f3ba"}}}}
{"actor":{"display_login":"mike1808"}}