Python+Selenium获取页面源码失败:连接被拒绝问题求助
获取JS渲染后页面源码的解决方案
首先得说清楚:你遇到的Connection refused错误,本质是网络问题——手动都打不开python.org,说明你的网络环境没法访问这个站点,和Selenium代码无关。先解决网络(比如配置代理、检查防火墙),你的原代码其实是可以正常拿到JS执行后的源码的。
不过既然你问有没有其他替代方法,我整理了几个实用的方案:
一、修复Selenium的网络问题(继续用Selenium)
如果坚持用Selenium,给Firefox配置代理试试:
#!/usr/bin/env python from selenium import webdriver from selenium.webdriver.firefox.options import Options # 配置代理(替换成你的代理信息) options = Options() options.set_preference("network.proxy.type", 1) options.set_preference("network.proxy.http", "127.0.0.1") options.set_preference("network.proxy.http_port", 1080) browser = webdriver.Firefox(options=options) browser.get('https://python.org') html_source = browser.page_source print(html_source) browser.quit() # 记得关闭浏览器,避免残留进程
也可以换成Chrome浏览器,有时候Chrome的网络适配性更好,记得下载对应版本的ChromeDriver。
二、用Playwright(更现代的自动化工具)
Playwright是微软推出的工具,对JS渲染页面的支持比Selenium更友好,自带等待机制,不用手动处理加载:
- 先安装依赖:
pip install playwright playwright install # 自动下载浏览器驱动 - 示例代码:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 可以选择chromium、firefox、webkit browser = p.firefox.launch(headless=False) # headless=False可以看到浏览器窗口 page = browser.new_page() page.goto("https://python.org", wait_until="networkidle") # 等待网络空闲,确保JS加载完成 html_source = page.content() # 获取渲染后的完整HTML print(html_source) browser.close()
三、用Requests-HTML(轻量无浏览器)
如果不想启动真实浏览器,Requests-HTML是个轻量选择,它内置了JS渲染引擎:
- 安装:
pip install requests-html - 示例代码:
这个工具适合简单的JS渲染场景,对复杂交互的支持不如前两者。from requests_html import HTMLSession session = HTMLSession() r = session.get('https://python.org') r.html.render() # 触发JS渲染,默认等待2秒,可调整sleep参数 html_source = r.html.html print(html_source) session.close()
小提示
- 所有方法的前提都是能正常访问目标网站,先解决网络问题才是关键
- 如果目标网站有反爬,记得加合理的请求头、代理,或者模拟人类操作(比如随机延迟)
内容的提问来源于stack exchange,提问作者bielu000
相关产品推荐
相关产品推荐

