diff --git a/requests_html.py b/requests_html.py
index 0be722c..082ca5f 100644
--- a/requests_html.py
+++ b/requests_html.py
@@ -2,7 +2,7 @@ import sys
import asyncio
from urllib.parse import urlparse, urlunparse
from concurrent.futures._base import TimeoutError
-from typing import Set, Union, List, MutableMapping
+from typing import Set, Union, List, MutableMapping, Optional
import pyppeteer
import requests
@@ -325,7 +325,7 @@ class HTML(BaseParser):
def __repr__(self) -> str:
return "".format(repr(self.url))
- def render(self, retries: int = 8, script: str = None, scrolldown=False, sleep: int = 0):
+ def render(self, retries: int = 8, script: str = None, scrolldown=False, sleep: int = 0, reload: bool = True):
"""Reloads the response in Chromium, and replaces HTML content
with an updated version, with JavaScript executed.
@@ -361,13 +361,16 @@ class HTML(BaseParser):
Warning: the first time you run this method, it will download
Chromium into your home directory (``~/.pyppeteer``).
"""
- async def _async_render(*, url: str, script: str = None, scrolldown, sleep: int):
+ async def _async_render(*, url: str, script: str = None, scrolldown, sleep: int, reload: bool = True, content: Optional[str]):
try:
browser = pyppeteer.launch(headless=True)
page = await browser.newPage()
# Load the given page (GET request, obviously.)
- await page.goto(url)
+ if reload:
+ await page.goto(url)
+ else:
+ await page.setContent(content)
result = None
if script:
@@ -395,7 +398,7 @@ class HTML(BaseParser):
for i in range(retries):
if not content:
try:
- content, result = loop.run_until_complete(_async_render(url=self.url, script=script, sleep=sleep, scrolldown=scrolldown))
+ content, result = loop.run_until_complete(_async_render(url=self.url, script=script, sleep=sleep, content=self.html, reload=reload, scrolldown=scrolldown))
except TimeoutError:
pass