James Anderson claimed an important late wicket for England as South Africa ended the second day of the first Test on 214-5 - 244 short of their hosts' first-innings total.
Temba Bavuma and Theunis de Bruyn had combined for 99 runs before the latter was caught behind for 48 as Friday's play edged towards a conclusion at Lord's.
Opener Dean Elgar (54) top-scored for the Proteas, while Stuart Broad shone with bat and ball for Joe Root's men.
Broad hit an unbeaten 57 from just 47 balls - England finishing 458 all out having ended day one on 357-5 - before claiming two key South African wickets.
England's innings saw Root unable to build on his stunning Thursday display, only adding six runs to the 184 he racked up on his first day as captain, falling agonisingly short of the double century.
Liam Dawson (0) fell just two balls later as the day got off to a shaky start for England, and the loss of Moeen Ali for 87 added further cause for concern.
But England overcame Moeen's departure thanks to Broad, the 31-year-old putting in an entertaining display as he eight fours and two sixes to steer the hosts towards their challenging total.
And having done the damage late on in the English innings, it was Broad (2-27) who set about inflicting more pain on the tourists when it was their turn to bat.
Heino Kuhn (1) was caught by former England skipper Alastair Cook off a Broad delivery, and JP Duminy (15) was later trapped lbw by the Nottinghamshire bowler.
Moeen was responsible for the important scalp of captain Elgar as he posted figures of 2-35, but Bavuma and De Bruyn steadied the ship after a trio of less than convincing batting displays from Kuhn, Hashim Amla (29) and Duminy.
De Bruyn was eventually seen off by Anderson (1-27) but nightwatchman Kagiso Rabada (9 not out) survived a late test to remain at the crease alongside Bavuma, who is unbeaten on 48.