- Federico Chiesa (60')
- Álvaro Morata (80')
Spain's twin misses bailed out Manuel Locatelli, who had his strike saved by Simon with the first kick of the shootout and Italy's substitutes and coaching staff poured on to the pitch to celebrate in front of their jubilant supporters behind the goal.
Italy, who will play either England or Denmark in Sunday's final at Wembley in their first showpiece since being thrashed 4-0 by Spain in Euro 2012, are looking to win the tournament for the first time since 1968.
Roberto Mancini's side took the lead on the hour through a sensational curler from Federico Chiesa to complete a sweeping counter-attack which began with keeper Donnarumma catching a Spain cross and rolling the ball out.
Morata levelled for Spain with 10 minutes left, calmly slotting into the bottom corner after bursting forward and exchanging a one-two with Olmo.
Spain looked more likely to find a winner in the remaining minutes and in extra time but could not manage a second shootout victory after prevailing against Switzerland in the quarter-finals.
Italy avenged their shootout defeat to Spain in the Euro 2008 quarter-finals and their resounding defeat in the Euro 2012 final, and completed a second straight European Championship victory over the Spaniards after their 2-0 win in the last 16 at Euro 2016.
Wembley's capacity was expanded to 60,000 and although coronavirus restrictions prevented fans from travelling abroad, the two countries' expatriate communities turned out to pack each end behind the goal and generate a scorching atmosphere, which heightened the sense of occasion between two titans of international football.
"It's a pity. We didn't want our tournament to finish today but on Sunday and by winning the title. It was not to be," said Spain midfielder Sergio Busquets after the match.
"This is football. I think the team did well. We had opportunities, controlled the game. We showed a lot of pride. It's a shame. Penalty shootouts are like this.
"Everyone considered Italy favourites but we showed that we were superior to Italy. It's a shame. We didn't deserve to go behind. We can only congratulate Italy and continue on our path."
Chiesa hailed the result afterward.
"Spain were great, they have star players but we fought until the end and we did it," said Italy's Chiesa.
"When Locatelli missed the first penalty, everyone was calm saying we can do it and at the end our group helped us in the moment."
Italy defender Leonardo Bonucci said Spain gave him the hardest challenge of his career.
"It was the toughest game I have ever played. I congratulate Spain for what they showed, but once again this Italy showed heart, determination and the ability to push through difficult moments," Bonucci said.
"Now there is one more centimetre to go. It is incredible what we are doing. We will be back here in five days and we must have the same attitude to bring home this trophy that we have lacked for 50 years."
An emotional Chiesa hailed the hard-fought result afterward.
"I cannot describe my emotion by words, it was a tough match, Spain were great tonight but we come back here on 11 July for the final," he said.
"Spain were great, they have star players but we fought until the end and we did it. When [Manuel] Locatelli missed the first penalty, everyone was calm saying we can do it and at the end our group helped us in the moment."
Information from Reuters was used in this report.