Selenium 最强反反爬方案来了!

点击上方蓝色小字,关注“涛哥聊Python

重磅干货,第一时间送达

来源:未闻Code

之前我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。

今天我们就来说说应该如何正确解决这个问题

我们首先给出解决方案,然后再说明这个解决方案,我是通过什么方式找到的

解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js,稍后我会说明如何生成这个文件

我们需要设定,让 Selenium 或者 Pyppeteer 在打开任何页面之前,先运行这个 Js 文件

这里,我以 Selenium 为例来说明如何操作,我们编写如下代码:

import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')

driver = Chrome('./chromedriver', options=chrome_options)

with open('/Users/kingname/test_pyppeteer/stealth.min.js') as f:
    js = f.read()

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": js
})
driver.get('https://bot.sannysoft.com/')
time.sleep(5)
driver.save_screenshot('walkaround.png')

# 你可以保存源代码为 html 再双击打开,查看完整结果
source = driver.page_source
with open('result.html', 'w') as f:
    f.write(source)

运行截图如下:

可以看到,虽然我使用的是无头模式,但是能够被识别的特征都被成功隐藏。大家还可以双击打开保存下来的 html 文件,看看是不是结果跟普通浏览器几乎一样。

如果你使用的是 Pyppeteer,那么可以根据我上面文章中给出的方法,试着加载一下这个 js 文件,看看是不是也能成功隐藏特征。

那么,这个stealth.min.js文件是怎么来的呢?这就要说到puppeteer了。我们知道,Python 版本的pyppeteer已经很久没有人维护了,但是Node.js 版本的 puppeteer持续有人维护,并且在持续更新,生态也越来越好。

有开发者给 puppeteer 写了一套插件,叫做puppeteer-extra。其中,就有一个插件叫做puppeteer-extra-plugin-stealth[1]。这个东西,就来专门用来让 puppeteer 隐藏模拟浏览器的指纹特征。

这个东西是专门给 puppeteer 用的。所以,如果你使用的是 puppeteer,那么你可以根据它的 Readme说明,直接使用。

那么,我们用 Python 的人怎么办呢?实际上也有办法。就是把其中的隐藏特征的脚本提取出来,做成一个单独的 js 文件。然后让 Selenium 或者 Pyppeteer 在打开任意网页之前,先运行一下这个 js 文件里面的内容。

puppeteer-extra-plugin-stealth的作者还写了另外一个工具,叫做extract-stealth-evasions[2]。这个东西就是用来生成stealth.min.js文件的。

如果你在国外,并且网速足够快的话。那么你根据它的 Readme,首先安装 Node.js,然后安装 Npm,接着运行如下命令:

npx extract-stealth-evasions

就会在你执行命令的文件夹下面生成一个stealth.min.js文件。然后你就可以正常使用了。

如果你在国内,那么执行这个命令的过程中,会有一个下载 Chromium 的过程,速度非常慢,虽然只有130MB,但是可能会下载好几个小时。

此时,你需要把它的package.jsonindex.js两个文件保存到本地。然后打开package.json文件,修改其中的dependencies这一项,把里面的puppeteer改成puppeteer-core,如下图所示:

然后修改index.js,给.launch()函数增加一个参数executablePath,指向你电脑上的 Chrome 浏览器,如下图所示:

修改完成以后。首先执行yarn install安装依赖包。然后执行node index.js运行程序。1秒钟以后就会生成stealth.min.js了。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

更多资料点击文章下方名片


获取 stealth.min.js  点击文章下方拱宗号名片 回复「stealth」 获取

### 回答1: Selenium Firefox 可以用于虫,因为它可以模拟人类用户的行为,例如点击、滚动、输入等操作,从而避免被网站检测到是机器人虫。此外,Selenium Firefox 还可以通过设置代理、随机 User-Agent 等方式来进一步隐藏虫的身份。但需要注意的是,使用 Selenium Firefox 进行虫也需要遵守网站的规则和条款,不得进行恶意取和攻击行为。 ### 回答2: Selenium是一款常用的Web自动化测试工具,比如,它可以模拟浏览器的操作,进行Web自动化测试。不过,同样因为它能模拟浏览器的操作,所以也被不少“虫”操作使用。由于Selenium可以模拟人的操作,所以它比使用程序直接访问网站的方式更加难以被检测到。 而另一方面,Firefox作为一款非常流行的浏览器,也是虫行为的目标之一。尤其是,在Firefox浏览器中,有一些插件可以自定义HTTP请求头、切换代理等操作,使得虫行为更加隐蔽、安全。 当Selenium和Firefox同时被用来进行网站取时,可以采用以下的技巧,以避开网站的虫措施: 1. 随机化请求头:通过在Selenium中设置随机的请求头,可以避免被网站发现是同一机器在进行访问。 2. 切换User-Agent:同样通过设置不同的User-Agent,可以让浏览器变得更像人为操作。 3. 使用代理:使用Firefox插件设置HTTP代理,可以避免被网站封禁IP。 4. 精简代码:通过精简Selenium代码,减少每个页面访问次数,可以增加程序的访问效率,从而减少被网站发现脚本的可能性。 总之,无论是使用Selenium进行Web自动化测试,或者进行网站取,都需要注意不被网站检测到,向网站发送正确的请求头,可以避免被封禁。 ### 回答3: Selenium和Firefox是两个常用的自动化测试工具,在虫领域也被广泛使用。但是,一些网站为了保护自己的数据,会通过措施来防止虫的取。使用Selenium和Firefox进行取时,有些网站会通过检测网页的特定属性来确认这个请求是来自虫还是真实的用户,从而进行阻止。 为了应对这个问题,可以通过以下方法进行反反爬: 1.修改Selenium和Firefox配置 通过修改Selenium和Firefox的一些设置,来让虫请求看起来更像真实用户的请求。比如修改User-Agent、定时等待、设置缓存等。这些方法可以有效地确保请求看起来更像真实的浏览器请求。 2.使用无头浏览器 无头浏览器可以在不打开浏览器窗口的情况下进行网页访问,这样可以避免被网站检测到自动化测试工具的使用。常见的无头浏览器包括PhantomJS、Headless Chrome等。 3.使用代理IP 通过使用代理IP来隐藏自己的真实IP地址,这样可以减少被网站检测到的概率。常用的代理IP服务商包括阿布云、快代理、蘑菇代理等。 总之,在使用Selenium和Firefox进行取时,需要注意一些措施的使用。通过这些方法来反反爬,可以让虫请求更像真实用户的请求,从而提高取的成功率。但需要注意:某些网站的措施比较强,需要根据实际情况来进行选择方法。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值