At tea, the tourists had reached 109/2, holding a 145-run lead in their second innings, with Cheteshwar Pujara on 39 and Virat Kohli on six.
Murali Vijay and Pujara shared 70 runs for the second wicket before Jacques Kallis had Vijay caught behind for 39 midway through the second session, but Kohli and Pujara saw out the remaining overs before the break.
In a show of desperation, wicketkeeper AB de Villiers took the ball for the final over before tea, with Hashim Amla taking the gloves, but the stunt did little to deter the Indian batsmen.
Seam bowler Vernon Philander had got the early breakthrough before lunch when Shikhar Dhawan got an edge to Kallis in the slips for 15 runs.
With that scalp, Philander became the fastest South African to take 100 Test wickets, achieving the milestone one match faster than Dale Steyn.
The Proteas were handed a blow in the final over before lunch when speedster Morne Morkel was helped off the field after twisting his ankle while fielding on the boundary. He was taken for a scan and did not take to the field in the second session.
Earlier, in the morning, India had wasted no time in removing the Proteas tail, dismissing the hosts for 244 runs in their first innings.
South Africa resumed at 213/6 and paceman Zaheer Khan struck early when Philander got an outside edge to Ravichandran Ashwin in the slips in the fourth over of the day.
Philander, who put up a valiant fight after a middle-order collapse on day two, made his third career half-century, contributing a well-played 59 runs off 86 deliveries.
Faf du Plessis, who shared a crucial 80-run stand with Philander, tried to prop up the tail after making a determined 20-run contribution, but Zaheer had him caught behind and the Proteas were soon bundled out.
Zaheer and Ishant Sharma took four wickets each to lead a destructive Indian pace attack that took full advantage of the conditions to give their side a first innings lead.
For instant updates follow @TheCitizenSport.