After bowling the hosts out for 183, Mark Wood claiming a five-for, England opted against enforcing the follow-on and instead built on their 217-run first-innings advantage.
Captain Joe Root led the way with a 58, his wicket bringing the tourists' fun to an end as Faf du Plessis took a stunning one-handed catch to give Beuran Hendricks 5-64 on his Test debut.
That afforded the Proteas some joy on an otherwise frustrating day and they will return on Monday needing to complete a world-record chase to avoid a 3-1 series defeat.
Rooty at The Wanderers
— England Cricket (@englandcricket) January 26, 2020
South Africa resumed on 88-6 on Sunday and facing an uphill struggle which became all the harder when Vernon Philander fell in the first full over of the day in his final Test outing.
Chris Woakes claimed that scalp and Ben Stokes accounted for the stubborn Dwaine Pretorius (37), but it was the impressive Wood (5-46) who took the key wicket of Quinton de Kock for 76.
Dane Paterson was Wood's final victim as South Africa's dismal innings came to an end, England deciding to bat and doing so for the remainder of the day.
Zak Crawley and Dom Sibley enjoyed a 107-run opening stand in the first innings and managed 56 this time before Pretorius dismissed the former.
Joe Denly was out cheap to Paterson when he inside-edged onto his own stumps, while Sibley went for a patient 44.
There was some typically ambitious hitting in a 24-ball Ben Stokes cameo that yielded 28 runs and six boundaries, while Root had been steadily edging towards his half-century as partners came and went at regular intervals.
Wood added to his bowling exploits with 18 runs from 12 balls and Root was the last man to fall, Du Plessis showing superb athleticism and incredible handling to grasp a fast-moving ball down low to his right.
Photo Getty Images Caption: England captain Joe Root