South Africa had resumed on 208 for six, with Vernon Philander (27) and Quinton de Kock (63) having put on 54 for the seventh wicket.
Seamer Stuart Broad ripped through South Africa's tail to allow England to enforce the follow-on on the fourth morning of the third test before rain interrupted their victory charge at St George's Park on Sunday.
The hosts are 15 without loss in their second innings, still 275 runs behind England's 499 for nine declared after South Africa capitulated for 209 as they lost four wickets for a single run added when play resumed on day four.
Dean Elgar (13 not out) and Pieter Malan (1 not out) began South Africa's second innings with the home side needing to negotiate the best part of five sessions to salvage a draw, potentially aided by rain showers forecast for Sunday and Monday.
South Africa had resumed on 208 for six, with Vernon Philander (27) and Quinton de Kock (63) having put on 54 for the seventh wicket but facing a new ball that had been taken by England late on the third evening.
It took Broad (3-30) only six balls to make the breakthrough, finding some seam movement to have Philander clean bowled.
De Kock followed five balls later, with seamer Sam Curran hitting the top of middle stump.
That realistically ended South Africa's hopes of avoiding the follow-on. Keshav Maharaj (0) chopped a Broad delivery onto his stumps and Kagiso Rabada (1) chipped Broad to Mark Wood at mid-off.
Off-pinner Dom Bess finished the innings with career-best figures of 5-51.
South Africa won the first test in Pretoria by 107 runs before the tourists hit back with a 189-run success in Cape Town.The final test of the four-match series starts at The Wanderers in Johannesburg on Friday.