England's Steven Finn took three wickets as South Africa, chasing an unlikely 416 for victory, struggled to 136 for four on the fourth day of the first Test.
England snared openers Dean Elgar and Stiaan van Zyl as well out-of-form captain Hashim Amla to give themselves a strong chance of winning the opening match of the four-test series against the world's top-ranked side.
They added a key wicket in the penultimate over to boost their hopes greatly when a rising delivery from Finn forced Faf du Plessis to edge a catch to Alastair Cook at slip after a stonewalling innings of nine off 66 balls.
England might have also had the prize wicket of AB de Villiers but wicketkeeper Jonny Bairstow missed a chance to stump him off a viciously turning ball from Moeen Ali.
De Villiers was 37 not out at the close with nightwatchman Dale Steyn on nought.
South Africa must bat through three sessions and 90 overs on Wednesday to save the test. They still require 280 runs to win.
Ben Stokes bowled Van Zyl for 33 after South Africa had made a positive start in a fluent opening stand of 53. Amla (12) went cheaply again when he was caught by Bairstow flashing at a short ball from Finn.
Elgar, who made an unbeaten century in the first innings, was caught in the slips edging a full delivery from Finn for 40.
England were bowled out just after lunch for 326 in their second innings, Bairstow top-scoring with a quickfire 79 off 76 balls in a display of perfect timing on a slow surface before he holed out in the deep to end the innings.
Bairstow was forced to take risks as he ran out of partners and South Africa off-spinner Dane Piedt claimed his first five-wicket haul.
England, resuming on 172 for three, lost four wickets before lunch and the last three inside the first hour of the afternoon session.
Joe Root, unbeaten on 60 overnight, added 13 to his score before guiding a Kyle Abbott delivery to Van Zyl at first slip while James Taylor made 42 before being stumped.
South Africa had to do without the world's best bowler Steyn in their attack after his shoulder spasm failed to clear up overnight.