Hashim Amla batted through the third day in Cape Town as the South Africa captain took the lead role in repelling England’s quest for an unassailable series lead.
England managed just one wicket on a day of hard graft as dropped catches loomed costly to their hopes of going 2-0 ahead in the four-match series.
England should have severed their stand earlier, however, with Amla twice dropped.
Anderson put down a sharp slip catch when the right-hander was 76 before Nick Compton spilled a chance at point, off Finn, after Amla had ended his year-long wait for a Test ton.
That lean spell, plus South Africa’s faltering fortunes in the past 12 months, had poured pressure on their leader but Amla silenced his critics in the way he knows best to reach stumps unbeaten on 157, from 371 balls, and his team 353 for three.
The 32-year-old has been at the crease for over nine hours and has spent all but 2.3 overs of the game in the middle.
With two days left to play England can still very much claim to be in the driving seat, thanks to the record-breaking antics of Ben Stokes and Jonny Bairstow, with South Africa still 276 runs adrift.
But finding a way past the wide blade of South Africa’s rejuvenated captain will be crucial to any hopes.
England might have expected before play that they would be in for a long day, in hot conditions, and Cook used every option at his disposal - including Alex Hales for three overs - to try and make meaningful headway.
Seven bowlers were used in all, although it was Finn who was the pick of a performance the bowlers could rightly feel content with despite the lack of wickets.
A batsman-friendly wicket at Newlands has offered little assistance, the second new ball hardly swung today, and in two days of cricket there have been as many run-outs as there have wickets for the bowlers.
@Swannyg66 hey mate hope you're well. Just wondering what your test match economy rate is?
— Alex Hales (@AlexHales1) January 4, 2016
Unlike yesterday, however, when 450 runs were piled up on a barely-believable day, the Proteas managed 212 runs in 87 overs.
That underlined the hosts’ desire to sit in and try and bat time out of the game as much as it reflected England’s discipline with the ball in difficult conditions.
Moeen Ali did the bulk of the work, his 31 overs have comfortably cost less than three an over, while he did find some turn to suggest there may be some decay in the surface.
But without any obvious help just yet it was Finn’s height and bounce that troubled the Proteas the most.
He immediately made De Villiers look uncomfortable to the short ball with a fine spell first-up and twice false strokes fell just short of the field.
It was Amla who should have departed in a wicketless morning session, when 58 runs were scored in 29 overs, with Joe Root’s first delivery of the game.
Amla drove forcefully and the ball squirted quickly to Anderson who could not get his hands sorted in time to do anything other than parry the ball.
It was the only chance Amla needed on his way to a long-awaited century, which he achieved just after the lunch break.
South Africa failed to post a single century partnership in 2015 but Amla’s stand with De Villiers - who passed 8,000 Test runs today - grew towards twice that amount when Compton put down his chance.
That came moments after De ViIlliers, who was dropped on five last night, was reprieved by an inside-edge when given out lbw by Aleem Dar.
Finally the breakthrough came on the brink of tea when De Villiers, in sight of ending his own year-long wait for a Test century, saw Anderson show good athleticism to jump and parry the ball up before holding on at midwicket.
That offered England hope as Faf du Plessis, out of form after a troubled tour of India, strode to the crease but he too prospered to finish the day unbeaten on 51 and having added a further 85 runs with his captain Amla.