使用Selenium爬取总统演讲页面的驱动配置问题求助
使用Selenium爬取总统演讲页面的驱动配置问题求助
嘿,我来帮你捋捋这个问题!你之前用BS4爬那个总统演讲网站时,因为页面需要JavaScript渲染,只拿到了<noscript>的提示内容,转用Selenium的思路完全是对的——毕竟Selenium能模拟真实浏览器加载页面,刚好能解决JS渲染的问题。
先说说你卡壳的驱动配置问题吧,你的代码里已经导入了webdriver-manager,但没有正确利用它来自动管理驱动,这大概率是配置失败的原因。我给你调整下代码,同时拆解下步骤:
首先,先确保你已经安装了必要的依赖包,在终端里跑这个命令:
pip install selenium webdriver-manager
然后,把你的Python代码改成下面这样(这是Selenium 4及以上版本的推荐写法,更稳定):
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service # 用Service类来管理webdriver-manager自动安装的驱动 service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service) # 现在可以正常访问目标页面了 target_url = "http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-sessao-solene-de-abertura-xxi-marcha-a-brasilia-em-defesa-dos-municipios-palacio-do-planalto" driver.get(target_url)
为什么要这么改?因为Selenium 4之后,直接调用webdriver.Chrome()的旧方式已经不推荐了,需要通过Service类来关联驱动路径,而ChromeDriverManager().install()会自动帮你下载和当前Chrome浏览器版本匹配的驱动,不用你手动去官网找驱动、配置路径,省了超多麻烦。
另外,等页面加载出来后,建议加个显式等待,确保演讲内容真的渲染完成了再去抓取,比如:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 最多等10秒,直到页面中出现演讲正文的容器元素(你可以根据实际页面结构调整CSS选择器) wait = WebDriverWait(driver, 10) speech_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.conteudo-discurso"))) # 然后就可以获取文本内容了 print(speech_element.text)
这样应该就能解决你驱动配置的问题,顺利拿到演讲内容啦!
备注:内容来源于stack exchange,提问作者Marcelo Soares




