Google Colab中Selenium无法定位元素、page_source为空如何解决?
解决Google Colab中Selenium无法获取页面内容的问题
核心问题分析
你的代码返回空页面,大概率是代理失效/被拦截、页面未完成加载、Headless模式被网站识别为爬虫这几个原因导致的,以下是针对性解决方案:
1. 先排除代理问题
你使用的代理64.235.204.107:3128可能已失效、无法连接目标网站,或被whatismyipaddress.com拦截。先移除代理配置测试:
import sys sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver') from selenium import webdriver from selenium.webdriver.common.by import By import time # 完善Chrome配置,模拟真实浏览器 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless=new') # 新版Headless更接近真实浏览器 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') wd = webdriver.Chrome('chromedriver', chrome_options=chrome_options) wd.get('http://whatismyipaddress.com') time.sleep(3) # 强制等待页面加载 html = wd.page_source print(html) wd.quit()
如果移除代理后能正常获取页面,说明原代理不可用,需更换有效代理。
2. 添加智能等待逻辑
直接调用page_source可能页面还未完成渲染,推荐用显式等待替代强制等待:
import sys sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver') from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless=new') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') wd = webdriver.Chrome('chromedriver', chrome_options=chrome_options) wd.get('http://whatismyipaddress.com') # 等待页面核心元素加载(比如IP地址显示区域) try: WebDriverWait(wd, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'ip-address')) ) except Exception as e: print(f"等待超时: {e}") html = wd.page_source print(html) wd.quit()
3. 禁用网站自动化检测
部分网站会识别Selenium的自动化特征,需添加配置规避:
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless=new') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--disable-blink-features=AutomationControlled') # 禁用自动化标识 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')
4. 确保ChromeDriver与浏览器版本匹配
Colab中预装的Chromium可能版本更新,导致驱动不兼容。先查看当前浏览器版本,再下载对应驱动:
# 查看Chromium版本 !chromium-browser --version # 示例:如果版本是114.0.5735.90,下载对应驱动 !wget -N https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip !unzip chromedriver_linux64.zip !chmod +x chromedriver !mv -f chromedriver /usr/lib/chromium-browser/
内容的提问来源于stack exchange,提问作者NatGJ
相关产品推荐
相关产品推荐

