A specific answer to your question depends on a couple of factors. I see from a comment above you say:
I want to minimise scope creep and get work delivered
Which would change my suggested solution, as opposed to if you were thinking:
I want to deliver a useful and successful product for my client
Those two things don't necessarily go hand in hand. From the sounds of things your major frustration is changes to scope late in the project. So, if your ultimate goal was to minimise scope creep and get the solution delivered, then defining the requirements up-front and sticking to your guns will maximise your chances to finish the project and deliver it. However, it very well may annoy your customer since you seem to be inflexible and difficult.
The alternative is to accept that people change their minds, business requirements change and being a bit flexible makes the client much happier and the product likely better. In this case, manage the changes by making it 100% clear you're okay with a few last-minute changes, but that you will charge for them and they may need to wait until you finish other work.
Ultimately, the question could be summarised as: do you just want to finish the work, bank the cheque and start on the next job ASAP, or do you want to give your clients a great experience and a better product?
Disclaimer: I've made a ton of assumptions here since there wasn't much to go on, so apologies if I've misread the situation. Let me know and I'll delete this response if so!