Cheteshwar Pujara scored a century on his home ground and Murali Vijay also reached three figures as India piled on the runs before two late wickets gave England hope on day three of the first Test.
The tourists racked up a mammoth 537 all out after Alastair Cook won the toss in Rajkot, but they endured a gruelling Friday in the field which ended with India 319-4 - trailing by 218.
Pujara maintained his outstanding form by making a classy 124, much to the delight of an expectant crowd in his home city, and opening batsman Vijay (126) batted for the majority of the day to end his 17-month wait for a Test ton.
Stuart Broad (1-54) claimed the early wicket of Gautam Gambhir (29), but Vijay - dropped by debutant Haseeb Hameed on 66 - and Pujara combined for a second-wicket stand of 211.
Ben Stokes (1-39) got rid of Pujara, then Adil Rashid (1-47) and Zafar Ansari (1-57) saw the back of Vijay and night-watchman Amit Mishra (0) respectively late in an otherwise dominant day for India, whose captain Virat Kohli is unbeaten on 26.
It had all started so well for England when Broad - playing his 100th Test - trapped Gambhir leg before wicket with his first ball of the morning, the left-hander getting into an awkward position attempting to work the pacemen through the leg side.
That was not the sign of things to come, though, and Pujara came through a barrage from a fired up Chris Woakes which saw him struck three times on the helmet by the England all-rounder.
A brilliant spell from Woakes failed to reap any rewards, as Pujara used his feet well to the spinners and looked assured after a tricky start to his innings, while Vijay came down the track to launch Ansari for six.
Pujara scored freely with some elegant drives on both sides of the wicket and both batsmen brought up their half-centuries in the morning session to move India on to 162-1 at lunch.
Broad cut a frustrated figure after a diving Hameed failed to cling on when he was offered a tricky chance by Vijay and Pujara successfully overturned an lbw decision 16 runs shy of his century to cut short Ansari's celebrations.
Pujara scampered through for a quick single to bring up his ninth Test century - and a second in as many innings - before Vijay moved into the 90s by lofting Moeen for six down the ground and was soon raising his bat.
The England bowlers stuck to their task in difficult conditions and finally got a breakthrough when Stokes had Pujara caught by Cook at slip, then Hameed held on at short leg to give spinners Rashid and Ansari late reward for their persistence.