Seamer Morne Morkel claimed his 300th career wicket as South Africa edged ahead in the third Test on Friday when they reduced Australia to 245 for nine at the close on the second day, still 66 runs behind their hosts' first innings score at Newlands.
Tim Paine (33) and Josh Hazlewood (1) will resume on the third morning, seeking to reduce the deficit further on a wicket with bounce and some seam movement, and in the knowledge that Australia will have to bat last in a series that is poised at 1-1.
Morkel (4-87) reached his landmark 20 minutes before tea when Shaun Marsh (26) slashed at a wide delivery and was comfortably caught by wicketkeeper Quinton de Kock, a poor stroke from the left-hander.
The tall fast bowler, who has announced he will retire from all forms of international cricket after this series, had earlier removed Usman Khawaja (5) and claimed the key wicket of Australia captain Steve Smith (5).
Khawaja was caught at fine leg by Kagiso Rabada attempting a hook, while Smith played at a rising delivery well-outside his off-stump and edged to Dean Elgar in the gully.
It continued a poor run of scores for Smith, who is averaging just 27 from five innings in the series, and he looked out of sorts having been roughed up by some fierce fast bowling from Rabada before lunch.
Vernon Philander (2-26) struck either side of the tea break to remove innings top-scorer Cameron Bancroft (77), who was trapped leg before wicket, and Mitchell March (5), caught by De Kock.
Australia sunk deeper into the mire when Rabada (3-81) returned to claim the wickets of Pat Cummins (4) and Mitchell Starc (2), both caught by AB de Villiers at third slip.
But Nathan Lyon (47) led a rally from the visitors as he frustrated the home side with his highest score in Tests, adding 66 for the ninth wicket with Paine before he skied a Morkel delivery and was well caught by Elgar. They could yet be crucial runs in the contest.
Elgar earlier carried his bat for the third time in his Test career as he finished 141 not out when South Africa were bowled out for 311 on the second morning.
His efforts helped the home side add 45 runs to their overnight score of 266-8.
Elgar and Rabada (22) took their ninth wicket partnership to exactly 50 before the latter edged a Lyon (2-43) delivery to Smith at slip.
Four balls later, the spinner repeated the dismissal as Morkel (4) was also gobbled up by Smith, a fifth catch of the innings for the Australian to equal the most ever in Test history, one of 11 outfield players to achieve the feat.