Australia took a firm grip on the third Test as seamers Mitchell Johnson and Ryan Harris snared seven wickets between them to bowl South Africa out for 287 on day three Monday at Newlands.
While Johnson combined pace and aggression to raise his series tally to 19 wickets in five innings, Harris found reverse swing to claim three key wickets as South Africa conceded a first-innings deficit of 207.
Faf du Plessis and Alviro Petersen were the only batsmen to score half-centuries for South Africa, which was bowled out within a day after Michael Clarke declared Australia's first innings on its overnight total of 494-7.
Clarke elected not to enforce the follow-on, and Australia advanced to 27 without loss at stumps to take an overall lead of 234 runs with two days to play.
Australia's decision to declare overnight after a session and a half was lost to rain on Sunday proved a good one, as their seamers found early movement.
In the fifth over Harris had captain Graeme Smith caught behind for 5 by Brad Haddin, who was soon in action again to take a spectacular one-handed grab after James Pattinson found the inside edge of Dean Elgar's bat. Elgar made 11.
Opener Alviro Petersen showed signs of a return to form as he hit eight fours in his 53, but then feathered a legside delivery from Johnson through to Haddin.
However, the biggest blow to South Africa came in the dismissal of Hashim Amla, as Harris found reverse swing to bend one through the batsman's defenses shortly before the lunch break. Amla had 38.
After the interval, Johnson had AB de Villiers caught at second slip on 14, then Harris induced an edge from Duminy on 4 to give Haddin his fourth catch of the innings.
Australia's position could have become even better, but Haddin missed the opportunity to stump Du Plessis off the bowling of Nathan Lyon, who then saw the batsman put down at short leg two deliveries later.
Du Plessis went on to score 67 and put on a 95-run partnership with Vernon Philander, but after tea he pushed at a Johnson delivery and was caught at second slip.
Philander stuck around for an unbeaten 37, but aside from seeing Dale Steyn hit a quick 28, he found little support before the second new ball became available to allow Australia to clean up South Africa's tail.
In the six overs left in the day, Australia opener Dave Warner smacked Morne Morkel for 24 runs to be 25 not out.