Set to make 416 to win, South Africa were 136 for four at the close of play, facing a long struggle to bat out the final day to earn a draw and prevent England from going ahead in the four-match series.
England hopes soared when the tall Finn had South African captain Hashim Amla caught behind for 12 before removing the limpet-like Dean Elgar for 40. Elgar, who carried his bat for 118 not out in the first innings, was caught at second slip by Joe Root. He had been on the field for the entire match up to that point.
But, in what proved to be the last over of the day, Finn struck again, having Du Plessis caught by England captain Alastair Cook at first slip off a ball that kicked viciously to glance off the shoulder of the bat. Finn finished the day with three for 27. Du Plessis nine off 66 balls.
De Villiers, who made 37 not out off 83 balls, escaped with his score on 33 when he went down the pitch to off-spinner Moeen Ali and wicketkeeper Jonny Bairstow failed to catch a sharply-turning ball to make a stumping.
More From This Section
The left-handed Van Zyl played some handsome strokes before he fell in similar fashion to his first innings duck against Stuart Broad, misjudging a ball bowled from around the wicket which hit his off stump.
Bairstow hit an aggressive 79 off 76 balls to provide
impetus to the England innings as they sought to score quickly to give themselves time to bowl out South Africa.
Bairstow hit nine fours and three sixes before he was last man out, caught at long-off, after he provided a rare example of a batsman scoring freely on a dry, slow pitch.
South Africa struck two blows early in the day, dismissing Joe Root for 73 and Stokes for five.
But Bairstow followed up a first innings of 41 with another fluent performance, with James Taylor (41), Moeen Ali (16) and Chris Woakes (23) all providing support.
Steyn, who only bowled 3.5 overs on Monday, including a second spell of just three balls, again felt discomfort in his right shoulder and it was decided he should not take the field. The injury puts him in doubt for the second Test starting in Cape Town on Saturday.