India lost opener Gautam Gambhir and Cheteshwar Pujara to reach 49 for two at the break, needing 261 runs in 31 overs for an unlikely win.
Murali Vijay was unbeaten on 29 with his captain Virat Kohli on two at the other end.
England captain Alastair Cook notched up his 30th Test hundred and declared his team’s second innings on 260 for three after getting out on 130, giving his bowlers 49 overs to get India’s 10 wickets.
Chris Woakes gave England an ideal start by dismissing Gambhir for a duck in his first over with the left-hander edging a rising delivery straight to Joe Root at second slip.
England could have been in an even better position and closer to a win if they had held on to their catches.
Vijay, India’s highest scorer in the first innings with 126, was dropped on 13 by left-arm spinner Zafar Ansari, who failed to hold on to a powerful return catch.
Ansari was the unlucky bowler again in his next over when Stuart Broad dropped a much easier catch of first-innings centurion Pujara at point with the batsman on 10.
Pujara was dismissed on l8, given out leg before off leg-spinner Adil Rashid with replaying showing the ball had pitched outside the leg stump and the decision would have been overturned on review.
Earlier, Cook continued his penchant for scoring big against India by bringing up his sixth hundred against the opponents, five of them while touring the country.
Resuming on his overnight score of 46, the left-hander looked unperturbed against the turning ball and was equally comfortable against India’s pacemen, who got the ball to reverse swing.
Cook got to his three-figure mark by pushing leg-spinner Amit Mishra for a single and has hit 10 boundaries in his knock so far.
Mishra broke England’s best opening stand in India with his third ball of the day when the 19-year-old Haseeb Hammed (82) hit a flighted delivery straight back to the spinner.
England’s debutant opener struggled in the morning, repeatedly beaten by India off-spinner Ravichandran Ashwin outside his off-stump and also appeared jittery against fast bowlers Mohammed Shami and Umesh Yadav.
Mishra also picked up Root in his second over of the morning when the batsman went for a wild slog and got a top edge for wicketkeeper Wriddhiman Saha to pouch the skier.
England promoted the hard-hitting Stokes up the order in an intent to score quick runs and the left-hander hit 29 in as many deliveries in a 68-run stand with Cook for the third wicket.
Original source: England pick up two wickets after setting India 310 for win