South Africa 208 for 6 (de Kock 63*, Philander 27*) trail England 499 for 9 dec by 291 runs
Dom Bess became the latest of England's young bloods to leave his mark on South Africa but the old foe of bad weather, coupled with some much-needed defiance from the home batsmen (plus a few dropped catches), prevented the tourists from maximising their advantage on day three in Port Elizabeth.
With Bess producing his most impressive display in an England shirt to secure a maiden Test five-for, the threat of the follow-on loomed large for South Africa. But they were able to recover from a position of 109 for 5 thanks to Quinton de Kock's third half-century of the series, as well as 136 balls of dogged resistance from the nightwatchman, Anrich Nortje.
De Kock was unbeaten on 63 at the close, having put on partnerships of 45 with Nortje and a further 54 alongside Vernon Philander. He might have been dismissed three times by spin but on each occasion Ben Stokes was unable to hold on to sharp chances at slip - and with another 26 overs lost due to rain, England's prospects of capturing a series lead before the teams move on to Johannesburg looked to have taken a hit.
South Africa's captain, Faf du Plessis, pronounced before the third Test that his team had made "huge steps in the right direction" against England, following a run of five consecutive defeats. While du Plessis could not extricate himself from his own run of bad form, falling to Bess for the second time in as many innings, the bloody-minded efforts of de Kock and, in particular, Nortje, gave his side something to rally around.
Although there was no doubting England were on top, they seemed likely to find themselves in a battle against time, the elements and an unforgiving pitch - with de Kock's rearguard blocking their path to enforcing the follow-on, and 92 runs still needed for South Africa to take the decision out of Joe Root's hands.
The morning session could scarcely have gone better for England, with Bess striking three more times to claim each of the five South African wickets to have fallen, before a delay of more than three hours began to impinge on hopes of a positive result in this match. When play was able to resume in mid-afternoon, de Kock succeeded in seeing off the fiery Mark Wood as he and Nortje combined to frustrate England further.
South Africa's wicketkeeper produced a number of fine strokes during a counterattacking innings, although at times he lived on the edge. Root might have removed him twice, on 30 and 56, with Stokes the culprit on both occasions. Another chance came late in the day, when de Kock was cramped by Joe Denly's legspin and top-edged a cut low to Stokes' right - but again England's most-reliable catcher could not cling on.
Stokes did have a more familiar impact with the ball, although the fact England waited until the 61st over to turn to his bowling - so galvanic in the victory at Newlands - raised questions about what might have been after the allrounder proceeded to dismiss Nortje with his 10th delivery.
Nortje had already benefited from lapses in the field, Root putting down a simple chance at slip that would have given Bess his five-for. Having demonstrated his ability with the bat in South Africa's victory in Centurion, Nortje dug in manfully in the face of Wood's 150kph/93mph hostility - a half-chance to Ollie Pope at short leg the closest Wood came to getting his man. By the time Stokes drew an edge to slip, Nortje had played by far his longest first-class innings and kept England at bay for more than three hours.
Such fighting spirit seemed to be lacking as South Africa set about their attempts to build a convincing first-innings reply. Resuming on 60 for 2, after Bess had struck twice on the second evening, they lost Dean Elgar in the fourth over of the day, smartly taken by the diving Pope at silly point as the ball ricocheted off bat and pad.
Du Plessis seemed intent on taking the attack to England's rookie offspinner, a 22-year-old playing in just his fourth Test, twice leaving his ground to stroke fours through mid-off. But Bess changed his line of attack to over the wicket, found some drift and grip and another inside edge plopped safely into the hands of Pope, at short leg this time.
South Africa had been left in a mess against Bess, whose fourth wicket ensured career-best figures. He was not to be denied a fifth - becoming the youngest England spinner to take a Test five-for since Pat Pocock in 1968 - as Rassie van der Dussen dragged the ball into his stumps to give the unexpected tourist an unexpected starring role. But the rain and de Kock meant the day was not simply about Bess.