Python使用execute_script模拟鼠标滚动、鼠标点击等示例

 更新时间:2025年02月02日 16:05:51   作者:翠花上酸菜  
文章介绍了Python使用Selenium执行JavaScript来绕过网站对爬虫的限制,包括模拟点击、拦截弹出窗口、创建并派发点击事件、模拟鼠标悬停后点击和滚动到元素并点击等方法

我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器js的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。

这里我们可以加入JavaScript的使用。Selenium可以执行JavaScript,通过使用 execute_script 方法,来执行点击操作。

它可以绕过一些 Selenium 直接操作元素时可能遇到的问题,比如元素未完全加载元素被遮挡或者需要更复杂的交互。

以下是几种使用 execute_script 来执行点击操作的方法:

1. 模拟鼠标直接点击事件

element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].click();", element)

这段代码找到 ID 为 myButton 的元素,并使用 JavaScript 直接触发该元素的点击事件。

2. 拦截弹出窗口

通过覆盖浏览器内置的方法,如alert、confirm、prompt等,避免弹出窗口

driver.execute_script('''window.alert = function() {
    console.log("Alert function called, but blocked.");
};
window.confirm = function() {
    console.log("Confirm function called, but blocked.");
    return true; // 返回true,以模拟用户点击“确定”按钮
};
window.prompt = function() {
    console.log("Prompt function called, but blocked.");
    return null; // 返回null,以模拟用户点击“取消”按钮
};''')

以上的代码,所有调用alert、confirm和prompt的方法将被拦截,且不会弹出任何窗口。这种方法简单而有效,适用于大多数情况。

3. 创建并派发点击事件

这种方法创建一个新的点击事件,并将其派发到指定的元素上,这可以提供更多的控制,比如模拟鼠标右键点击。

element = driver.find_element("myButton")
driver.execute_script("var event = new MouseEvent('click', {"
                     "view: window,"
                     "bubbles: true,"
                     "cancelable: true});"
                     "arguments[0].dispatchEvent(event);", element)

在运行过程中,如果遇到下面的问题:

“JavascriptException: javascript error: arguments[0].dispatchEvent is not a function”

这说明,

4. 使用 JavaScript 模拟鼠标悬停后点击

如果你需要更复杂的鼠标操作,比如鼠标悬停后点击,你可以使用以下方法:

element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].style.cursor = 'pointer';", element)
driver.execute_script("arguments[0].onmouseover = function() {"
                     "arguments[0].style.backgroundColor = 'yellow'; };", element)
driver.execute_script("arguments[0].onmouseout = function() {"
                     "arguments[0].style.backgroundColor = 'white'; };", element)
driver.execute_script("arguments[0].click();", element)

5. 滚动到元素并点击

如果元素不在可视区域内,你可能需要先滚动到该元素,然后再执行点击操作:

element = driver.find_element_by_id("myButton")
driver.execute_script("arguments[0].scrollIntoView();", element)
driver.execute_script("arguments[0].click();", element)

6. 等待元素可点击后执行点击

有时候,元素可能需要一些时间来加载或变得可点击,你可以使用 execute_script 来等待这个条件:

element = driver.find_element_by_id("myButton")
driver.execute_script("while (arguments[0].disabled || "
                     "arguments[0].style.display === 'none' || "
                     "arguments[0].style.visibility === 'hidden') {"
                     "setTimeout(function() {}, 100); };"
                     "arguments[0].click();", element)

这些方法提供了不同场景下使用 execute_script 执行点击操作的示例。

你可以根据实际情况选择最适合你需求的方法。

到此这篇关于Python使用execute_script模拟鼠标滚动、鼠标点击等示例的文章就介绍到这了,更多相关Python使用js模拟鼠标点击内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3 requests库实现多图片爬取教程

    python3 requests库实现多图片爬取教程

    今天小编就为大家分享一篇python3 requests库实现多图片爬取教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • WSL2中安装 cuDNN​​的步骤详解

    WSL2中安装 cuDNN​​的步骤详解

    本文在WSL2环境下通过APT或手动安装cuDNN的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • python代码有一行标黄问题的解决方案

    python代码有一行标黄问题的解决方案

    这篇文章主要介绍了python代码有一行标黄问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 一文详解如何在Ubuntu 20.04或22.04上安装Python 3

    一文详解如何在Ubuntu 20.04或22.04上安装Python 3

    Python是一种广泛使用的高级编程语言,它在各种领域都有广泛的应用,如果你正在使用Ubuntu操作系统,下面这篇文章主要介绍了如何在Ubuntu20.04或22.04上安装Python3的相关资料,需要的朋友可以参考下
    2026-03-03
  • Python基于requests库爬取网站信息

    Python基于requests库爬取网站信息

    这篇文章主要介绍了python基于requests库爬取网站信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 基于OpenCV与Python实现的身份证号码识别案例详解

    基于OpenCV与Python实现的身份证号码识别案例详解

    身份证识别技术主要依赖于计算机视觉和图像处理技术,通过对身份证图像进行分析,提取关键信息(如身份证号码、姓名等),这篇文章主要介绍了基于OpenCV与Python实现的身份证号码识别的相关资料,需要的朋友可以参考下
    2026-01-01
  • Python使用JDAudioCrawler将下载的音频存储到本地

    Python使用JDAudioCrawler将下载的音频存储到本地

    在当今数字化时代,音频数据的获取和处理变得越来越重要,本文将访问网易云音乐为案例,介绍如何使用JDAudioCrawler这个强大的工具,将音频数据存储下载到本地存储中,需要的可以了解下
    2023-10-10
  • Django框架 querySet功能解析

    Django框架 querySet功能解析

    这篇文章主要介绍了Django框架 querySet功能解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python使用tkinter加载png、jpg等图片

    Python使用tkinter加载png、jpg等图片

    这篇文章主要介绍了Python使用tkinter加载png、jpg等图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python学习之Django的管理界面代码示例

    Python学习之Django的管理界面代码示例

    这篇文章主要介绍了Python学习之Django的管理界面代码示例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02

最新评论