Pyppeteer не может загрузить инъекцию XSS - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь написать скрипт, который проверит наличие XSS-инъекции. Я делаю следующее:

import asyncio
from pyppeteer import launch
async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('URL with XSS')
    content = await page.content()
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

, но происходит сбой с

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/execution_context.py", line 106, in evaluateHandle
    'userGesture': True,
pyppeteer.errors.NetworkError: Protocol error (Runtime.callFunctionOn): Cannot find context with specified id

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "a.py", line 10, in <module>
    asyncio.get_event_loop().run_until_complete(main())
  File "/usr/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
    return future.result()
  File "a.py", line 7, in main
    content = await page.content()
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/page.py", line 780, in content
    return await frame.content()
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/frame_manager.py", line 379, in content
    '''.strip())
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/frame_manager.py", line 295, in evaluate
    pageFunction, *args, force_expr=force_expr)
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/execution_context.py", line 55, in evaluate
    pageFunction, *args, force_expr=force_expr)
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/execution_context.py", line 109, in evaluateHandle
    _rewriteError(e)
  File "/usr/local/lib/python3.6/dist-packages/pyppeteer/execution_context.py", line 238, in _rewriteError
    raise type(error)(msg)
pyppeteer.errors.NetworkError: Execution context was destroyed, most likely because of a navigation.

Я заметил, что сбой происходит, только если я передаю что-то вроде <script>*payload here*</script> в нужный параметр get, в противном случае это работает хорошо, даже если я прохожу пустой <script></script>. В чем причина исключения и как это исправить? Этот запрос хорошо работает, когда я делаю это в Chrome

Пример полезной нагрузки: <script>document.write("qwe");</script>

...