The Cardinals batted around and scored six runs in the second inning, and went on to beat the Brewers for the 10th time in 12 games this season.
Beltran followed with a home run off the scoreboard in center for his 22nd homer of the season. After an out, Craig, who had opened the scoring in the first with a double that drove in Beltran, connected for his 12th home run this year.
Cardinals starter Jake Westbrook was unable to capitalize for the win, lasting 4 2/3 innings as Milwaukee fought back to 7-5 behind a three-run home run by Aramis Ramirez in the third and RBI singles by Juan Francisco and Sean Halton in the fifth.
Westbrook was pulled and Kevin Siegrist (2-1) got the final out in the fifth and the first in the sixth to get the win.
Matt Holliday homered for St. Louis in the ninth and Logan Schafer had a home run for the Brewers in the bottom of the inning. Edward Mujica collected his 33rd save, despite giving up the home run to Schafer and another hit in the ninth.