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

启用headless=True时爬虫获取新标签页URL返回about:blank求助

Headless模式下ChromeDriver获取新标签页URL为about:blank的解决方法

爬取网站时,代码在headless=False模式下运行正常:遍历目标链接并点击,新标签页打开后切换至该标签页获取URL并存储。但启用headless=True时,获取到的URL始终为about:blank。相关代码如下:

options = webdriver.ChromeOptions()
options.add_argument('--disable-notifications') #Disable notification send by chrome. Ex: ALlow location access.

if headless:
    options.add_argument('--headless') #Run the automation in background

driver = webdriver.Chrome(path_driver, options=options)
driver.get(website_url)
driver.set_window_size(1920, 1080)

for pos, link in enumerate(tqdm(links)):
    
    actions = ActionChains(driver)
    actions.move_to_element(link).perform() #To move the scroll bar to current element
    link.click()
    file_names.append(link.text)
    driver.switch_to.window(driver.window_handles[1]) #Switch to new window
    url = driver.current_url
    file_links.append(url)
    driver.close() #Close the new window
    
    driver.switch_to.window(driver.window_handles[0]) #Switch back to old window

原因及解决方案

  • 浏览器环境差异导致拦截
    无头模式下Chrome的默认配置与正常浏览器不同,部分网站会拦截无头请求,或新标签页加载逻辑异常。补充以下参数模拟正常浏览器环境:

    options.add_argument('--no-sandbox')
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-dev-shm-usage')
    # 替换为你当前Chrome的User-Agent,可在浏览器控制台输入navigator.userAgent获取
    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')
    # 推荐使用新版无头模式,兼容性更好
    options.add_argument('--headless=new')
    
  • 页面未加载完成就获取URL
    无头模式下页面加载速度与正常模式有差异,切换标签页后立即获取URL时,页面还未完成跳转,因此返回about:blank。添加显式等待直到URL加载完成:

    from selenium.webdriver.support.ui import WebDriverWait
    
    # 切换到新窗口后等待URL非空白
    driver.switch_to.window(driver.window_handles[1])
    WebDriverWait(driver, 10).until(
        lambda driver: driver.current_url != 'about:blank'
    )
    url = driver.current_url
    
  • 点击动作未正确触发
    无头模式下ActionChains的点击可能失效,改用JavaScript强制点击链接:

    # 替换原actions.move_to_element和link.click()的代码
    driver.execute_script("arguments[0].click();", link)
    

修改后的完整代码示例

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from tqdm import tqdm

options = webdriver.ChromeOptions()
options.add_argument('--disable-notifications')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
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')

if headless:
    options.add_argument('--headless=new')

driver = webdriver.Chrome(path_driver, options=options)
driver.get(website_url)
driver.set_window_size(1920, 1080)

for pos, link in enumerate(tqdm(links)):
    # 滚动到元素位置
    actions = ActionChains(driver)
    actions.move_to_element(link).perform()
    # JavaScript强制点击
    driver.execute_script("arguments[0].click();", link)
    file_names.append(link.text)
    
    # 等待新窗口出现
    WebDriverWait(driver, 10).until(
        lambda driver: len(driver.window_handles) > 1
    )
    # 切换到新窗口并等待URL加载
    driver.switch_to.window(driver.window_handles[1])
    WebDriverWait(driver, 10).until(
        lambda driver: driver.current_url != 'about:blank'
    )
    url = driver.current_url
    file_links.append(url)
    driver.close()
    
    # 切回原窗口
    driver.switch_to.window(driver.window_handles[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:09