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

requests_html中proxies参数失效问题求助

解决requests-html中proxies参数在render时不生效的问题

我一眼就看出问题所在啦——你设置的proxies只对session.get()发起的初始HTTP请求生效,但当你调用r.html.render()时,requests-html会启动无头浏览器(基于Pyppeteer)重新加载页面,这部分浏览器请求并没有继承你设置的代理配置,所以才会返回你的本地IP。

要解决这个问题,你需要直接给render()方法配置代理,因为它是独立于requests的请求流程的。具体处理方式如下:

  • 确保你的代理IP支持HTTPS请求(谷歌搜索是HTTPS站点,HTTP代理可能无法处理HTTPS流量)
  • 在render()中通过proxy参数传递代理地址,格式为http://ip:port(如果代理需要认证,格式为http://username:password@ip:port)

修改后的完整代码如下:

from requests_html import HTMLSession

# 谷歌搜索IP的目标URL
url = 'https://www.google.com/search?q=what+is+my+IP&oq=what+is+my+IP&aqs=chrome..69i57j0l7.13217j0j7&sourceid=chrome&ie=UTF-8'
session = HTMLSession()

# 初始请求同时配置http和https代理,避免初始请求走本地IP
r = session.get(url, proxies={'http': 'http://161.202.226.194:80', 'https': 'http://161.202.226.194:80'})
# 给render方法传入代理参数,确保无头浏览器请求走代理
r.html.render(timeout=25, proxy='http://161.202.226.194:80')

# 注意:xpath返回的是元素列表,需取第一个元素再获取文本内容
ip = r.html.xpath("//span[@style='font-size:20px']")[0].text
print(ip)

另外补充几个关键细节:

  • 初始请求的proxies最好同时配置http和https,避免初始页面加载走本地IP
  • 你原代码中xpath查询直接调用.text会报错,因为返回的是元素列表,我已经帮你修正为取第一个元素
  • 务必确认你的代理IP是可用且未被谷歌封禁的,公开免费代理通常生命周期很短,建议先单独测试代理的连通性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:02:52