python bs4 selenium 查找a href=javascript:();的实际点击事件和url
在使用 BeautifulSoup 和 Selenium 时,处理 href="javascript:;" 的链接需要一些额外的步骤,因为这些链接不直接指向一个 URL,而是通过 JavaScript 代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等。
以下是如何使用 Selenium 来查找和处理这些链接的步骤:
-
启动 WebDriver:首先,你需要启动一个 WebDriver(如 ChromeDriver)。
-
加载网页:使用 WebDriver 加载你想要抓取的网页。
-
查找链接:使用 Selenium 的方法查找所有
href="javascript:;"的链接。 -
获取和执行点击事件:虽然 Selenium 不直接提供获取 JavaScript 事件处理程序的方法,但你可以模拟点击这些链接,并观察网页的变化。这通常涉及到监听网络请求或使用浏览器的开发者工具来调试。
-
获取 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 浏览器版本兼容。
相关文章:
python bs4 selenium 查找a href=javascript:();的实际点击事件和url
在使用 BeautifulSoup 和 Selenium 时,处理 href"javascript:;" 的链接需要一些额外的步骤,因为这些链接不直接指向一个 URL,而是通过 JavaScript 代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等…...
三 BH1750 光感驱动调试1
一 扫描设备 查看手册 BH1750 光感模块 寄存器地址为 0x23 官方手册 : http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf su 然后用 i2cdetect 扫描设备: 拨,插 对比, 探测设备挂载在 /dev/i2c-5 上, 从设备地址为 0x23 二 …...
UE材质节点Fresnel
Fresnel节点 ExponentIn 控制边缘透明度 BaseReflectFractionIn 控制中心透明度...
linux的大内核锁与顺序锁
大内核锁 Linux大内核锁(Big Kernel Lock,BKL)是Linux内核中的一种锁机制,用于保护内核资源,以下是关于它的详细介绍: 概念与作用 大内核锁是一种全局的互斥锁,在同一时刻只允许一个进程访问…...
用户注册模块用户校验(头条项目-05)
1 用户注册后端逻辑 1.1 接收参数 username request.POST.get(username) password request.POST.get(password) phone request.POST.get(phone) 1.2 校验参数 前端校验过的后端也要校验,后端的校验和前端的校验是⼀致的 # 判断参数是否⻬全 # 判断⽤户名是否…...
面向对象的基本概念
本篇,来介绍面向对象的基本概念。 1 面向过程与面向对象 面向过程与面向对象,是两种不同的编程思想。 1.1 面向过程 面向过程的思路,是按照问题的解决步骤,将程序分解为一个个具体的函数或过程,然后依次调用这些函数来实现程序的功能。 面向对象的程序设计,程序的执行…...
深度学习每周学习总结R4(LSTM-实现糖尿病探索与预测)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客R6中的内容,为了便于自己整理总结起名为R4🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据预处理3. 数…...
如何使用 PHP 操作亚马逊 S3 对象云存储
以下是使用PHP与亚马逊S3对象云存储(也有其他支持S3协议的云存储服务,原理类似)进行交互的常见文档接口使用示例,涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。 ### 前提条件 1. 首先,你需要获取…...
26_Redis RDB持久化
从这个模块开始带领大家来学习Redis分布式缓存的相关内容,主要学习目标见下: 数据丢失问题:实现Redis数据持久化(RDB和AOF)并发能力问题:搭建Redis主从集群,实现读写分离故障恢复问题:利用Redis哨兵模式,实现健康检测和自动恢复存储能力问题:搭建Redis分片集群,利用…...
标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本
还在为用什么gradle版本烦恼吗?编译不过IDE不开始下载第三方库吗?是时候匹配下你的gradle编译版本了: 1.Gradle 各版本支持的 JDK 版本范围如下: Gradle 版本最低支持 JDK最高支持 JDK7.0 - 7.6JDK 8JDK 178.0 - 8.2JDK 11JDK 1…...
太速科技-628-基于VU3P的双路100G光纤加速计算卡
基于VU3P的双路100G光纤加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm VU3P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x16智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…...
潜力巨大但道路曲折的量子计算
近一年来,由于工作的原因参观访问了一些量子产业园,接触了量子加密计算机、量子云计算等非常炫酷的概念性产品,这与自己一直认为的“量子技术仍然处于实验室研究阶段”的基本判断与认知产生了强烈的冲突,一刹那间,心中…...
LabVIEW驱动电机实现样品自动搜索
利用LabVIEW控制电机驱动相机在XY平面上进行扫描,以检测样品位置。样品最初可能位于相机视野范围之外,需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点: 高效搜索:能够快速确定样品位置,缩短…...
React Native Hooks开发指南
一、什么是Hooks Hooks 是 React 16.8 的新增特性。在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 是一种在函数式组件中使用有状态函数的方法。 二、类组件 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 三、常用…...
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代,智能聊天助手已然化身成为提升用户体验的关键利器,全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮,我毅然投身于极具挑战性…...
ubuntu22.04 gcc,g++从10.5切换到低版本9.5
一、安装gcc-9.5 mkdir gcc cd gcc sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends gcc-9 | grep -v i386 | grep "^\w") sudo dpkg -i *.deb sudo…...
在 WSL 中使用 Jupyter Notebook 的 TensorBoard 启动问题与解决方法
在 WSL(Windows Subsystem for Linux)环境中,通过 Jupyter Notebook 使用 %tensorboard --logdir outputs有时会出现 “Timed out waiting for TensorBoard to start” 错误。常见原因通常是先前的 TensorBoard 进程尚未结束,占用…...
Spring Boot 2 学习全攻略
Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域,Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程,让开发者能够更加专注于业务逻辑的实现&am…...
海豚调度DolphinScheduler-3.1.9配置windows本地开发环境
源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包,并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…...
【机器学习:十九、反向传播】
1. 计算图和导数 计算图的概念 计算图(Computation Graph)是一种有向无环图,用于表示数学表达式中的计算过程。每个节点表示一个操作或变量,每条边表示操作的依赖关系。通过计算图,可以轻松理解和实现反向传播。 计算…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
