The [`render.opengl()`][1] operator is working fine for all modes. But notice that it takes a screenshot of the first viewport found, quoting the docs: *"Take a snapshot of the active viewport"*. So in case you have multiple 3d viewports open at the same time it takes the first one in the area list of your screen ([`Screen.Areas`][2]). --- Obviously the simplest option is to *close all 3d viewports except one*, set the shading mode, call the operator and pass `write_still=True` to take the screenshot as well as saving the file into the default [*Output* directory][3]: >>> bpy.ops.render.opengl(write_still=True) In case you have multiple viewports open and you'd like to specify the area for the screenshot, you can [override the context][4] when calling [`render.opengl()`][1] operator. See the following demo on how to find the first 3d viewport set to `'WIREFRAME'` and take a screenshot: import bpy C = bpy.context for area in C.screen.areas: if area.type=='VIEW_3D': # Check for WIREFRAME, SOLID, RENDERED, MATERIAL # area.spaces.active.shading.type if area.spaces.active.shading.type == 'WIREFRAME': override = C.copy() override['area'] = area bpy.ops.render.opengl(override) break In order to set the filename, just temporary assign your path to the [`RenderSettings.filepath`][5] property. Demo on how to take a screenshot of the first viewport found set to `'WIREFRAME'` and save the result to the *directory of the current blend* file: file_path = bpy.path.abspath("//screenshot") for area in C.screen.areas: if area.type=='VIEW_3D': if area.spaces.active.shading.type == 'WIREFRAME': # Store the current output path and set it temp = C.scene.render.filepath C.scene.render.filepath = file_path override = C.copy() override['area'] = area bpy.ops.render.opengl(override, write_still=True) # Restore the output path C.scene.render.filepath = temp break print (file_path) ### 3.2 Update Context overrides are deprecated in Blender 3.2 and are scheduled to be removed in Blender 3.3 The replacement is [`temp_override`](https://docs.blender.org/api/3.2/bpy.types.Context.html#bpy.types.Context.temp_override). The manual has examples of how to use the new function. [1]: https://docs.blender.org/api/current/bpy.ops.render.html?highlight=opengl#bpy.ops.render.opengl [2]: https://docs.blender.org/api/current/bpy.types.Screen.html?highlight=areas#bpy.types.Screen.areas [3]: https://docs.blender.org/manual/en/dev/render/output/properties/output.html [4]: https://blender.stackexchange.com/questions/6101/poll-failed-context-incorrect-example-bpy-ops-view3d-background-image-add [5]: https://docs.blender.org/api/current/bpy.types.RenderSettings.html?highlight=render%20filepath#bpy.types.RenderSettings.filepath