selenium之HTML元素无法定位

本文探讨了在HTML中a标签使用javascript:void(0)及style=display:none的含义与应用场景,解释了这些特性如何影响元素的行为及可见性,并提供了示例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要是记录一些在做自动化过程中,无法定位的一些元素,因为对HTML理解不深,所以遇到的坑需要一一化解,后续遇到的会陆续记录。

 

一、a标签的href属性值等于javascript:void(0)

1.首先解释下javascript:void(0),javascript是网页的脚本语言之一,而void是javascript的操作符,意思就是只执行表达式,但是没有返回值(在C、java等语言中void也是没返回值),更直白的就是点了跟没点是一样的。举例说明一下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试a标签</title>
</head>
<body>
<div>
<a href="javascript:void(0)" id="abc">测试</a>
</div>
</body>
</html>

 

以上代码,用浏览器打开,点击“测试”链接,可以看到页面中不会有任何反应,所以在定位遇到javascript:void(0)时,千万要注意实际操作一下,不要一昧的写代码,却发现一直实现不了操作。当然并不仅仅是javascript:void(0),还有其他:

(1)<a href="javascript:;" id="abc">测试</a>    与javascript:void(0)效果一致

(2)<a href="####" id="abc">测试</a>   几个#无所谓

但是:

为什么说但是呢?因为你在实际操作中,发现a标签使用了javascript:void(0),也会跳转url啊,这是为什么?因为强大的JS脚本,下面来个简单示例:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试a标签</title>
</head>
<body>
<div>
<a href="javascript:void(0);" id="abc">测试</a>
</div>
<script src="jquery.min.js"></script>
<script type="text/javascript">
$("#abc").click(function(){
window.open("http://www.baidu.com","_self")
})
</script>
</body>
</html>

以上示例,主要是a标签使用了javascript:void(0),但是还可以用js来控制点击事件,为什么这么麻烦呢?直接把url写在href属性里就搞定啦,这是因为多种情况下的请求,url会变,所有用js可以拿到不同的url去请求。再次解释一下,虽然这个很简单还要这么啰嗦,主要是为了说明为什么,从根本理解。

 

二、style=display:none

同样的解释一下:

display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到。注意,是说页面上彻底消失,不代表HTML中消失啊,在使用定位的时候,隐藏的元素也是可以找到的,但对元素操作就会抛出异常

SO,在Selenium定位的时候可要注意了,不要看到元素就定位,运行一直报错,然后检查定位没错啊,结果搞得烦死。

举例:

### Selenium 实战教程:元素定位方法与技巧 #### 使用 `find_element()` 和 `find_elements()` 在 Selenium 中,`find_element()` 用于返回单个匹配的元素对象,而 `find_elements()` 返回多个匹配的元素列表。这些函数支持多种定位策略,如 ID、名称、类名、标签名、链接文本、部分链接文本、XPath 及 CSS 选择器[^1]。 #### 定位策略概述 Selenium 支持八种主要的元素定位方式: - **ID**: 最常用且推荐的方式之一,因为其唯一性和高效性。 - **Name** - **Class Name** - **Tag Name** - **Link Text** - **Partial Link Text** - **XPath** - **CSS Selector** 每一种都有各自的适用场景和特点[^4]。 #### 示例代码展示 以下是基于 Python 的简单例子,展示了如何利用不同的定位技术来访问网页上的输入框,并向其中发送字符串 "无涯 接口测试": ```python from selenium import webdriver import time as t driver = webdriver.Chrome() driver.get('http://www.baidu.com') # Using class name to locate the search input field and send keys. driver.find_element_by_class_name('s_ipt').send_keys('无涯 接口测试') t.sleep(3) driver.quit() ``` 这段脚本首先打开了 Chrome 浏览器并导航至百度首页;接着通过指定 HTML 属性中的 `class="s_ipt"` 来找到对应的搜索栏位置,并对其执行键盘输入操作;最后关闭浏览器实例[^3]。 #### 处理 iframe 或 frame 结构内的元素 对于存在于 `<iframe>` 或者 `<frame>` 标签下的子页面里的目标元素,则需先调用 `switch_to.frame()` 方法切换上下文环境才能正常交互。完成之后记得及时恢复至上层文档以便后续动作[^5]: ```python driver.switch_to.frame("outerFrameId") # Switch into outer iFrame by id or index driver.switch_to.frame("innerFrameId") # Further switch inside another nested iFrame if necessary. # Perform actions on elements within this context... driver.switch_to.default_content() # Return back to main document level when done. ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值