日军兵分三路:一为右翼纵队,由第一师团、混成第十二旅团及攻城炮队组成,山地中将为主将,乃木、西宽、长谷川三少将为其下属;二为左翼纵队,由步兵第十四联队、骑兵一小队、山炮一中队、工兵一中队组成,满益少佐为指挥;三为骑兵搜索队,由骑兵一大队组成,秋山少佐为指挥。是日,右翼纵队和搜索骑兵在三十里堡宿营,左翼纵队在辛寨子宿营。18日早晨6时左右,右翼纵队从三十里堡出发,下午2时30分到达营城子。同日上午10时,搜索骑兵队第一大队长秋山好古率领的前锋到达土城子,此时清军3000余人突然出现,将骑兵队团团围住。日军骑兵陷于重围之中。秋山下令突围,向双台沟方向逃去。此次土城子迎击战,日军死伤55人,但此后清军却不敢主动出击,消极防御。11月20日,日军司令大山岩在李家屯西北的高地上召开各级将校会议,决定21日凌晨2时发动总攻。次日,各军进入预定的阵地。骑兵搜索队警戒盘龙山以西,部分骑兵搜索通向旅顺的道路;右翼纵队第一师团攻椅子山炮台,混成第十二旅团攻二龙山炮台;左翼纵队在旅顺东北布阵,牵制清军;军司令部驻土城子南;联合舰队在旅顺海口一字摆开,牵制清军兵力。11月21日晨6时40分,日军逼近各炮台,西宽少将为先锋,率领第三联队首先攻扑椅子山最西的炮台。炮兵则在椅子山西面布阵,同时攻击椅子山的三个炮台。清军发炮应战,但由于日军大炮命中率高,炮台被摧毁。最后第三联队的步兵发动冲锋,一举攻下椅子山的三个炮台,时为上午8时。山地中将攻下椅子山炮台后,又令炮队攻击松树山炮台。炮弹击中其火药库,猛然爆炸,松树山炮台彻底被毁。此时长谷川少将的混成旅团正在攻打二龙山炮台和鸡冠山炮台,由于第一师团各部队包抄两炮台的背后,清军腹背受敌,终于不支而退,二龙山、鸡冠山两炮台失陷。时近中午,旅顺背后各炮台大都陷落,所剩的只有海岸炮台。海岸诸炮台以黄金山炮台最为坚固,日军第二联队长伊濑知好成大佐奉命攻打该炮台。当日军一逼近黄金山炮台时,清军东岸守将黄仕林便弃炮台逃走,炮台被日军轻易占领,时为下午5时。东岸其他炮台如摸珠礁、老砺嘴等炮台守兵不战而逃,东岸炮台全部失陷。至晚上,西岸炮台尚在清军手中。但是当夜张光前率领部下沿西海岸向北撤退,西海岸诸炮台也尽归日军所有。旅顺半岛20多个炮台,一天内全部被日军占领,清军战死约2000余人,日军仅损失280人。清政府将总理船政、专办水陆营务的道员龚昭与以“不能联络诸军同心