במהלך שנת 218 לפנה"ס, בעוד הרומאים סופגים מפלה אחר מפלה מידי חניבעל בצפון איטליה (טיקינוס, טרביה, טראסימנוס), נחל גנאיוס קורנליוס סקיפיו שרשרת השגים בהיספניה. הוא נחת עם צבאו בחוף אמפוריאי (אמפוריאס), ניצח את צבא הקרתגים בקרב קיסה, השתלט על ערי החוף עד הנהר היברוס, והצליח להעביר לצדה של רומא רבים משבטי האיברים בלב הארץ, חלקם בכוח ואחרים בבריתות שלום.
בחודשי החורף, כששבתה הלחימה, הכין עזרובעל את ציו וחייליו לסילוק הפולש, ובאביב 217 לפנה"ס יצא מקרתגו החדשה להתקפה משולבת, ימית ויבשתית. הצי, שמנה כעת ארבעים קווינקוורמות בפיקוד חמילקרת, שט לאורך החוף אל סביבות הנהר היברוס, בעוד הצבא צועד במקביל לו ביבשה. סקיפיו, ששהה במחנה החורף שלו בטרקו (טרגונה), תכנן להתייצב אל מול הקרתגים ביבשה ובים כאחד, אך לאחר שקיבל ידיעות על גודלו העצום של צבא עזרובעל, שינה את תוכניתו ויצא עם שלושים וחמש אוניותיו לקרב ים בלבד. הלחימה, שנערכה בשפך הנהר היברוס, נסתיימה בניצחון מוחץ של הרומאים, אשר הודות לעליונותם בלוחמת סיפונים הצליחו ללכוד עשרים וחמש מאוניות הקרתגים.
לתוצאת קרב הנהר היברוס הייתה השפעה מרחיקת לכת על מצבם של הקרתגים, שכן אובדן השליטה במימי היספניה משמעו היה ניתוק הקשר הימי בין חניבעל לבין בסיס האספקה והתגבורות שלו בהיספניה וערעור מעמדה של קרתגו בקרב השבטים האיברים. בסתיו 217 לפנה"ס שיגרו הרומאים את פובליוס קורנליוס סקיפיו עם עשרים אוניות ותגבורת גדולה לניהול המלחמה בהיספניה יחד עם אחיו. תוכניתם הייתה להרחיב את כיבושיהם דרומה מן ההיברוס, על מנת לשמר ולחזק את היתרון שנחלו בקרב הימי. הקרתגים, שלדברי פוליביוס חשבו כי "לכל תוכניותיהם דרושה השליטה על הים", הגבירו אף הם את מאמציהם כדי להשיג מחדש את השליטה שאבדה להם. על חשיבות המערכה בהיספניה יעידו גם דברי ליוויוס, כי ב-215 לפנה"ס, בעקבות מפלת עזרובעל בקרב דרטוסה מידי שני הסקיפיונים, החליטו הקרתגים להפנות אליה תגבורת גדולה של שנים-עשר אלף רגלים, אלף וחמש מאות פרשים ושישים אוניות מלחמה, שנועדה במקורה להישלח מקרתגו אל חניבעל באיטליה.
ב-211 לפנה"ס, לאחר סדרת קרבות ללא הכרעה, הובס הצבא הרומי על ידי עזרובעל בקרב באיטיס, רבים מחייליו נהרגו ובהם שני האחים סקיפיו, והנותרים נסוגו צפונה להיברוס. שנה אחר כך נבחר פובליוס קורנליוס סקיפיו, בנו של קורנליוס סקיפיו, ליטול את הפיקוד העליון על המערכה בהיספניה. עם בואו ריכז את מאמציו בהטלת מצור על קרתגו נובה וכיבושה. הייתה זו עיר נמל מצוינת ובסיס האספקה הראשי של הצבא הקרתגי. שהוחזקו בה האוצר הקרתגי ובני הערובה מקרב השבטים האיברים, ויכלה לשמש לעת צורך כנמל היציאה לפלישה רומית עתידית אל אפריקה. העיר נכבשה באביב 209 לפנה"ס בפעולה משולבת של הצבא והצי. היה זה הראשון בסדרת ניצחונותיו של המצביא הצעיר והמוכשר, אשר בתוך שלוש שנים השלים את כיבושה של היספניה וסילק ממנה את הקרתגים.
סיציליה, אפריקה וחופיה המערביים של איטליה.
סיציליה הייתה זירת המאבק העיקרית בין הרומאים לקרתגים במלחמה הפונית הראשונה, ולאחר כניעת קרתגו עברה השליטה באי לידי רומא. ב-218 לפנה"ס, עם התחדשות הסכסוך, הועידוה הרומאים לשמש ראש-גשר לפלישת חיל משלוח לאפריקה, אם יצליחו לבלום את מסעו של חניבעל אל צפונה של איטליה. הקונסול טיבריוס סמפרוניוס ועימו שני לגיונות ו-160 אוניות מלחמה קבע את בסיסו בעיר הנמל ליליבאום (מרסלה) שבמערב האי, נכון לפקודת הסנאט להעביר את המלחמה אל אדמת קרתגו ברגע המתאים. חניבעל, שאפשרות זו לא נעלמה מעיניו, תגבר עוד קודם צאתו למסע את חילות המשמר בקרתגו, לבל "תימצא אפריקה ריקה ופתוחה לכניסת הרומאים מסיציליה בעוד הוא עצמו מבקיע לאיטליה דרך הישפאניה וגאליה".
בתחילת המלחמה, קודם בואו של הקונסול טיבריוס סמפרוניוס לסיציליה, יצאו מנמל קרתגו עשרים קווינקוורמות ובהן אלף לוחמים כדי לפשוט על חופי איטליה, לבוז את הכפרים, להשם את השדות ולהטיל אימה על ערי החוף. הקרתגים לא יכלו להתמודד עם הרומאים בקרבות ימיים סדורים, כי נפלו במספר אוניותיהם ובלוחמת סיפונים, ועל כן נקטו כבר מראשית המערכה פעולות הטרדה קטנות-היקף מעין אלה. שבע-עשרה מבין עשרים האוניות הללו הגיעו אל איי ליפארה בצפון מזרחה של סיקיליה, אך שלוש נסחפו אל מפרץ מסאנה (מסינה) ונלכדו ללא קרב על ידי שתים-עשרה מאוניותיו של היירון מלך סירקוסאי, בעל בריתה של רומא ששהה אותה שעה במקום. שייטת קרתגית אחרת, המונה שלושים וחמש אוניות, יצאה באותו זמן ממש אל ליליבאום, כדי להשיאה לקום על הרומאים ולעבור לצד קרתגו. הדבר נודע למסאנים מפי השבויים שנפלו לידיהם, ולאחר שהזהירו את הרומאים, כדי שיעמדו על המשמר, עשו אלה את כל ההכנות להתנגשות. בקרב ליד ליליבאום גברו חיילי-הצי הרומאים המרובים יותר על יריביהם הקרתגים ולכדו שבע אוניות אויב על אנשיהן. מאוניות הרומאים נוגחה אחת בלבד, אך הם הצליחו לגרור אותה אל הנמל.
סמפרוניוס, ועימו עיקר הצי הרומי בן 160 אוניות, הגיע אל ליליבאום דרך מסאנה לאחר הניצחון בקרב הימי. הוא חיזק את השמירה בחופי סיציליה, וכדי לשלול מאוניות הקרתגים תחנות ביניים בדרכן אל חופי איטליה, השתלט על האי מליטה (מלטה). אחר כך יצא אל איי ליפארה, על מנת ללכוד את שבע-עשרה האוניות הקרתגיות, שעל פי ידיעותיו עדיין עגנו שם. משלא מצא אותן שב אל ליליבאום, ובעודו בדרך קיבל שתי הודעות: האחת, כי האוניות שחיפש בזזו את שדות העיר ויבו בקלבריה שבדרום איטליה והטילו פחד על אוכלוסייתה; והשנייה, כי חניבעל נכנס עם חייליו לאיטליה ועליו לשוב מיד לעזרת עמיתו הקונסול. הוא הקצה עשרים אוניות להגנת חופי דרום איטליה, הגדיל לחמישים אוניות את צי הפראיטור מרקוס אמיליוס, הממונה על הפרובינקיה סיציליה, ועם יתר הצי והצבא הפליג חזרה אל ארימינום (רימיני) והצטרף ללחימה בחניבעל.
בקיץ 217 לפנה"ס, לאחר סדרת מפלות צבאיות צורבות ומתוך תחושת חירום, החליטו הרומאים להעביר את ניהול המלחמה לידי דיקטטור ובחרו לתפקיד את פאביוס מאקסימוס. אותו זמן ממש הצליחו הקרתגים ללכוד ליד נמל קוסה שיירת אוניות משא, שהובילה אספקה מאוסטיה לצבא הרומי בהיספניה. הרומאים נחרדו מפני קרבת האויב לעירם. לפקודת פאביוס מאקסימוס הכין הקונסול הקודם גנאיוס סרוויליוס את אוניות המלחמה שנשארו ברומא לרדיפה אחר אוניות הקרתגים ולהגנה על החופים, וגייס חיילים רבים ברומא ובהם גם עבדים משוחררים לשירות באוניות כחיילי-צי ולהגנת העיר מפני התקפה מן הים. החותרים והמלחים היו כמקודם מן הערים הימיות, בעלות בריתה של רומא באיטליה (socii navales). שבעים האוניות הקרתגיות פעלו מסרדיניה לשיבוש הקשר הימי בין רומא לצבא גנאיוס סקיפיו בהיספניה, ואף ניסו לחבור אל כוחותיו של חניבעל. כשנודע למפקד הצי הקרתגי כי מאה ועשרים אוניות יצאו מרומא והן דולקות אחריו, נמנע מהתמודדות וחמק דרך סרדיניה בחזרה אל קרתגו. גנאיוס סרוויליוס, שראה לאחר זמן כי לא יצליח להשיג את אויביו, שט עם הצי אל ליליבאום. כדי להשיב לקרתגים כגמולם, יצא עם אוניותיו לאפריקה, בזז את אחד האיים בחופי קרתגו, קיבל דמי כופר מיושבי אי סמוך לו ושב אל ליליבאום. לאחר סילוק האיום שיגרו הרומאים את קורנליוס פומפיוס עם אוניות וחיילים לעזרת אחיו גנאיוס בהיספניה, והפעם הגיעו האוניות ליעדן בבטחה.
המפלה בקרב קאנאי (216 לפנה"ס) ערערה את מעמדה של רומא באיטליה. ערים נוספות עברו לצד חניבעל, וחוסר היציבות התפשט גם אל סרדיניה וסיציליה. הקרתגים ניצלו שעת כושר זו כדי להושיט סיוע בדרך הים לחניבעל ולמורדים כאחד. ב-215 לפנה"ס נשלח מקרתגו אל סרדיניה חיל משלוח בפיקוד עזרובעל המכונה "הקרח", כדי לסייע להמפסיקורה ואנשיו שמרדו ברומאים. האוניות לא הגיעו ליעדן במועד, כי נטרדו בסערה חזקה אל האיים הבלאריים, שם התעכבו בשל הצורך לתקן את הנזקים הרבים שנגרמו להן. משנשלמו התיקונים הנחיתו האוניות את עזרובעל וחייליו בסרדיניה ושבו לאפריקה. אלא ששוב איתרע מזלם של הקרתגים, ובדרכן אל קרתגו נתקלו האוניות בצי רומי בפיקוד טיטוס אוטקיליוס, שחזר אל ליליבאום לאחר ביזת סביבותיה של קרתגו. בקרב הימי שהתלקח בים הפתוח הצליחו הרומאים ללכוד שבע מאוניות הקרתגים על צוותן, והיתר נפוצו לכל עבר והצליחו לחמוק מגורל דומה. באותה עת לערך הצליח גם בומילקר להעביר אל חניבעל תגבורת של חיילים ופילי מלחמה מקרתגו אל העיר היוונית לוקרוי אפיזפיריאוי (לוקרי) שבדרום איטליה, עיר יוונית שנכנעה לחניבעל שנה קודם לכן. אפיוס קלאודיוס פולכר, הפראיטור הממונה על סיציליה, העלה את חייליו לאוניות ומיהר לחצות את המצר ממסאנה אך איחר את המועד. בומילקר כבר עזב עם חייליו את המקום והצטרף לכוחות הקרתגיים הנלחמים בדרומה של איטליה, ואנשי לוקרי סגרו את שערי עירם בפני הרומאים.
ב-215 לפנה"ס מת היירון שליט סירקוסאי, בעל בריתה הנאמן של רומא בסיציליה. עם מותו נתעורר ריב סיעות בין תומכי רומא לתומכי קרתגו, שבסופו עברה העיר לצדה של קרתגו. סכנת השתלטות קרתגו מחדש על האי כולו הפכה מוחשית, ועל כן הורה הסנאט ב-214 לפנה"ס להכין צי של 150 אוניות לניהול המלחמה בים; לשם כך נבנו 100 אוניות חדשות, חלקן החליפו את הישנות יותר. המלחמה, שנכנסה לשנתה הרביעית, דלדלה את אוצרה של רומא, ועל פי החלטת הסנאט נדרשו אזרחי העיר, שגובה הכנסתם השנתית מסכום מסוים ומעלה, לממן מכספם הפרטי את ציודם וכלכלתם של החותרים בצי המלחמתי לתקופה נקובה. הייתה זו הפעם הראשונה, לדברי ליוויוס, בה מומנה אחזקת הצי הרומי ממקורות פרטיים.