Skip to content
Advertisement

NameError: name ‘fetch’ is not defined in Selenium Console

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.

Advertisement

Answer

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)
""")

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement