Search code examples
javascriptpythonseleniumfetch

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.


Solution

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