进一步防止 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 代码,强迫网页在当前标签页打开新的链接。

目录
相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
296 9
|
1月前
|
Web App开发 搜索推荐 安全
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
146 6
|
2月前
|
Web App开发 开发者
|
2月前
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
395 1
|
2月前
|
存储 移动开发 API
如何实现浏览器内多个标签页之间的通信
在浏览器中,可通过三种方式实现多标签页通信:一是利用 `localStorage`,通过设置及监听数据变化实现信息传递;二是借助 `Broadcast Channel API`,在同一频道下双向传输消息;三是运用 `SharedWorker`,作为共享工件在各标签间架起沟通桥梁。每种方法依据实际需求选择使用。
|
3月前
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
444 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
2月前
|
Web App开发
Selenium操作360浏览器
Selenium操作360浏览器
55 0
|
4月前
|
数据采集 人工智能 数据可视化
Python selenium爬虫被检测到,该怎么破?
Python selenium爬虫被检测到,该怎么破?
|
4月前
|
数据采集 Web App开发 测试技术
使用Selenium调试Edge浏览器的常见问题与解决方案
在互联网数据采集领域,Selenium常用于自动化网页爬取。针对使用Edge浏览器时遇到的启动远程调试失败、访问受限及代理IP设置等问题,本文提供了解决方案。通过特定命令启动Edge的远程调试模式,并利用Python脚本配合Selenium库,可实现代理IP、User-Agent的设定及Cookie管理等高级功能,有效提升爬虫稳定性和隐蔽性。遵循步骤配置后,即可顺畅执行自动化测试任务。
1012 1
使用Selenium调试Edge浏览器的常见问题与解决方案