Selenium ChromeDriver加载国家药监局网站后页面空白问题咨询
解决Selenium访问NMPA网站页面空白的问题
嘿,我之前碰到过这个NMPA网站的同款问题——他们的反爬机制对Selenium的检测特别严格。你看到的带随机参数的URL是网站的反爬跳转,但因为ChromeDriver暴露了自动化特征,网站直接返回了空白页面。下面是几个亲测有效的解决办法:
1. 隐藏Selenium的核心特征
ChromeDriver默认会在浏览器的window.navigator对象里留下webdriver属性,网站只要检查这个属性就能识别出是自动化工具。你可以通过配置ChromeOptions和执行JS脚本来隐藏它:
import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC chrome_options = Options() # 关闭自动化提示开关 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 禁用自动化扩展 chrome_options.add_experimental_option('useAutomationExtension', False) # 阻止浏览器被检测为自动化控制状态 chrome_options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(executable_path="D:\Python\chromedriver.exe", options=chrome_options) # 执行脚本清除navigator.webdriver属性 driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") driver.maximize_window() url = 'http://app1.nmpa.gov.cn/' driver.get(url) # 用WebDriverWait替代time.sleep更可靠,等待页面核心元素加载 wait = WebDriverWait(driver, 60) wait.until(EC.presence_of_element_located((By.TAG_NAME, "body"))) time.sleep(2) driver.quit()
2. 添加真实的用户代理(User-Agent)
很多网站会检查请求头里的UA,默认的Selenium UA很容易被识别,你可以设置一个和真实Chrome浏览器一致的UA:
# 在chrome_options配置里添加这一行(替换成你自己Chrome浏览器的UA) chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
小技巧:打开Chrome开发者工具(F12),在Network标签下随便找一个请求,查看Request Headers里的User-Agent值,直接复制过来就行。
3. 确保ChromeDriver和Chrome版本完全匹配
如果你的ChromeDriver版本和本地安装的Chrome浏览器版本不一致,也可能导致页面加载异常。你可以在Chrome的「设置→关于Chrome」里查看当前版本,然后下载对应版本的ChromeDriver。
额外小提示
尽量不要依赖time.sleep(),用WebDriverWait配合预期条件等待页面元素加载,这样既高效又能避免因为网络延迟导致的误判。
内容的提问来源于stack exchange,提问作者Halim




