A hard-fought game is now set for an intriguing final day, with the Titans needing a further 331 runs for what would be a remarkable victory, and the Cobras seeking nine wickets.
The Cobras’ dominant position was set up by an attacking unbeaten century from Dane Vilas, as the wicketkeeper-batsman notched up his 10th first-class ton.
The hosts resumed at the start of the day on 112 for three in their second innings, leading by 245 runs, but had Justin Ontong caught behind off the bowling of Ethy Mbhalati for 43 early on.
While Omphile Ramela continued to provide the innings with stability, Vilas went about moving the game along as the pair added 71 for the fifth wicket in just 19 overs.
After Ramela was caught behind off David Wiese for a 166-ball 43, Vilas shared in stands of 62 with Dane Piedt (31) and 51 with Rory Kleinveldt (39) - the latter taking less than 10 overs as Kleinveldt hammered eight fours in a 32-ball knock.
Once Vilas had reached his century off 130 balls the Cobras declared their innings on 341 for seven, ensuring that the innings break coincided with the tea interval.
Kleinveldt then struck in his third over to remove De Bruyn, but Elgar and Davids gave the home side no further joy on a hot afternoon in Paarl.