ERIE, Pa. — Everyone knows what to expect at a Trump rally.

When then-candidate Donald Trump began to hold political events more than three years ago, they were a phenomenon no one had seen — part rock concert, part costume parade, part festival, all led by an unpredictable celebrity ringmaster. They were ratings gold for cable networks and key to Trump’s unexpected victory.

But three years on, the rallies have remained frozen in time. News of the day can briefly intrude, but the basics are the same for fans in the crowd: Dance to the same blaring hits from decades ago, roar as the president enters, listen to his trademark attacks and alternative facts, boo liberals and the media, chant the classic chants and relive the drama of election night that Trump recounts nearly every time.

And if what they experience is the same, so too are Trump’s remarks, which is why most cable news channels — even Fox — have stopped regularly carrying the rallies live. The lack of surprise is sometimes visible: Some attendees will wait hours to see the president, then leave before he has finished speaking to beat the traffic.

A rally one night last week made clear just how little these events have changed. It was held at the Erie Insurance Arena — the same place where he held a rally on a Friday afternoon in August 2016.

Back then, Trump mostly filled the hockey arena, which has a capacity of about 9,000. Last week, he did the same — plus, a couple thousand more people gathered on the lawn outside to watch him on a video screen.

Those standing in line that afternoon included several repeat attendees: A bait-and-tackle shop owner who proudly showed off a photo of himself at Trump’s last rally in Erie, a 56-year-old father of five who attended the rally two years ago and loved when Trump riffed about how the country will win so much people will get tired of winning, and a 19-year-old college student from the Pittsburgh area who compares the energy of a Trump rally to a Penn State home football game.

And there were several first-timers who quickly concluded that the rally was just as they expected and everything they expected.

“I just wanted to be a part of it,” said Vicki Harvey, 58, a retiree from Kent, Ohio. “I watch these rallies on TV and everything, and I just wanted to be a part of it and let him know that we’re really here for him, no matter what.”

Nearby, vendors sold red MAGA hats, anti-media T-shirts and buttons with phrases made popular during the 2016 election, including “Build the wall,” “Deplorable lives matter,” “Drain the swamp” and “Hillary for prison.” A few hundred protesters — some of whom were recently laid off from factories throughout the Midwest — held signs with similarly familiar messages, such as “Believe women,” “Trump lies matter,” “Hate is not patriotic” and ­“RESIST.”

Mark Hoffman brought his white pickup truck, dubbed “The Official Trump Truck,” and parked it on a side street so fans could take photos. He has been to roughly 50 rallies over the past three years and used to go inside to hear Trump speak, but he quickly learned that once you’ve been to a few rallies, you’ve been to them all. Now, he usually stays outside, making more room inside for those who have never had the experience.

“Sometimes, it’s more fun outside, dealing with people walking by, dealing with protesters,” said Hoffman, who lives near Columbus, Ohio.

Inside the chilly arena, Trump’s 2016 playlist continued to blare Neil Young, the Rolling Stones and Journey. The campaign handed out signs exactly like those used in 2016, including red ones proclaiming “Make America Great Again,” pink ones that said “Women for Trump” and black ones labeled “Trump digs coal.”

At both rallies, separated by more than two years, Trump took the stage to Lee Greenwood’s “God Bless the USA” as the crowd stood and cheered for several minutes.

Even Trump’s clothes were the same as his uniform in August 2016 — a dark suit with a thick red tie. In 2016, he stood before an American flag and a Pennsylvania one at a podium labeled “Erie, Pennsylvania.” Last week, it was a massive American one and a podium with the presidential seal.

“Amazing. Amazing. What amazing people,” Trump said in 2016. Last week, he said nearly the same: “Great people. Incredible people. And I’m thrilled to be here tonight in Erie.”

Back in August 2016, Trump was sinking in the polls after attacking the Muslim father of a U.S. soldier killed in Iraq and a federal court judge whose parents are Mexican immigrants, Hillary Clinton had not yet fallen ill at a 9/11 memorial ceremony, The Washington Post had not yet published the “Access Hollywood” video and FBI Director James B. Comey had not yet reopened an investigation into Clinton’s emails.

