You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium在浏览器中直接打开XML文件而不自动下载

解决方案

核心是修改Chrome浏览器的默认行为,让XML类型的文件直接在浏览器内渲染,而不是触发下载,修改配置后直接读取页面源码即可获取XML内容。

步骤1:添加Chrome启动参数配置

在初始化ChromeOptions的时候添加偏好设置(prefs),指定XML类型的内容直接在浏览器打开,禁止自动下载,需要添加的配置项:

  • 禁用下载提示
  • 指定application/xml、text/xml、application/xhtml+xml等XML相关MIME类型无需下载直接打开
  • 禁用默认的下载保存询问

步骤2:处理标签页切换(可选)

如果点击Metadata链接是打开新标签页,需要切换到新打开的标签页后再读取源码,读取完成后可以关闭该标签页切回原列表页,避免标签页过多占用资源。

步骤3:直接获取XML源码

页面加载完成后,直接调用driver.page_source即可获取完整的XML源代码,可直接交给BeautifulSoup解析或者保存到本地。

调整后完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from time import sleep

# Initialize webdriver
driver_options = Options()
driver_options.headless = True
# 新增Chrome偏好配置,禁止XML自动下载,直接在浏览器打开
prefs = {
    "download.default_directory": "/dev/null", # 临时下载目录设为空,避免残留文件
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True,
    # 配置XML相关MIME类型直接在浏览器打开,不触发下载
    "browser.helperApps.neverAsk.saveToDisk": "application/xml, text/xml, application/xhtml+xml, text/xsl",
    "browser.helperApps.alwaysAsk.force": False
}
driver_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=driver_options, executable_path="bin/chromedriver")

# Get Index page
url = "https://www.ems-ph.org/journals/all_issues.php?issn=1660-8933"
driver.get(url)
sleep(10)

# 记录初始标签页id,方便后续切回
original_window = driver.current_window_handle

for td in driver.find_elements(By.CLASS_NAME, 'remark'):
    td.find_element(By.LINK_TEXT, 'Metadata').click()
    sleep(3)
    # 切换到新打开的XML标签页
    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break
    # 获取XML源码
    xml_source = driver.page_source
    print(xml_source) # 此处可替换为你的解析/保存逻辑
    # 关闭当前XML标签页,切回原列表页
    driver.close()
    driver.switch_to.window(original_window)
    sleep(1)

# 最后关闭驱动
driver.quit()

备选方案(更稳定)

无需修改浏览器配置,直接提取链接地址后主动访问,避免点击事件绑定的下载逻辑,适配性更强:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from time import sleep

# Initialize webdriver
driver_options = Options()
driver_options.headless = True
driver = webdriver.Chrome(options=driver_options, executable_path="bin/chromedriver")

# Get Index page
url = "https://www.ems-ph.org/journals/all_issues.php?issn=1660-8933"
driver.get(url)
sleep(10)

for td in driver.find_elements(By.CLASS_NAME, 'remark'):
    # 提取Metadata链接地址,不触发点击操作
    meta_link = td.find_element(By.LINK_TEXT, 'Metadata').get_attribute('href')
    # 直接访问XML资源地址
    driver.get(meta_link)
    sleep(3)
    # 直接获取XML源码
    xml_source = driver.page_source
    print(xml_source) # 此处可替换为你的解析/保存逻辑
    # 返回原列表页继续处理下一个链接
    driver.back()
    sleep(1)

# 最后关闭驱动
driver.quit()

注意事项

  • 如果点击链接没有打开新标签页,可删除第一种方案中的标签页切换逻辑,直接在当前页读取page_source即可
  • 可通过浏览器F12网络面板查看Metadata请求的响应头Content-Type字段,根据实际返回的MIME类型调整配置中的允许打开类型列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:06