Quinton de Kock led a fight-back after rain halted England's destruction of South Africa's top order on the third day of the third Test at St George's Park, but the tourists remain in command after Dom Bess's maiden Test five-wicket haul.
De Kock, who was dropped three times, scored an unbeaten 63 to see South Africa to 208-6 at stumps after rain reduced the day's play to 64 overs. Vernon Philander was not out on 27.
The home side are still 291 runs behind after off spinner Bess claimed the first five South African wickets to fall.
He bagged two on Friday to leave South Africa teetering at 60-2 overnight, in replay to England’s mammoth 499 for nine declared, and picked up where he left off on Saturday with three more.
Bess removed Dean Elgar, Faf du Plessis and Rassie van der Dussen before rain stopped proceedings at 11.45am, some 15 minutes before the scheduled lunch break.
Play did not resume until 3.30pm, frustrating England’s march through the batting order.
De Kock was dropped twice by Ben Stokes off the bowling of captain Joe Root, first on 30 and then 56, and then again in the penultimate over, by Stokes off Joe Denly.
But he played some characteristically entertaining strokes to provide some respite for the home fans after a relentless pounding from England over the first two days.
Bess had not been selected for the tour at first, flown out to South Africa just before Christmas as cover when a virus struck the England camp. But he has made a strong bid for a place on their next tour to Sri Lanka with figures of 5-51 in 31 overs.
"I'll cherish today, I've worked hard for days like this," Bess said afterwards.
On Saturday he first dismissed Elgar, who edged the ball off his pad to Ollie Pope at silly point for 35, and then he removed Du Plessis in exactly the same way.
Bess then saw captain Joe Root drop nightwatchman Anrich Nortje at first slip and Pope fail to snag a half-chance off Van der Dussen.
But his fifth wicket came two balls later, to joyous celebration, as Van der Dussen played on and was bowled for 24.
Nortje proved stubborn, soaking up 136 balls before Stokes had him caught by Root for 18.
South Africa still face following on, with England chasing 14 wickets to win the Test and go 2-1 ahead in the series before the last Test in Johannesburg next week.
"We are going to come out and focus on fighting for the next two days," said Nortje.