NameError: name 'fetch' is not defined in Selenium Console

Question:

Hi I am trying to open Selenium, visit a URL then use driver.execute_script to send a fetch request via Console in Chrome Developer Tools within the Selenium window.

However when I run it, the Selenium window opens up, visits the page, but when it gets to the execute_script section, it comes up with:

‘NameError: name ‘fetch’ is not defined’. How do I fix this? Thanks

driver.get(URL1)
driver.get('URL')

payload = fetch("URL", {
  "headers": {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-device-memory": "8",
    "sec-ch-ua": ""Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"",
    "sec-ch-ua-arch": ""x86"",
    "sec-ch-ua-full-version-list": ""Google Chrome";v="107.0.5304.88", "Chromium";v="107.0.5304.88", "Not=A?Brand";v="24.0.0.0"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-model": "",
    "sec-ch-ua-platform": ""Windows"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-esro-af": "s9TeAPYWl4s=",
    "x-requested-with": "XMLHttpRequest"
  },
  "referrer": "URL",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": URL CONTENT",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

driver.execute_script(f'{payload}')

I have tried putting "" to wrap the whole payload but it doesn’t work.

Asked By: Ruibin Wu

||

Answers:

That’s not how fetch works. first of all it runs in the browser, and second it’s async so use execute_async_script.

It should look something like this:

response = driver.execute_async_script("""
  let [resolve] = arguments
  fetch(url, options).then(r => r.text()).then(resolve)
""")
Answered By: pguardiario
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.