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

161 天前
 mondbyte

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

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

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

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

3420 次点击
所在节点    Python
28 条回复
g1879
160 天前
@chen2016 有 bug 要向作者提,开源项目就是靠大家多用多提意见才能完善。现在 4.0 改进很大了。
mondbyte
160 天前
@cdlnls 等你发布哈
whoosy
160 天前
用 playwright +虚拟显示器 可以看下这个项目 https://github.com/who0sy/crawloop
zhangxh1023
160 天前
这个网站以前抓过。。。用 puppeteer 失败了,后来用 electron 成功了,只是很不稳定
mondbyte
160 天前
@yaleyu 感谢!
yaleyu
160 天前
@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
160 天前
@yaleyu 好的,非常感谢,回头实验一下
Tspm1eca
120 天前
@yaleyu 方法成功,謝謝

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX