Kagiso Rabada struck three times before lunch on the third day of the fourth Test at SuperSport Park, recording his second five-wicket haul in Test cricket and leaving England in tatters at 211 for 6.
Starting the day on 138 for 2 with captain Alastair Cook on 67 and Joe Root on 31, England began patiently, seeing off three maidens in a row from Kyle Abbott and Rabada.
Cook in particular was very circumspect, adding a further 9 runs to his overnight score in 44 balls before falling to Morne Morkel for 76.
James Taylor joined Root and immediately looked in trouble against a hostile spell from Morkel.
The Proteas thought they had struck soon after when Root was given out caught behind of Dane Piedt only for his review to confirm that that umpire Kumar Dharmasena had made an error.
With the new ball approaching, De Villiers gave Rabada one final crack before the break and the young Proteas speedster obliged with Root edging behind to De Kock for 76.
He then removed Taylor (14) with a bouncer as the diminutive English middle-order batsman attempted an ill-judged hook shot.
Rabada followed up Taylor’s wicket with that of the in form Jonny Bairstow (0) who edged behind to De Kock on the stroke of lunch leaving England in deep trouble and the young Proteas speedster with figures of 5/76 in 20 overs.