python bs4 selenium 查找a href=javascript:();的实际点击事件和url

在使用 BeautifulSoup 和 Selenium 时,处理 href="javascript:;" 的链接需要一些额外的步骤,因为这些链接不直接指向一个 URL,而是通过 JavaScript 代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等。

以下是如何使用 Selenium 来查找和处理这些链接的步骤:

  1. 启动 WebDriver:首先,你需要启动一个 WebDriver(如 ChromeDriver)。

  2. 加载网页:使用 WebDriver 加载你想要抓取的网页。

  3. 查找链接:使用 Selenium 的方法查找所有 href="javascript:;" 的链接。

  4. 获取和执行点击事件:虽然 Selenium 不直接提供获取 JavaScript 事件处理程序的方法,但你可以模拟点击这些链接,并观察网页的变化。这通常涉及到监听网络请求或使用浏览器的开发者工具来调试。

  5. 获取 URL:如果点击后页面导航到了新的 URL,你可以通过 WebDriver 的当前 URL 属性来获取新页面的 URL。

以下是一个示例代码,演示了如何使用 Selenium 来查找和处理这些链接:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time# 设置 Chrome 选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920x1080")# 启动 ChromeDriver
service = Service('/path/to/chromedriver')  # 替换为你的 chromedriver 路径
driver = webdriver.Chrome(service=service, options=chrome_options)try:# 加载网页driver.get('https://example.com')  # 替换为你要抓取的网页 URL# 等待页面加载完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))# 查找所有 href="javascript:;" 的链接links = driver.find_elements(By.CSS_SELECTOR, 'a[href="javascript:;"]')for link in links:print(f"Found link with text: {link.text}")# 执行点击事件前可以记录当前 URLcurrent_url = driver.current_urlprint(f"Current URL before click: {current_url}")# 模拟点击链接link.click()# 等待页面可能的导航或加载time.sleep(2)  # 这里使用 sleep 作为简单的等待,实际中应该使用更智能的等待条件# 获取点击后的 URLnew_url = driver.current_urlprint(f"URL after click: {new_url}")# 如果需要,可以在这里添加更多的逻辑来处理点击后的页面内容# 重置到初始页面(如果需要)driver.refresh()  # 或者使用 driver.get(current_url) 来重新加载原始页面finally:# 关闭 WebDriverdriver.quit()

注意

  • 上述代码中的 time.sleep(2) 是一个简单的等待,用于等待页面可能的导航或加载。在实际应用中,你应该使用更智能的等待条件,如 WebDriverWait
  • 如果点击链接后没有页面导航,而是触发了模态窗口或动态内容更新,你可能需要使用其他技术(如检查 DOM 变化、监听网络请求等)来捕获这些变化。
  • 确保你有正确的 chromedriver 路径,并且它与你的 Chrome 浏览器版本兼容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day07_Spark SQL

文章目录 day07_Spark SQL课程笔记一、今日课程内容二、Spark SQL函数定义(掌握)1、窗口函数2、自定义函数背景2.1 回顾函数分类标准:SQL最开始是_内置函数&自定义函数_两种 2.2 自定义函数背景 3、Spark原生自定义UDF函数3.1 自定义函数流程&#x…

Laravel 中 Cache::remember 的基本用途

在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取&#xf…

如何解决HTML和CSS相关的问题,什么情况下会导致元素被遮挡?

在开发过程中,HTML 和 CSS 中的元素遮挡问题通常是由于布局、定位、层级等因素导致的。在使用 Vue.js 时,这些问题依然常见,尤其是涉及到动态渲染、条件渲染和组件嵌套的场景。以下是一些常见的导致元素被遮挡的原因,并通过 Vue.j…

Hadoop3.x 万字解析,从入门到剖析源码

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

Java 实现 Elasticsearch 查询当前索引全部数据

Java 实现 Elasticsearch 查询当前索引全部数据 需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后 需求背景 通常情况下,Elasticsearch 为了提高查询效率,对于不指定分页查询条数的查询语句,默认会返回10条数据。那么这就会有…

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中,我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话,请参考如下的链接来进行安装。 如何在 Linux&#xff0…

