The home team produced another inept batting display to reach the close of play with a 19-run lead and only three wickets left. The defiant Shivnarine Chanderpaul [ Images ] was 57 not out and Sulieman Benn unbeaten on four.
Steyn removed openers Dale Richards (17) and Chris Gayle [ Images ] (10) and then dismissed Narsingh Deonarine for a first-ball duck.
Botha had Brendan Nash [ Images ] (12) caught at slip by Jacques Kallis [ Images ] after tea before claiming the wickets of Denesh Ramdin [ Images ] (1) and Shane Shillingford, who made 25 in 77 deliveries.
Experienced left-hander Chanderpaul provided typically dogged resistance with a 156-ball knock that contained six fours.
Prince hit five fours in his painstaking 262-ball innings while De Villiers needed 189 deliveries.
Spinner Benn was in sparkling form for West Indies, taking six for 81 in 46.4 overs.
West Indies first innings 231
South Africa first innings (overnight score 285 for six)
G.Smith c Richards b Benn 70
A.Petersen c Chanderpaul b Roach 1
H.Amla c Nash b Benn 5
P.Harris c Gayle b Bess 11
J.Kallis b Benn 43
AB de Villiers c Ramdin b Benn 73
A.Prince not out 78
M.Boucher run out 17
J.Botha lbw b Steyn 9
D.Steyn b Roach 4
M.Morkel c Bravo b Benn 9
Extras (b-5, lb-6, w-7, nb-8) 26
Total (all out, 134.4 overs) 346
Fall of wickets: 1-17, 2-41, 3-60, 4-122, 5-145, 6-279, 7-312, 8-326, 9-333
Bowling: Roach 25-6-59-2, Bess 9-0-65-1, Shllingford 25-2-85-0, Benn 46.4-13-81-6, Bravo 27-12-43-0, Gayle 2-1-2-0.
C.Gayle c Boucher b Steyn 10
D.Richards c Petersen b Steyn 17
N.Deonarine c Prince b Steyn 0
S.Chanderpaul not out 57
B.Nash c Kallis b Botha 12
D.Bravo b Harris 2
D.Ramdin c Boucher b Botha 1
S.Shillingford lbw b Botha 25
S.Benn not out 4
Extras (b-1, lb-1,w-1,nb-3) 6
Total (for seven wickets; 57 overs) 134
Fall of wickets: 1-27, 2-27, 3-36, 4-70, 5-74, 6-75, 7-128
Bowling: Steyn 9-3-31-3, Morkel 10-4-23-0, Harris 16-3-34-1, Botha 18-5-34-3, Kallis 4-0-10-0.