South Africa in charge after De Villiers hits 148
West Indies trail by four runs
South Africa removed the West Indian openers in Sunday's last session at Newlands to build on AB de Villiers' superb century and take the initiative in the final Test.
The tourists reached the close on day three on 88 for two in their second innings.
The wickets of Devon Smith and Kraigg Brathwaite mean South Africa, who still lead by four runs after their first innings, are well placed to attack the West Indies batting on Monday and set up a second victory in the three-match series.
Morne Morkel had Smith caught down the leg side for seven followed by a wicket for debutant spinner Simon Harmer, who bowled Brathwaite for 16.
Marlon Samuels (26) and Leon Johnson (37) were not out at stumps after a third-wicket partnership of 61 runs.
The platform for potential home success was set up by De Villiers, who hit a flamboyant 148 to guide South Africa to 421 all out just before tea and a 92-run first innings lead.
De Villiers scored his 21st Test century in a concerted effort to accelerate the scoring and build an advantage on a batting track that showed signs of playing up with two days left.
But a regular fall of wickets around him meant the hosts were unable to build the bigger lead they had hoped for after resuming on their overnight tally of 227 for three in reply to West Indies' first innings of 329.
De Villiers began the day 32 not out and got some early momentum with Hashim Amla before the South African captain was caught behind by wicketkeeper Denesh Ramdin for 63 off the bowling of Jason Holder in an important breakthrough for the tourists.
Amla was followed back to the dressing room by Temba Bavuma, bowled by Shannon Gabriel for 15, before De Villiers and Stiaan van Zyl (33) put on a 96-run partnership for the sixth wicket.
Harmer made 10, his knock sandwiched between run outs for both Vernon Philander and Dale Steyn, both of whom did not trouble the scorers.
De Villiers was the last man out, caught on the boundary off spinner Samuels as he attempted to plunder the bowling in a final-wicket partnership with tailender Morkel (four not out).
A series victory for South Africa will see them retain their ranking as the top Test-playing nation.
They won the first Test in Pretoria by an innings and 220 runs but drew with the West Indies in the second Test in Port Elizabeth in a rain-affected game.