精华内容
下载资源
问答
  • python selenium 反检测

    千次阅读 2019-12-17 19:34:20
    现在有大量的反爬机制,通常我们爬虫有re,bs4,selenium,这里重点说...在这里我们通过js代码发现他有个检测机制 #通过查看window.navigator.webdriver信息可以看到这里是为true window.navigator.webdrive...

    现在有大量的反爬机制,通常我们爬虫有re,bs4,selenium,这里重点说selenium的。

    之前有业务需求需要爬取boos直聘的信息,我们在使用selenium进行爬虫的时候,发现我们无法登陆进去。

    在这里我们通过js代码发现他有个检测机制

    #通过查看window.navigator.webdriver信息可以看到这里是为true
    window.navigator.webdriver

    因此我们需要修改我们的登陆信息

    from selenium.webdriver import ChromeOptions
    
    option = ChromeOptions()  # 实例化一个ChromeOptions对象
    option.add_experimental_option('excludeSwitches', ['enable-automation'])  # 以键值对的形式加入参数
    
    driver = webdriver.Chrome(chromedriver.exe',options=option)
    

    在添加option实例之后我们打开网页输入js代码

    window.navigator.webdriver
    
    输出undefined

    这样我们就可以避开selenium的检测机制。

     

     

     

     

     

     

     

    展开全文
  • from selenium import webdriver # 为了防止你不确定自己的 chrom 版本,最好两个混合用 options = webdriver.ChromeOptions() # chrom在79版之前用这个 options.add_experimental_option("excludeSwitches", [...
    from selenium import webdriver
    
    # 为了防止你不确定自己的 chrom 版本,最好两个混合用
    options = webdriver.ChromeOptions()
    # chrom在79版之前用这个
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    # 这个是更改 user-agent 的,可有可无
    options.add_argument(
        "user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
    driver = webdriver.Chrome(options=options)
    # chrom在79版之后用这个
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    driver.get('https://baidu.com')
    
    time.sleep(30)
    # 这里最好用代码关闭selenium不然的话你的进程里会残留大量的chrom进程
    driver.close()
    
    展开全文
  • 之前我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。 解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js stealth....
    本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末

    之前我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。
    解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js

    stealth.min.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.json和index.js两个文件保存到本地。然后打开package.json文件,修改其中的dependencies这一项,把里面的puppeteer改成puppeteer-core,如下图所示:
      在这里插入图片描述
      然后修改index.js,给.launch()函数增加一个参数executablePath,指向你电脑上的 Chrome 浏览器,如下图所示:
      在这里插入图片描述
      修改完成以后。首先执行yarn install安装依赖包。然后执行node index.js运行程序。1秒钟以后就会生成stealth.min.js了。

    使用效果测试
    让 Selenium 或者 Pyppeteer 在打开任何页面之前,先运行这个 Js 文件

    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下载链接
    链接:https://pan.baidu.com/s/1IcrvoalFgWemYXxeY3tq8g
    提取码:81lt


    本文仅供学习交流使用,如侵立删! 企鹅 、WX: 1033383881(备注来意)

    展开全文
  • selenium 是一个很友好的网站调试工具,但是很多人都用来做爬虫,其实我也是用来做爬虫,毕竟好东西要共享,哈哈 ...在爬虫这一块,很多爬虫对方对selenium并不是太友好,他们对于selenium检测机制造的很是很牛...

    selenium 是一个很友好的网站调试工具,但是很多人都用来做爬虫,其实我也是用来做爬虫,毕竟好东西要共享,哈哈

    在做静态网页的请求的时候,普通的http/https可以很轻松的搞定,但是面对动态网页,很多内容都是通过后面的js加载出来的,如果还要用协议解决,希望你遇到的问题可以解决。

    在爬虫这一块,很多反爬虫对方对selenium并不是太友好,他们对于selenium的检测机制造的很是很牛逼的。

    对于滑动验证码,大部选择用模拟的方式解决,当然牛逼过头的话用协议尝试也是巨佬,用模拟的话首先要绕过对方网站的检测机制。

    对于 selenium 的检测机制,比较常见的就是拿你的特征值,毕竟用了 selenium 的 webdriver 驱动之后打开的模拟浏览器就与真实浏览器不一样了

    - window.navigator.webdriver
    
    - window.navigator.languages
    
    - window.navigator.plugins.length

    其中最主要的特征值就是webdriver这一项。

    partial interface Navigator {
          readonly attribute boolean webdriver;
      };

    Navigator接口的webdriver IDL属性必须返回webdriver-active标志的值,该标志默认值为false或者undefined。

    通过 F12 -> Console -> window.navigator.webdriver

    正常的浏览器是这样的

    而用selenium模拟出来的是这样的

    意思就是对方可以通过此处认定你是爬虫

     

    所以我一直都提倡科学上网

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打开开发者模式
    
    driver = webdriver.Chrome(options=options)

    科学上网只打开开发者肯定是不够的,我们有时候还需要一些其他参数 

    - 运行环境

    options = Options()
    
    options.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"')
    # options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"')
    
    options.add_argument("--disable-javascript")  # 禁止加载js
    
    # options.add_argument("--window-size=1366,768")  # 设置窗口大小
    # options.add_argument("--start-maximized")       # 最大化
    
    options.add_argument("--incognito")  # 隐身模式,无痕模式
    
    options.add_argument("--disable-infobars")  # 禁用浏览器正在被自动化程序控制的提示
    
    options.add_argument('lang=zh_CN.UTF-8')
    
    # options.add_argument('--disable-gpu')  # 禁用 gpu
    
    options.add_argument('--disable-infobars')  # 除去“正受到自动测试软件的控制”
    
    # options.set_headless()  # 无头浏览器
    # options.add_argument('--headless')  # 无头浏览器
    
    options.add_argument('--no-sandbox')  # 让 driver 在 root 权限下跑
    
    # options.add_argument('--disable-dev-shm-usage')
    
    options.add_argument('blink-settings=imagesEnabled=false')  # 禁止加载图片
    
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 打开开发者模式
    
    options.add_argument("--auto-open-devtools-for-tabs")  # 打开 F12

     

     

     

     

     

     

     

    展开全文
  • “ 阅读本文大概需要 2 分钟。 ”在一篇公众号文章《别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征》中,我们知道目前网上的反检测方法几乎都是掩耳盗铃,因...
  • selenium是爬虫常用的手段之一,绕过各种js懒加载,模拟用户操作,拖动滑块验证码等,如某宝就有selenium 检测,当使用selenium去某宝或其他网站进行爬虫或者模拟登陆时,会出现滑动验证码,并且无论是用...
  • 最近遇上一些反Selenium爬虫的情况,爬虫都会碰到某些网站刚刚打开页面就被判定为:非人类行为。 因为不少大网站有对selenium的js监测机制。比如navigator.webdriver,navigator.languages,navigator.plugins....
  • selenium + chrome 被检测反爬小记

    千次阅读 2019-03-18 15:57:00
    很多难以采集的网站都使用selenium爬取,但是后来发现selenium有特征值,会被检测出来,今天来小结一下反爬方案 测试网站 全绿好像代表没被检测出 中间人修改js 网上很多都是这种博客,不知道靠不靠谱 pyppeteer ...
  • 最近遇上一些反Selenium爬虫的情况,爬虫都会碰到某些网站刚刚打开页面就被判定为:非人类行为。因为不少大网站有对selenium的js监测机制。比如navigator.webdriver,navigator.languages,navigator.plugins.length...
  • 反爬之js检测selenium篇(某宝登录)

    千次阅读 热门讨论 2019-01-31 15:18:48
    使用selenium模拟淘宝登录、模拟大鱼号登录
  • 为了采集稳定币USDT的流通数据,需要去https://wallet.tether.to/transparency采集,用的python3 和selenium,非无头模式可以顺利加载,无头模式下死活加载不出来,无头模式截图发现页面跳出来这货,尝试使用打码...
  • 爬虫 selenium 绕过检测机制

    千次阅读 2019-01-16 09:38:16
    使用selenium模拟浏览器进行数据抓取无疑是当下最通用的数据采集方案,它通吃各种数据加载方式,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制。它的应用,使得许多网站的采集策略形同虚设。由于selenium不会在...
  • Selenium 与 Puppeteer 能被网站探测的几十个特征》中,我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。今天我们就来说说...
  • 点击上方蓝色小字,关注“涛哥聊Python”重磅干货,第一时间送达来源:未闻Code之前我们提到目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 web...
  • 有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的爬虫机制发现。 先不说淘宝这种基于用户行为的爬虫策略,仅仅是一个普通的小网站,使用一行Javascript代码,就能...
  • 针对淘宝反selenium反爬措施详讲1-----pyautogui

    千次阅读 多人点赞 2019-08-06 17:02:16
    现在某猫和某宝在反反selenium的道路上越越来恶毒了,大部分是检测webdriver的关键符(网上有很多介绍这里就不一一介绍了)当我们遇到反selenium那该怎么办???????????????下面进入我们的正文!!!...
  • 大家在使用Selenium + Chromedriver爬取网站信息的时候,以为这样就能做到不被网站的爬虫机制发现。但是实际上很多参数和实际浏览器还是不一样的,只要网站进行判断处理,就能轻轻松松识别你是否使用了Selenium + ...
  • 使用 Selenium 调用 ...现在很多网站都加上了对 Selenium检测,来防止一些爬虫的恶意爬取。 大多数情况下,检测的基本原理是检测当前浏览器窗口下的 `window.navigator` 对象是否包含 `webdriver` 这个属性。
  • 反检测:有些网站会检测访问的selenium是否是机器,判断是的话会不给请求 from selenium import webdriver from time import sleep #这个是用来实现无可视化的 from selenium.webdriver.chrome.options import ...
  • 使用selenium模拟浏览器进行数据抓取无疑是当下最通用的数据采集方案,它通吃各种数据加载方式,能够绕过客户JS加密,绕过爬虫检测,绕过签名机制。它的应用,使得许多网站的采集策略形同虚设。由于selenium不会在...
  • 所谓的反检测是为了让网站服务器检测不出我们使用了selenium,否则某些门户网站通过使用反爬手段导致我们无法爬取成功。 这些代码不用去死记硬背,只需要在需要使用的时候拿过来用就可以了。 from selenium import ...
  • 原因: 我们利用selenium爬取很多网站都很方便,但是有的网站如知乎和淘宝会检测selenium. 这些网站如果直接通过selenium打开网站,selenium会携带一些指纹信息,如:window.navigator.webdriver 网站js通过检测类似的...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

selenium反检测