进一步防止 Selenium 被检测——如何防止浏览器用新标签页打开链接?

简介: 进一步防止 Selenium 被检测——如何防止浏览器用新标签页打开链接?

摄影:产品经理产品经理背着我吃日料

在文章:(最新版)如何正确移除Selenium中的 window.navigator.webdriver中,我们讲到了Page.addScriptToEvaluateOnNewDocument这个方法,它可以让当前标签页打开的所有网页,在网页内容加载之前执行一段 JavaScript 代码,从而防止网站检测到window.navigator.webdriver属性。

但有些网站,点击了它的页面超链接以后,会自动以新的标签页打开,这种情况下就无法使用上面提到的技巧了。

为了解决这个问题,我们必须设法让当前页面的所有a标签涉及到的链接,都能在当前标签页打开。

要解决这个问题实际上非常简单,我们只需要知道一点点HTML知识和 JavaScript 的知识即可。如果要用一个a标签的链接在当前页面打开,我们只需要设置它的target属性值为_self

现在我们需要用 JavaScript 把当面页面上的所有a标签的target属性值全部改成_self

以知乎为例,我们打开知乎的首页,如下图所示:

现在点击上面的任何一个问题,都会以新标签页打开,如下图所示:

现在我们回到原来的首页,打开开发者工具的Console选项卡,如下图所示:

执行如下两行 JavaScript:

let a_list = document.getElementsByTagName('a')
[...a_list].map(a => {a.setAttribute('target', '_self')})

运行效果如下图所示:

现在,我们再次点击页面上的任意一个问题,就会发现,你可以直接在当前标签页打开了。

使用这个方法有4个地方需要注意:

  1. 不适用于通过 JavaScript 的 window.open()函数打开新网址的情况
  2. 对于<form>标签的表单提交,也可以设置target="_self"属性。
  3. 必须等页面完全加载完成才能执行这两行 JavaScript 语句。如果执行语句以后,页面通过 Ajax 或者其他途径又加载了新的 HTML,那么需要重新执行。
  4. 每次打开新的链接以后,需要再次执行这两行语句。

这个方法可以与本文开始提到的那篇文章中的方法结合起来使用。首先通过Page.addScriptToEvaluateOnNewDocument让当前标签页的window.navigator.webdriver属性消失,等页面完全加载完成以后,再通过driver.execute_script()运行本文讲到的两行 JavaScript 代码,强迫网页在当前标签页打开新的链接。

目录
相关文章
|
4月前
|
数据采集 前端开发 JavaScript
深挖navigator.webdriver浏览器自动化检测的底层分析
本文详细讲解了如何通过技术手段破解浏览器 `navigator.webdriver` 检测,结合爬虫代理、多线程等策略,在豆瓣图书页面批量采集数据。具体包括:隐藏 Selenium 特征、配置代理突破 IP 限制、设置伪装用户、利用多线程提升效率。文章面向初学者,提供分步教程与示例代码,同时设有「陷阱警告」帮助规避常见问题。目标是从底层实现反检测,高效采集图书评分、简介、作者等信息,适合具备 Python 和 Selenium 基础的读者实践学习。
170 12
深挖navigator.webdriver浏览器自动化检测的底层分析
|
5月前
|
数据采集 JavaScript 前端开发
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。
464 1
|
10月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
1223 9
|
10月前
|
Web App开发 搜索推荐 安全
|
11月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
736 6
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
1154 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
11月前
|
Web App开发 开发者
|
11月前
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
917 1
|
11月前
|
存储 移动开发 API
如何实现浏览器内多个标签页之间的通信
在浏览器中,可通过三种方式实现多标签页通信:一是利用 `localStorage`,通过设置及监听数据变化实现信息传递;二是借助 `Broadcast Channel API`,在同一频道下双向传输消息;三是运用 `SharedWorker`,作为共享工件在各标签间架起沟通桥梁。每种方法依据实际需求选择使用。
|
数据采集 人工智能 数据可视化
Python selenium爬虫被检测到,该怎么破?
Python selenium爬虫被检测到,该怎么破?
1557 8