C#学习笔记 --- 简单应用

1.operator 运算符重载:使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类: 同名方法写在不同位置,可以当成一个类使用。 3.索引器:使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

【Flink】Flink内存管理

Flink内存整体结构图: JobManager内存管理 JVM 进程总内存(Total Process Memory)Flink总内存(Total Flink Memory):JVM进程总内存减去JVM Metaspace(元空间)和JVM Overhead(运行时开销)上图解释: JVM进程总内存为2G;JVM运行时开销(JVM Overh…

MYSQL8创建新用户报错:You have an error in your SQL syntax;check...

本文所用——MYSQL版本:8.0.25 baidu都是直接创建新用户并赋权,如下: GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION;但是我用的MYSQL版本它就不行,会报错! 经查阅资料发现——MY…

力扣经典练习题之198.打家劫舍

今天继续给大家分享一道力扣的做题心得今天这道题目是198.打家劫舍,这是一道非常经典的问题,在动态规划中经常考到这类问题,题目如下: 题目链接:198.打家劫舍 1,题目分析 首先此题就是给我们了一个数组,代表可以偷的房屋中的对应的金额,我们是一个小偷,一次可以偷很多…

万物互联的背后:MCU嵌入式硬件的奇幻之旅

文章背景:嵌入式硬件是什么? 你可能听说过嵌入式硬件,却总觉得它像是实验室里神秘的玩意儿。其实,它就在我们身边——从你手上的智能手表到车里的倒车雷达,无一不是嵌入式硬件的“杰作”。想象一块小小的电路板&#x…

【数据分析】一、初探 Numpy

目录 前言1. 一维 array 的生成2. 一维 array 的基本操作2.1. 查看属性2.2. 花式索引2.3. 条件筛查2.4. 数据统计 3. n 维 array 的生成4. n 维 array 的基本操作4.1. 查看属性4.2. 查询和切片4.3. 花式索引4.4. 矩阵 前言 Numpy是Python的常用开源数值计算扩展库,用…

2024年开发语言热度排名

随着技术的不断发展和变化,编程语言的热度也在不断演变。2024年即将到来,我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素,包括行业需求、社区支持、流行度以及新兴趋势,对2024年的开发语言热度进行排名和分析…

LabVIEW数据库管理系统

LabVIEW数据库管理系统(DBMS)是一种集成了数据库技术与数据采集、控制系统的解决方案。通过LabVIEW的强大图形化编程环境,结合数据库的高效数据存储与管理能力,开发人员可以实现高效的数据交互、存储、查询、更新和报告生成。LabV…

SQL语言的数据结构

SQL语言的数据结构及其应用 引言 SQL(Structured Query Language)是一种用于关系数据库管理系统(RDBMS)的标准语言,其核心功能是对存储在关系数据库中的数据进行查询、插入、更新和删除等操作。理解SQL语言中使用的数…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合;它是通往优化个人计算体验的大门。通过它,用户可以轻松调整从外观到性能的各种参数,确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备,还是简单地改变桌…

Http 响应状态码 前后端联调

http 响应状态码 :是服务器在处理HTTP请求时返回的状态信息,用于表示请求的处理结果 1xx : 信息性状态码 100 Continue: 服务器已收到请求头部,客户端应继续发送请求体。 101 Switching Protocols : 切换协议。服务器已理解客户端的请求&a…

【文件锁】多进程线程安全访问文件demo

组合文件锁共享锁,并RAII 化,保证文件的跨进程线程读写安全。 demo模拟使用多个进程,每个进程包含多个线程对文件进行读写测试。 代码调用开源json库,需要下载到调试机器,编译时手动指定: g -stdc17 -pthr…

SVG图表

1、时序图 英文 #mermaid-svg-OyLuBTPnpbW9XDOB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OyLuBTPnpbW9XDOB .error-icon{fill:#552222;}#mermaid-svg-OyLuBTPnpbW9XDOB .error-text{fill:#552222;stroke:#55…

python 轮廓 获取环形区域

目录 效果图: 代码: 效果图: 代码: import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…