如何通过Python/Bash自动获取浏览器页面源代码?curl/wget及Snap版Chromium遇阻
解决方案:获取浏览器页面源代码&解决Snap版Chromium与Selenium兼容问题
一、解决curl/wget无法获取正确页面的问题
1. 修正命令参数格式
你的curl命令中&会被shell解析为后台运行符,导致baa被当作单独命令执行。必须用引号包裹完整URL:
curl "https://www.google.com/search?foo&baa"
2. 模拟浏览器请求头
Google等网站会校验请求的浏览器标识,非标准请求会返回异常内容。添加浏览器格式的请求头:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" "https://www.google.com/search?foo&baa"
可补充更多适配头信息:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" \ -H "Accept-Language: en-US,en;q=0.9" \ "https://www.google.com/search?foo&baa"
二、解决Snap版Chromium与Selenium的兼容问题
方案1:适配Snap版Chromium
Snap包的Chromium有沙箱限制,需在Selenium中指定二进制路径并关闭沙箱:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 指定Snap版Chromium的二进制路径 options.binary_location = "/snap/bin/chromium" # 关闭沙箱以适配Snap环境 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(options=options) driver.get("https://www.google.com/search?foo&baa") # 获取对应浏览器「查看页面源代码」的内容 print(driver.page_source) driver.quit()
若ChromeDriver无法自动匹配,可安装Snap版驱动:
sudo snap install chromedriver
然后在代码中指定驱动路径:
driver = webdriver.Chrome(executable_path="/snap/bin/chromedriver", options=options)
方案2:替换为非Snap版Chromium
从PPA安装原生Deb包版Chromium:
sudo add-apt-repository ppa:phillw/chromium/ubuntu sudo apt update sudo apt install chromium-browser
安装后Selenium无需额外配置,即可像普通桌面版浏览器一样使用。
方案3:改用Firefox + Selenium
Firefox仍提供原生Deb包,适配Selenium更简单:
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() # 无头模式(无需弹出浏览器窗口) options.add_argument("--headless") driver = webdriver.Firefox(options=options) driver.get("https://www.google.com/search?foo&baa") print(driver.page_source) driver.quit()
方案4:使用Playwright替代Selenium
Playwright对浏览器兼容性更好,无需手动管理驱动,还能自动处理请求拦截:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动无头模式的Chromium browser = p.chromium.launch(headless=True) page = browser.new_page() # 访问页面并获取初始HTML(对应「查看页面源代码」内容) response = page.goto("https://www.google.com/search?foo&baa") print(response.text()) browser.close()
安装依赖:
pip install playwright playwright install chromium
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

