Ask for one finalized list of everything they want up front. It makes them see the chaos and usually gets them to focus on what matters. This simple step filters out the clients who just aren't ready.
What's your move when they try to sneak in extra items later? I make them agree to a fixed scope document and ANY changes mean a new quote. It forces them to think hard about what they really need. Once I started this, the back-and-forth emails dropped by like half because clients knew they couldn't just add things for free.
Started putting every single task in a shared project tool where clients have to click "approve" on each phase. Saw a client try to add three new pages halfway through a website build, pointed them to the approved list and said it would be a separate bill. They dropped two of the pages real quick and paid for the third. That tool is now my best defense.