原创 

python selenium 通过 browsermobproxy 设置 referer 爬虫突破ACL限制

分类:爬虫,selenium    374人阅读    IT小君  2023-04-13 12:29

题记

爬虫爬取一个网页的时候,竟然打不开页面,返回如下出错误信息:

403 Forbidden
You don't have permission to access the URL on this server.

denied by Referer ACL

Powered by Tengine
CDN Request Id: 701ea29a16813829660952616e

从中可看出 服务器 Tengine 设置了Referer ACL(引用来源控制),即请求头request 的headers 的Referer 不被允许访问页面,所以把Referer改成爬取站点应该地址应该就可以吧?于是使用postman验证一番:

果然正常返回了页面代码,接下来就是修改爬虫的referer属性。如下:

 

说明:selenium官方是不支持修改请求的headers 的,所以以下代码没作用

 chrome_options = webdriver.ChromeOptions()
 chrome_options.add_argument("referer=http://www.example.com/")

解决方案是使用代理拦截器修改header,或者使用扩展比如:seleniumwire

以下代码通过修改browsermobproxy的headers实现修改selenium header

作者:chatgpt ,体验:https://yy123.ink/chatgpt

以下是使用Python和BrowserMob Proxy设置Referer的示例代码:

import browsermobproxy as BMP
from browsermobproxy import Server
from selenium import webdriver

# 启动BrowserMob Proxy服务器
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

# 配置Chrome浏览器使用代理
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))

# 启动Chrome浏览器
driver = webdriver.Chrome(chrome_options=chrome_options)

# 设置Referer
proxy.new_har("example.com", options={'captureHeaders': True, 'captureContent': True})
proxy.headers({"Referer": "https://www.example.com/"})

# 访问网页
driver.get("http://www.example.com")

# 获取请求
har = proxy.har
print(har)

# 关闭浏览器和代理服务器
driver.quit()
proxy.close()
server.stop()

在上面的代码中,我们首先启动了BrowserMob Proxy服务器,并使用`create_proxy()`方法创建了一个代理对象。然后,我们使用ChromeOptions来配置Chrome浏览器使用代理,通过`proxy.proxy`获取代理地址。接着,我们启动Chrome浏览器,并使用`new_har()`方法开始记录请求。然后,我们设置Referer为`https://www.example.com/`,通过`headers()`方法将其添加到请求头中。最后,我们使用`get()`方法访问一个网站,并使用`proxy.har`获取请求信息。最后关闭浏览器、代理服务器并停止BrowserMob Proxy服务器。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

 工具推荐 更多»