You need to enable JavaScript to run this app. 使用Python Selenium+BeautifulSoup抓取时PHP跳转丢失URL信息如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium+BeautifulSoup抓取时PHP跳转丢失URL信息如何解决

Selenium 跳转问题解决方案

直接访问https://mysite.thing.com/index.php返回404的核心原因是站点做了来源校验或会话校验:第一次访问根地址时服务器会下发临时会话Cookie,同时跳转请求会携带根地址作为Referer请求头,直接手动访问index.php时缺少这两个参数就会被拦截返回404,可通过以下方式解决:

  • 方法1:依赖Selenium原生跳转逻辑,不手动拼接URL
    Selenium默认会自动处理meta refresh跳转,你只需要访问原始根地址后,添加显式等待逻辑,等待跳转后的页面元素加载完成即可,不需要自己拼接index.php地址。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get("https://mysite.thing.com")
# 等待跳转后的页面加载完成,可替换为你目标页面上特有的元素选择器
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.TAG_NAME, "body")))
# 跳转完成后直接拿页面源码解析
soup = BeautifulSoup(driver.page_source, "html.parser")

这个方法可以自动携带第一次访问根地址时服务器下发的会话Cookie、以及正确的Referer请求头,避免直接访问index.php出现404的问题。

  • 方法2:手动构造请求(适合配合requests使用的场景)
    如果你不想用Selenium的自动跳转,可以先请求一次根地址获取会话Cookie和跳转路径,再手动请求跳转地址时带上对应的Cookie和Referer头:
import requests
from bs4 import BeautifulSoup

session = requests.Session()
# 先请求根地址,获取会话Cookie
resp = session.get("https://mysite.thing.com")
# 手动请求跳转地址,带上Referer头
resp_index = session.get("https://mysite.thing.com/index.php", headers={"Referer": "https://mysite.thing.com"})
soup = BeautifulSoup(resp_index.text, "html.parser")
  • 方法3:禁用Selenium自动跳转后手动处理
    如果需要自定义跳转逻辑,可以先禁用Selenium的meta refresh自动跳转,提取跳转地址后手动访问,Chrome禁用自动跳转的启动参数添加--disable-meta-refresh即可,后续提取跳转地址后用driver.get()访问即可,也会自动携带当前会话的上下文参数。

内容的提问来源于stack exchange,提问作者Mark McWiggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 01:24:03