The hosts managed to get themselves up to 353 in their first innings with Ben Stokes making a brilliant 112 and Alistair Cook making 88.
The Proteas never got going at the start of their innings as Toby Roland-Jones, on his debut, took four early wickets to put the hosts in firm control.
The visitors, therefore, ended the day in real danger of having to follow-on with only two wickets left. They still need 27 runs to leave the hosts with no choice but to bat again.
The Proteas started well with the ball but Stokes and Bairstow steadied the ship for the hosts
Day two started at the Oval with the hosts on 171-4, after a rain affected opening day, with Cook 82 not out and Stokes on 21 not out.
The Proteas, though, got off to a good start in the morning when Cook fell for 88, Mourne Morkel trapping him LBW.
Stokes was still at the crease and alongside Jonny Bairstow, the pair took their partnership past the half-century mark.
Stokes also went past his own half-century during the partnership which got to 75 before Kegiso Rabada removed Bairstow for 36.
At lunch, the hosts ended the session on 296-6 with Stokes 64 not out and Moeen Ali 10 not out.
The visitors continued to take wickets after lunch
After lunch, the visitors once again started well when Morkel removed Ali for 16 which left the hosts in a spot of trouble.
Roland-Jones, though, came to the crease on his debut and alongside Stokes, the pair took the hosts past the 300 mark.
The debutant scored at a very good rate before he was dismissed as Keshav Maharaj trapped him LBW.
Rabada then dismissed Stuart Broad for three to leave Stokes nine short of his century with only James Anderson left to bat for the hosts.
Stokes' scored his fifth test ton to get the hosts up to 353
Stokes, though, wasn't going to be denied as he hit three consecutive sixes to bring up his fifth test century which was very well-deserved.
Stokes was then finally dismissed for 112 when Morkel removed him. The hosts were all out for 353 with the visitors having to come out before tea for a tricky spell.
It proved just that as Roland-Jones dismissed Dean Elgar for eight in the last over before the break to get his maiden test wicket as the Proteas ended the session on 18-1.
Brilliant bowling from the hosts in the evening session leaves the visitors in real danger of not avoiding the follow on
After tea, it was all about the English bowlers and in particular, Roland-Jones when he removed Heino Kuhn for 15, Hashim Amla for six and Quinton de Kock 17 in quick succession to leave the visitors in big trouble at 47-4.
Anderson then got in on the act soon after when he removed Faf du Plessis for one and Chris Morris for two to leave the visitors in big trouble.
Stokes then removed Maharaj for five soon after to leave the Proteas in big danger of being unable to get passed the follow on target.
Temba Bavuma and Rabada though showed some fight as they put on 53 for the eighth wicket until Broad removed Rabada for 30.
The visitors then battled through the remaining overs and managed to get to the end of the day without losing any more wickets. They finished the day on 126-8, 227 runs behind, still needing 27 runs to avoid the follow on.
The key tomorrow will be Bavuma, who finished the day on 34 not out, while Morkel will need to hang around. In addition, the visitors will be hoping that Vernon Philander will recover from his sickness in order to be able to bat tomorrow morning.