V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mondbyte
V2EX  ›  Python

如何控制已打开的浏览器,从而实现 selenium 伪装

  •  1
     
  •   mondbyte · 344 天前 · 4187 次点击
    这是一个创建于 344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Selenium+Python 爬取网站公开数据,遇到网站过滤机制,无法打开。 尝试了网上多种伪装 selenium 方法,均未实现。 https://bot.sannysoft.com/ 全绿也不行,查了资料说是网站判断是 webdriver 的途径和方法很多。

    现在大致的想法是:能否控制已手动打开的浏览器,定位到对应的标签页,来实现绕过机器人监测。 或者有其他办法的也可以。

    目标网站: https://www.nmpa.gov.cn/datasearch/home-index.html#category=ylqx

    备注:公开数据,非商业用途

    第 1 条附言  ·  343 天前
    #5 说的 chrome --remote-debugging-port=9222 ,这种方法之前也试了,其他网站可以,NMPA 这个不行。
    说是 NMPA 这个网站用了瑞数 6 目前最高级的反爬虫方案
    第 2 条附言  ·  343 天前
    目前尝试了隐藏 webdriver/remote-debugging-port/stealth.min.js 等多种方案,感觉 Selenium 过不了 NMPA 这个网站的反爬虫机制,就像 6#说的 Selenium 有点力不从心(也有可能我技术应用不行)。

    后续的想法是放开 selenium ,试试其他的框架或工具,先试 6#说的 DrissionPage
    第 3 条附言  ·  343 天前
    感谢#6 和#11 的建议,使用 DrissionPage 框架已可正常访问 NMPA
    28 条回复    2024-02-05 04:09:28 +08:00
    wind1986
        1
    wind1986  
       344 天前
    Puppeteer 能用本机浏览器
    hubaq
        2
    hubaq  
       344 天前
    药监局用的是定制版的瑞数
    forQ
        3
    forQ  
       344 天前
    mondbyte
        4
    mondbyte  
    OP
       344 天前
    @forQ 感谢方案!但还是没通过检测,打开依然 400
    peanutBark
        5
    peanutBark  
       344 天前
    能否控制已手动打开的浏览器,定位到对应的标签页 -------能,你搜索一下 chrome.exe --remote-debugging-port=9222
    yaleyu
        6
    yaleyu  
       344 天前   ❤️ 1
    反爬技术日新月异,Selenium 越来越力不从心,试试 drissionpage, https://gitee.com/g1879/DrissionPage
    Belmode
        7
    Belmode  
       344 天前
    @yaleyu 请问这个可以通过 headless 方式使用吗
    elevioux
        8
    elevioux  
       344 天前
    写个浏览器扩展?

    虽然不能做到控制浏览器的程度
    chen2016
        9
    chen2016  
       344 天前
    @yaleyu 这个毕竟是个人作品,会出现一些莫名其妙的 bug ,刚开始用的时候确实很惊艳,但是自从几个项目从 selenium 改到 DrissionPage 都出现了莫名的 bug 之后,我就彻底不敢乱用这个自动化框架了
    xyz8899
        10
    xyz8899  
       344 天前
    瑞数 5 代的 cookie 值也有很多种,目前 yao 监局是 neCYtZEjo8GmO ,neCYtZEjo8GmP
    jianchang512
        11
    jianchang512  
       344 天前
    直接开启 chrome 开发模型,写个小扩展控制页面抓取和请求过滤,似乎是更可行的方案,可以配合后端发送数据接收指令。
    除此外 楼上说的 drissionpage, https://gitee.com/g1879/DrissionPage 也可以试试。
    tudou527
        12
    tudou527  
       344 天前
    apify.com 能用么?
    Laimf
        13
    Laimf  
       344 天前
    先通过 selenium 把浏览器拉起来,进入目标网站,如果没问题,说明 selenium 没被限制。那么就可以在代码里面加等待时间,进行判断匹配到了就运行逻辑。
    zeusho871
        14
    zeusho871  
       344 天前
    指纹浏览器
    NoOneNoBody
        15
    NoOneNoBody  
       344 天前
    问题应该不在浏览器,在其他地方,例如频率和踩到蜜罐了
    我这里就随手拿个 pyqt6 写的 webview 都能打开正常浏览几页
    NoOneNoBody
        16
    NoOneNoBody  
       344 天前
    呃,背景有 canvas 动图,可能里面有指纹检测
    llbqwhtxi
        17
    llbqwhtxi  
       344 天前
    chrome.exe --remote-debugging-port=**** --user-data-dir="C:\********" 5 楼说的没错
    cdlnls
        18
    cdlnls  
       344 天前
    太巧了,正好最近在写一个工具,就是做这个,还没发布。

    主要是利用 chrome 扩展的 API 去控制浏览器,支持新建 tab 、刷新、前进后退等等,还可以给网页注入 JS/CSS 等等。

    chrome 插件启动,然后设置服务端的地址后,会使用 websocket 去连接服务端。在服务端可以接收 HTTP 请求,然后通过调用 http 请求,就可以实时控制浏览器做一些操作。

    比如
    curl http://host/_cat/tabs
    curl http://host/tabs/open?url=https://xxx.com
    curl http://host/tabs/_reload?sid=xxx

    理论上访问网页和自己用浏览器访问网页是一模一样的,据我所知应该是没有什么特征的。
    cdlnls
        19
    cdlnls  
       344 天前
    感觉你可以试试上面说的 remote-debugging-port ,这个看上去好像没问题。
    yaleyu
        20
    yaleyu  
       343 天前
    @chen2016 嗯,主要是用这个绕开 CF 的人机检查,有的网站 Selenium 实在绕不过,用了 undected-chromdriver 都绕不过。
    g1879
        21
    g1879  
       343 天前
    @chen2016 有 bug 要向作者提,开源项目就是靠大家多用多提意见才能完善。现在 4.0 改进很大了。
    mondbyte
        22
    mondbyte  
    OP
       343 天前
    @cdlnls 等你发布哈
    whoosy
        23
    whoosy  
       343 天前
    用 playwright +虚拟显示器 可以看下这个项目 https://github.com/who0sy/crawloop
    zhangxh1023
        24
    zhangxh1023  
       343 天前
    这个网站以前抓过。。。用 puppeteer 失败了,后来用 electron 成功了,只是很不稳定
    mondbyte
        25
    mondbyte  
    OP
       343 天前
    @yaleyu 感谢!
    yaleyu
        26
    yaleyu  
       343 天前   ❤️ 1
    @Belmode 之前都是有头模式在跑,无图形界面的 Linux 下用 xvfb + pyvirtualdisplay 模拟图形界面也能跑,看到这里问无头模式能不能跑,试了一下,能跑,不过有几点注意事项:
    1. ua 和实际打开浏览器的 ua 必须一致
    2. macOS 下,有头无头都能跑
    3. 无图形界面的 Linux - 有头:因为我跑的是有个打开页面后倒计时几秒才能点的按钮,在不用 xvfb + pyvirtualdisplay 的情况下,不能跑,就算显式等待一段时间也点不了那个按钮,用了 xvfb + pyvirtualdisplay 就没问题
    4. 无图形界面的 Linux - 无头,我要跑的那个页面,就算是无头并不实际打开浏览器,也得用用 xvfb + pyvirtualdisplay 模拟界面,有点奇怪

    from DrissionPage import WebPage, ChromiumOptions
    co = ChromiumOptions()
    co.set_headless(True)
    # ua 和实际打开浏览器的 ua 必须一致,才能通过 Cloudflare, 因为浏览器升级,ua 不固定,先打开百度得到目前的 ua
    page = WebPage(driver_or_options=co)
    page.get("https://www.baidu.com")
    ua = page.user_agent.replace("Headless", "")
    page.quit()
    co.set_user_agent(ua)
    page = WebPage(driver_or_options=co)
    page.get(你真正要跑的 URL)
    Belmode
        27
    Belmode  
       343 天前
    @yaleyu 好的,非常感谢,回头实验一下
    Tspm1eca
        28
    Tspm1eca  
       303 天前
    @yaleyu 方法成功,謝謝
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1137 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.