Last week, Trump was still on a high from getting his latest pick for the Supreme Court seated, despite accusations of sexual assault, and from renegotiating a trade deal with Canada and Mexico. He arrived in Erie as a Category 4 hurricane was headed into the Florida Panhandle.

At both rallies, the crowd chanted “Lock her up!” at the mention of Clinton — but last week, people also shouted out the phrase when Trump mentioned Sen. Dianne Feinstein (D-Calif.).

At both rallies, Trump’s comments were riddled with inaccuracies and exaggerations, along with some politically incorrect statements — as in 2016 when he suggested that Clinton didn’t have the “strength” or “toughness” to be president, and last week when he complained that “under the rules of Me Too” he’s no longer allowed to use a certain expression.

At both rallies, he complained that the media reports more critically of him than other politicians, prompting the crowd to boo the journalists in their midst.

At both rallies, Trump warned of the dangerous threat posed by undocumented immigrants or refugees, as supporters in the crowd screamed: “Build that wall!”

Erie — located halfway between Cleveland, Ohio, and Buffalo, N.Y., on a Great Lake of the same name — is like a lot of the Rust Belt cities that Trump visited in 2016, struggling to reinvent itself amid skeletons of long-closed factories.

In 2016, Trump devoted more than a third of his remarks to promising that he would increase the number of manufacturing jobs, stop companies from moving jobs overseas, reopen steel mills, revive the coal industry and charge high tariffs on goods produced in other countries — all while taking swipes at Democratic leaders. He joked that President Barack Obama should have named him “Secretary of Keeping Business in the United States.”

Last week, Trump spent much less time on the topic of business and rattled through improvements made since he took office: a national unemployment rate that’s the lowest in many years, an “unleashing” of shale and coal, and manufacturing confidence that’s at an “all-time high, historic,” according to a survey the White House has cited. As he has before, Trump claimed falsely that U.S. Steel has reopened or expanded “seven different plants” and accused China of producing inferior steel.

“You remember the previous administration? They said, ‘Oh, you can’t bring back manufacturing jobs,’ ” Trump said last week. “That was wrong. Remember they said you’d need a magic wand? Well, I guess we have it, right? We have a magic wand.”

In August 2016, Trump’s election victory was only hypothetical. Last week, he spent a long interlude focusing on what he called “the greatest revolution ever to take place in our country.”

“I was winning North Carolina, South Carolina. We won Florida. . . . Why aren’t they announcing Pennsylvania?” Trump said, reenacting election night. “Out of the blue, ‘Donald Trump has won the state of Wisconsin.’ And then, out of the blue, ‘First time in decades, Donald Trump has won the state of Michigan.’ And then finally they announced . . . ‘Donald Trump has won the great state of Pennsylvania.’ ”

Trump tied that memory to the future, casting the upcoming midterm elections as another 2016, another opportunity for his followers to prove that he is supported, another opportunity to win. He yielded his microphone to Rep. Mike Kelly, the Republican who represents the congressional district that includes Erie, and Rep. Lou Barletta, who is running for the U.S. Senate.

“The only reason to vote Democrat is if you are tired of winning,” he told the crowd. “Then, you should vote Democrat.”

It was a tie back to a line he often said in 2016: “We’re going to start winning again. We’re going to win so much that you’re going to get sick and tired of winning.”

In the final minutes of that 2016 rally, Trump listed all the things he would win at as president. A man in the crowd had reminded him of one more: “Supreme Court!”

“Supreme Court! He said it. Yes, yes, thank you. . . . Who said that? Thank you,” Trump said, halting his wrap-up to address this afterthought.

Two years later, Trump noted that the justices he nominated — Neil M. Gorsuch and Brett M. Kavanaugh — are “great men” who will “defend your rights, your Constitution and your God-given freedom.” He quickly pivoted to denouncing “the radical Democrats” who opposed Kavanaugh’s nomination, prompting boos from the crowd.

At both rallies, Trump left the stage as he always does, to the tune of a song that sends a decidedly mixed message: the Rolling Stones’ “You Can’t Always Get What You Want.”

As the crowd filed out of the arena last week, the vendors positioned themselves in their usual spots with their usual merchandise, waiting for the winning to spread to them.