Cleveland won its third in a row while the Athletics have dropped five of seven.
Oakland scored all its runs in the fourth to take the lead with Daric Barton highlighting the inning with a two-RBI single.
The Indians rallied for two in the fifth, capitalizing on an error by Oakland shortstop Adam Rosales that made one of the runs unearned.
Swisher and Santana then delivered the key long balls in the sixth to make a winner out of Justin Masterson (5-2).
Masterson lasted seven innings, giving up the three runs on four hits with seven strikeouts.
Chris Perez loaded the bases with two away in the ninth before picking up his fifth save. After retiring the first two batters in the ninth, Perez gave up a double, hit a batter and surrendered a walk before getting Seth Smith on a grounder back to the mound that ended the game.
All the Cleveland runs came off A.J. Griffin (3-3), who came out after 6 2/3 innings.