Three goals in the final 15 minutes put a gloss on a largely soporific performance at a well-below capacity Emirates Stadium.
Pierre-Emerick Aubameyang scored the first two, including a penalty opener.
Substitute Alexandre Lacazette netted the third, also from the spot, after he had been fouled.
Arsenal clinched back to back league wins for the first time since November.
But the result left both clubs in the same positions in the Premier League table, with Arsenal sixth and Stoke second bottom.
The Gunners will have to play better in the first leg against CSKA Moscow on Thursday in Europe.
With little chance of finishing in the Premier League's top four, Arsenal must win the Europa League to qualify for next season's Champions League – a target that looks essential for under-fire Gunners boss Arsene Wenger as he fights to save his job.
Jack Wilshere may have missed both England's friendlies with the Netherlands and Italy but the Arsenal midfielder recovered from a knee niggle to claim the captain's armband for the day, with goalkeeper Petr Cech absent and defender Laurent Koscielny on the bench.
Stoke's preparations had seen Ibrahim Afellay jettisoned by manager Paul Lambert for not trying in training, but Eric Pieters was restored to the starting line-up after being fined for going clubbing before the previous match.
The game's first chance belonged to Stoke, the team with the greater need of three points, as Mame Biram Diouf laid the ball back to Xherdan Shaqiri, who shifted the ball onto his preferred left foot and curled it inches wide of David Ospina's right-hand post.
Stoke continued to take the game to the hosts, who were giving away possession cheaply.
Aaron Ramsey and Wilshere were both culpable in the first 15 minutes.
Arsenal almost took an undeserved lead when Stoke goalkeeper Jack Butland produced a punch that will not have improved his chances of being England's number one in the World Cup.
It landed at Ramsey's feet on the right of the six-yard box and the Welshman's hook cleared the goalkeeper and bounced off the top of the crossbar.
It was to prove a shallow oasis in a desert of barren first-half mediocrity however as Arsenal continued to waste possession.
Neither side made any changes in the interval but Arsenal at least began with added urgency, with Danny Welbeck lashing a chance just wide.
Mohamed Elneny saw a shot blocked before Butland dived to deny Nacho Monreal.
Wenger finally made a switch as the fit-again Lacazette came on for Welbeck, while Diouf, having taken a knock, was replaced by Saido Berahino.
Shaquiri curled a right-footer straight at Ospina before seeing a corner deceive the keeper and bounce off the back post.
Aubameyang was denied by a good block by Butland moments before the award of the game-deciding penalty in the 75th minute.
Bruno Martins Indi's clumsy trip of Mesut Ozil was needless and Aubameyang made him pay as he sent Butland the wrong way from the spot.
Stoke gave Aubameyang too much space for a simple second goal in the 86th minute.
And when Badou Ndiaye bundled over Lacazette in the 89th minute, the France striker was given a chance to convert the penalty instead of Aubameyang going for a hat-trick.