At a floodlit Craven Cottage, relegation-threatened Fulham and out-of-form Wolverhampton Wanderers came close to cancelling each other out but for a last-minute goal from Adama Traore, his first of the season.
Willian Jose thought he'd given the visitors the lead with his first league goal for the club when he headed home a Daniel Podence cross on the brink of half-time, but it was chalked off for offside in the build-up.
The Cottagers pushed for a precious three points in the second half, but to no avail, and it would be the visitors who ultimately earned victory thanks to Traore's late, late winner.
Story of the game
Coming into the match, Fulham manager Scott Parker made two changes to the side that threw away their lead at Aston Villa last weekend: Terence Kongolo came in for Tosin Adarabioyo in defence, while Antonee Robinson replaced the injured Ademola Lookman in an apparent change of formation from the hosts, who now lined up in a back three.
Meanwhile, Nuno Espirito Santo made no adjustments to the Wolves side that lost in the five-goal thriller with West Ham United last time out.
The first chance of the game fell to the visitors when Nelson Semedo whipped in a good cross from a free-kick just two minutes in. It met the head of Jose trying to flick it on for someone at the back post, but eventually trickled out of play.
The middle of the pitch resembled a pinball machine in the opening exchanges, with neither team really able to keep their foot on the ball long enough to muster any meaningful possession. Two teams desperate for victory, this was always going to be a tight, potentially scrappy affair.
Even when either side did enjoy spells with the ball, chances were few and far between. Wolves looked perfectly happy to pass the ball around the back line all game long to tire the Fulham press, while the urgency of the hosts seemed to hinder them in certain instances, appearing to force the issue rather than wait for the perfect opening.
Robinson was finding some good spaces down the left flank for the hosts, but often lacked the end product to make it count. On one occasion he latched onto an inch-perfect diagonal ball from Joachim Andersen, but his touch let him down and it went out for a goal-kick.
Fulham were generally on top, and came agonisingly close to taking the lead just before the half-hour mark. Robinson again was set free on the left and he delivered a sumptuous cross into the area. Ruben Loftus-Cheek rose above Romain Saiss and glanced his header, but it bounced just wide of the far post with the out-stretched Rui Patricio beaten.
In a game between two stubborn teams, any goals would either come from flashes of supreme ability or from errors. Traore nearly offered a glimmer of the former when he picked up the ball in a deep position and bolted unchallenged towards the Fulham box, but the forward scuffed his left-footed shot at the end of it.
For the hosts, almost everything was coming through Robinson. He tussled with Semedo on the flank and eventually managed to muscle the full-back to the floor before surging forwards. The USA international then summoned up a good cross into the area which was met by Aleksandar Mitrovic but, like the Loftus-Cheek chance earlier, his effort was wide of the target.
Right on the brink of half-time, though, it was the visitors that took the lead — or so they thought. Podence was fed down the right and he clipped a ball into the box for Jose rising highest of those in the area. He powered his header past Alphonse Areola, but replays revealed Podence had been offside when the ball was played to him, and VAR thus denied the striker his first league goal for Wolves.
It was a controversial decision to say the very least, and the Wolves contingent were incensed, crowding around referee Jon Moss as they headed in for the half-time break.
Prior to tonight, these teams had both scored just two first-half goals in their past 12 Premier League matches. They often rely on the 45 minutes after the break, and were forced to do the same again here.
Again, the urgency of the occasion for either side — Wolves hoping to end their five-game winless run, Fulham looking to climb out of the relegation zone — created a tension that rendered chances few and far between. Just before the hour mark, Mario Lemina delivered an in-swinger into the box for Kenny Tete at the back post, but it bounced out of play.
As he proved — albeit to no avail — against Villa last weekend, Fulham's key to success would be in getting the best out of their target man, Mitrovic. Time and again they searched him out in the area, but it just wasn't coming off for the Serbian tonight, unable to force Rui Patricio into any stops.
Wolves were gifted a super opportunity to take the lead when Andre-Frank Zambo Anguissa felled Traore on the edge of the area, just right of centre of goal. Saiss stepped up to take it with power, but it was high of Areola's goal.
The hosts pushed more and more as the clock kept on clicking; these were three points they really, really wanted to earn. With about 15 minutes of regulation time remaining, Bobby Decordova-Reid received the ball in midfield and drove towards the penalty area. He worked it onto his right foot and aimed for the bottom corner, but it powered just wide of the post.
Robinson, Fulham's brightest spark all game long, then powered a right-footed volley at goal after a succession of unsuccessful crosses from either flank, but the diving Patricio was equal to it.
Both sides were resilience personified, and all of the best chances were coming from set-pieces. With 85 minutes on the clock, Rayan Ait-Nouri delivered a delicious ball into the box from a free-kick, and it was met by Joao Moutinho, but the midfielder's effort presented an easy save for Areola.
Deep into stoppage time, at last we had a breakthrough, and it was the visitors who scored the crucial winning goal. Traore was released through on goal by substitute Fabio Silva and the Spaniard powered a vicious effort across goal leaving Areola helpless, sending the travelling contingent into rapturous celebrations.
Takeaways from the match
A missed opportunity for Fulham
VAR let them off the hook big time on just before the break — there must have been millimetres involved in the decision to disallow Jose's goal for offside. Nonetheless, against a struggling Wolves side, they should have done more here; with three of the top six to play in their final six games, this was one of their real chances of getting points on the board before the curtain draws.
By and large they defended well enough, but Mitrovic and their other forward players were feeding off scraps — a more attacking mindset could have turned zero points into three tonight, and Fulham will be hoping they don't come to regret their conservatism here at the end of the campaign.
It's not disastrous — remarkably, they are still keeping pace with Newcastle who they face on the final day, and that is where and when their future prospects are likely to be decided — but a win here was both desirable and certainly obtainable.
Wolves win at last
For a team with aspirations of European football at the beginning of the year, six games winless and a place in the bottom half heading into the run-in did not spell success in the slightest. Has the picture just become a whole lot rosier for the West Midlands outfit?
Wolves will be grateful beyond belief that their rut could well have been ended by Traore's dramatic and emphatic late goal — it could set them up for a positive patch of form heading towards the end of the season.
Fulham: Areola; Aina (Cavaleiro 83'), Andersen, Kongolo; Tete, Lemina, Reed (Maja 74'), Robinson; Loftus-Cheek (Anguissa 63'), Mitrovic, Decordova-Reid.
Unused subs: Fabri, Hector, Adarabioyo, Ream, Bryan, Onomah.
Wolverhampton Wanderers: Patricio; Semedo, Coady, Saiss, Ait-Nouri; Dendoncker, Neves; Neto (Moutinho 32'), Podence (Gibbs-White 74'), Traore; Jose (Silva 78').
Unused subs: Ruddy, Hoever, Richards, Kilman, Otasowie, Vitinha.
Following defeat here, Fulham travel to the north of the capital to face Arsenal at the Emirates Stadium on Sunday.
Meanwhile, Wolves return to their home of Molineux to face bottom-placed Sheffield United.