python爬虫

selenium被识别为爬虫怎么办

2020-02-20  本文已影响0人  后山小鲨鱼

selenium可以用来爬取动态渲染的网页,但是有一些网站会识别到你是爬虫程序,它们是依靠什么什么来判断的呢?

一.检测你的webdriver属性,正常的浏览器的navigator.webdriver属性是undefined,而用selenium打开的话是true
二.检测你的navigator.platform的值,pc端的值是win32,如果你的ua是手机的,就可以判断出你的navigator.platform的值有问题

针对第一种情况,有3种解决办法

1.将浏览器的模式设置为专业模式,添加属性。

 options = Options()
 options.add_experimental_option('excludeSwitches', ['enable-automation'])
 browser = webdriver.Chrome("static/chromedriver.exe", chrome_options=options)

这种方法第一次打开页面起作用,再接着打开同样有这个字段检测的页面就不起作用了。

2.js执行替换返回navigator.webdriver的值。在get链接后执行js替换。

 browser = webdriver.Chrome("static/chromedriver.exe", chrome_options=options)
 browser.get(url)
 script = 'Object.defineProperty(navigator,"webdriver",{get:function(){return false},});'
 browser.execute_script(script)

同上,第一次打开页面起作用,再接着打开同样有这个字段检测的页面就不起作用了。要起作用必须再执行一次。

3.利用mitmproxy过滤修改navigator.webdriver属性值的代码,这个的话,不同网站有不一样的拦截方式,但只要是你想修改的基本能修改。具体问题具体分析。

针对第二种情况,比较少见。

用真实的手机浏览器打开网页的话,navigator.platform的值应该为Android,iPhone,iPad这3种之一,但是用电脑的模拟的手机ua打开网页的话,navigator.platform的值固定为win32。如果对方网页你是想模拟真实手机打开的,最好把navigator.platform的值修改成ua对应的机型

1.。我们可以js执行替换navigator.platform的值。

 browser = webdriver.Chrome("static/chromedriver.exe", chrome_options=options)
 browser.get(url)
 script = 'Object.defineProperty(navigator,"platform",{get:function(){return "Android"},});'
 browser.execute_script(script)
上一篇下一篇

猜你喜欢

热点阅读