经常有使用selenium的同学在访问网页的过程中发现,程序跑着跑着就被服务器给ban了。
当然对于一般情况下,咱们加个代理继续跑,没毛病。
然后跑着跑着又被封了。
纳尼?开始灵魂发问:
今天我们来说另外一种可能,就是其实你加上了代理也等于白加了 因为网页使用了一种叫WebRTC的技术识别出了你本地电脑真实IP
参考维基百科解释webrtc:
我翻译一下:
当前支持的浏览器情况:
不看不知道,一看吓一跳,市面上主流的浏览器都支持。
即使科学上网,因为WebRTC也会存在真实ip泄露的情况,所以各位科学上网的同学们也得注意了。
那么回到最开始的问题,我该怎么做才能关闭浏览器WebRTC避免被一些网站违规收集我的真实ip来达到不可告人的目的?
瓜子板凳准备好,解决方案如下:
在普通解决方案里wiki推荐的Chrome的还只能用插件方式对WebRTC进行关闭 咱们直接大刑……不对,代码伺候(代码都以Chrome为例):
插一句:
我们测试WebRTC是否成功,可以通过访问:https://browserleaks.com/ip
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option(
"excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')
chrome_options.add_argument(
'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')
chrome_options.add_argument("proxy-server=socks5://127.0.0.1:1080")
driver = webdriver.Chrome(
"./chromedriver", chrome_options=chrome_options)
driver.get("https://browserleaks.com/ip")
可以看到,我们代理ip是美国的以104.224开头的ip,但是WebRTC测试出来我们真实的公共出口ip为110.184开头的中国ip
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option(
"excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')
chrome_options.add_argument(
'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')
chrome_options.add_argument("proxy-server=socks5://127.0.0.1:1080")
preferences = {
"webrtc.ip_handling_policy": "disable_non_proxied_udp",
"webrtc.multiple_routes_enabled": False,
"webrtc.nonproxied_udp_enabled": False
}
chrome_options.add_experimental_option("prefs", preferences)
driver = webdriver.Chrome(
"./chromedriver", chrome_options=chrome_options)
driver.get("https://browserleaks.com/ip")
可以看到,只检测到了我们的代理ip,未检测到我们的真实ip。
以上代码均在本机测试通过,测试环境:
大家可以看到,咱们在测试中访问的网站不只可以测试WebRTC还包含其他的比如canvas指纹等,反爬手段与日俱增,反反爬手段也日新月异,后续的selenium系列我会继续更新相关反反爬措施,敬请期待!
最后不要忘了关注本公众号,以防走丢,定期更新你感兴趣的干货。