diff --git a/requests_html.py b/requests_html.py
index cc7e8a7..eacd4f0 100644
--- a/requests_html.py
+++ b/requests_html.py
@@ -357,12 +357,13 @@ class Element(BaseParser):
__slots__ = [
'element', 'url', 'skip_anchors', 'default_encoding', '_encoding',
- '_encoding', '_html', '_lxml', '_pq', 'session'
+ '_encoding', '_html', '_lxml', '_pq', '_attrs', 'session'
]
def __init__(self, *, element, url: _URL, default_encoding: _DefaultEncoding = None) -> None:
super(Element, self).__init__(element=element, url=url, default_encoding=default_encoding)
self.element = element
+ self._attrs = None
def __repr__(self) -> str:
attrs = ['{}={}'.format(attr, repr(self.attrs[attr])) for attr in self.attrs]
@@ -373,14 +374,15 @@ class Element(BaseParser):
"""Returns a dictionary of the attributes of the :class:`Element `
(`learn more `_).
"""
- attrs = {k: v for k, v in self.element.items()}
+ if self._attrs is None:
+ self._attrs = {k: v for k, v in self.element.items()}
- # Split class and rel up, as there are ussually many of them:
- for attr in ['class', 'rel']:
- if attr in attrs:
- attrs[attr] = tuple(attrs[attr].split())
+ # Split class and rel up, as there are ussually many of them:
+ for attr in ['class', 'rel']:
+ if attr in self._attrs:
+ self._attrs[attr] = tuple(self._attrs[attr].split())
- return attrs
+ return self._attrs
class HTML(BaseParser):
@@ -465,7 +467,7 @@ class HTML(BaseParser):
"""
async def _async_render(*, url: str, script: str = None, scrolldown, sleep: int, wait: float, reload, content: Optional[str], timeout: Union[float, int]):
try:
- browser = pyppeteer.launch(headless=True)
+ browser = pyppeteer.launch(headless=True, args=['--no-sandbox'])
page = await browser.newPage()
# Wait before rendering the page, to prevent timeouts.