Get particle location using python
Use the depsgraph

Using the code suggested here https://developer.blender.org/T58792

Adds an empty, displayed as a cube, at the particle location.   Make the object with the particle system active, move to desired frame and run script.

import bpy
from mathutils import Matrix

context = bpy.context
# beware removes all empties from scene (for testing)
for mt in (o for o in context.scene.objects if o.data is None):
    bpy.data.objects.remove(mt)

# get the depsgraph and the evaluated object   
dg = context.evaluated_depsgraph_get()
ob = context.object.evaluated_get(dg)
# assume context object has a ps, use active
ps = ob.particle_systems.active
# this is the instance object
po = ps.settings.instance_object

for p in ps.particles:
    # make a matrix for the particles
    M = p.rotation.to_matrix().to_4x4()
    M.translation = p.location
    # put an empty at particle
    bpy.ops.object.empty_add()
    mt = context.object
    mt.matrix_world = M
    # the scale
    mt.scale = (p.size,) * 3
    mt.empty_display_type = 'CUBE'


The global location of each vertex of the instance object of the particle system will be 

mt.matrix_world @ vert.co