如何控制已打开的浏览器,从而实现 selenium 伪装 - V2EX
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 2023-12-25 13:57:06 +08:00 5396 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    主要是利用 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

    理论上访问网页和自己用浏览器访问网页是一模一样的,据我所知应该是没有什么特征的。
    cctv6
        19
    cctv6  
       2023-12-25 22:25:49 +08:00
    感觉你可以试试上面说的 remote-debugging-port ,这个看上去好像没问题。
    yaleyu
        20
    yaleyu  
       2023-12-26 09:26:59 +08:00
    @chen2016 嗯,主要是用这个绕开 CF 的人机检查,有的网站 Selenium 实在绕不过,用了 undected-chromdriver 都绕不过。
    g1879
        21
    g1879  
       2023-12-26 09:34:42 +08:00
    @chen2016 有 bug 要向作者提,开源项目就是靠大家多用多提意见才能完善。现在 4.0 改进很大了。
    mondbyte
        22
    mondbyte  
    OP
       2023-12-26 10:18:35 +08:00
    @cdlnls 等你发布哈
    whoosy
        23
    whoosy  
       2023-12-26 10:34:21 +08:00
    用 playwright +虚拟显示器 可以看下这个项目 https://github.com/who0sy/crawloop
    zhangxh1023
        24
    zhangxh1023  
       2023-12-26 10:38:48 +08:00
    这个网站以前抓过。。。用 puppeteer 失败了,后来用 electron 成功了,只是很不稳定
    mondbyte
        25
    mondbyte  
    OP
       2023-12-26 11:28:03 +08:00
    @yaleyu 感谢!
    yaleyu
        26
    yaleyu  
       2023-12-26 13:50:59 +08:00   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  
       2023-12-26 14:01:24 +08:00
    @yaleyu 好的,非常感谢,回头实验一下
    Tspm1eca
        28
    Tspm1eca  
       2024-02-05 04:09:28 +08:00
    @yaleyu 方法成功,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3052 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:34 PVG 08:34 LAX 16:34 JFK 19:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86