{"action":"created","comment":{"url":"https://api.github.com/repos/scrapinghub/splash/pulls/comments/73949064","id":73949064,"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":"kmike","id":107893,"avatar_url":"https://avatars.githubusercontent.com/u/107893?v=3","gravatar_id":"","url":"https://api.github.com/users/kmike","html_url":"https://github.com/kmike","followers_url":"https://api.github.com/users/kmike/followers","following_url":"https://api.github.com/users/kmike/following{/other_user}","gists_url":"https://api.github.com/users/kmike/gists{/gist_id}","starred_url":"https://api.github.com/users/kmike/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kmike/subscriptions","organizations_url":"https://api.github.com/users/kmike/orgs","repos_url":"https://api.github.com/users/kmike/repos","events_url":"https://api.github.com/users/kmike/events{/privacy}","received_events_url":"https://api.github.com/users/kmike/received_events","type":"User","site_admin":false},"body":"Why is this check needed?","created_at":"2016-08-08T20:35:53Z","updated_at":"2016-08-08T20:35:53Z","html_url":"https://github.com/scrapinghub/splash/pull/471#discussion_r73949064","pull_request_url":"https://api.github.com/repos/scrapinghub/splash/pulls/471","_links":{"self":{"href":"https://api.github.com/repos/scrapinghub/splash/pulls/comments/73949064"},"html":{"href":"https://github.com/scrapinghub/splash/pull/471#discussion_r73949064"},"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":"open","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-08T20:35:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fe94f80acfde5f49d2795ec649bfdaf5ca97fdd0","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-07T13:41:43Z","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":2729,"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-07T13:18:37Z","pushed_at":"2016-08-08T19:41:03Z","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":4002,"stargazers_count":811,"watchers_count":811,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":144,"mirror_url":null,"open_issues_count":106,"forks":144,"open_issues":106,"watchers":811,"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":"kmike"}}