I'm the professional here. It's my job to make sure the client gives me the proper materials. Here's what I've done to solve that problem. I stop working. Or to be more precise, I don't start working. I do anything until they have handed me all of the proper materials for their website and we have checked them all against our list. Then and only then do I start work on their project. And any changes in the middle of the job I charge for by the hour and will not complete those new changes until the first contract is complete.
Saying no to my customers, telling them that my time is valuable and charging for extras has lost me 1 or 2 clients who were used to me bending over backwards. But with my new clients, it has set proper boundaries and they respect my time. Don't be afraid to lay down the rules about how you work, because if you don't have rules then the client will try to call the shots and you will find yourself on the short end of the stick. Good luck!