@DanielHOWE
My initial thought, when I read your message earlier, is that the images within Canvas are the ones not showing up. You have to be logged into Canvas to access those. Those that are external are not behind a login and can be displayed when you convert it.
The graphQL documentation is contained within the explorer when you add the /graphiql to the end of the URL. Try to find it and if you cannot, it may not be there. The REST API documentation is much more thorough.
I find graphQL harder to work with, but I'm not using a library to process it. But when it is available, it is a lot quicker and doesn't deliver a bunch of stuff I don't need. If I'm lucky, I can use it the way it's intended and pull from several different objects at once, minimizing the number of calls. There is a 30 second timeout rather than worrying about how many calls you've made too quickly, which allows me to fetch most of what I want within a single course without having to worry about pagination.
Now the sad news. You can get data from the REST API, GraphQL, Canvas Data 2, and Canvas Data Services Live Events. The last two require extra work and may involve someone with admin rights to set up. Some pieces of information are only available using one approach, some can be obtained from all, or it could be anywhere in the middle. Occasionally, there are still things you want that cannot be obtained anywhere.
A full solution without Puppeteer/Selenium would involve downloading the CSS and storing it locally so that you can make the styles match. Then download all the titles and descriptions for pages, assignments, New Quizzes, etc. Scan those for any internal images and use the Files API to download those and store them locally. Look for any non-Canvas images and store those locally. Then generate an HTML page linked to the CSS, contained the information and referenced the local version of the images. If you wanted, you could take the HTML and convert it to PDF.
There are a couple of options that you might want to look at and see if it can work for you.
The first is exporting each module as an HTML file. My institution doesn't enable offline web support, so I cannot test what this gives you. It's explained in the How do I view course content offline as an HTML file as a student lesson. That is module specific, though, and if you can get it to work at all, you would need to download each module separately.
Another option, which has to be enabled as the "ePub Exporting" feature, is to download an ePub file of the entire course. There is also an option on the Course > Settings page about whether to organize by module (default) or type. How to create the ePub document is explained in How do I view course content offline as an ePub file as a student? When you generate the ePub, it says "Downloading course content allows access to content while offline. Content may include files, pages, assignments, discussion topics or quizzes. Click "Generate ePub" for each course and open with any eReader software to view."
I'm using my beta instance to generate an ePub for my stats class. Probably a bad idea. It's a large class (document wise) and it's not organized by modules, so I will likely not get what I wanted when it's done. It's been 10 minutes and I'm at about 10%. It should be faster in the production instance. I have other things to work on, so I'll probably leave it up to you to see if it will work for you.
Even if the ePub format isn't acceptable as it comes, there might be utilities that would allow you to extract content from it.