In-form Sadio Mane opened the scoring in the 26th minute. The Senegalese started and finished a flowing move, directing Roberto Firmino's cutback past Sergio Rico for his ninth league goal in his last nine appearances.
Liverpool failed to convert a series of chances, before Scott Parker's side were rewarded for their persistence when former Reds winger Ryan Babel capitalised upon a defensive mix-up to tap in from close range on 74 minutes.
However, the title chasers clinched three points from the spot. Rico spilt Mohamed Salah's shot before fouling Mane when chasing the rebound.
Liverpool substitute Milner stepped up to score the 81st-minute penalty.
The win takes Liverpool to 76 points, two clear of title rivals Manchester City, who have a match in hand. Fulham stay 19th on 17 points, 13 from safety.