python+selenium模拟点击时,使用find_element失效后的绝杀!JS定位

本文讲述了开发者在定位网页元素时遇到的困难,通过实例演示如何使用JavaScript的querySelectorAll和getElementById成功找到并操作元素,特别是对于name、class名、xpath和CSS选择器无法定位的情况。

定位元素的时候,不知道大家是否会遇到这种情况:使用了多种方式总是显示不可用。使用的定位方式包括但不仅限于:

driver.find_element_by_name
driver.find_element_by_class_name
driver.find_element_by_xpath
driver.find_element_by_css_secector

结果总是说定位不到,我真的太疑惑了,最后发现JS定位成功解决了我的问题:

search_js = "document.getElementsByName('title')[0].value='selenium';"
search_js2 = "document.querySelectorAll('title')[0].value='selenium';"
button_js = "document.getElementById('title').click();"
button_js2 = "document.getElementsByClassName('title')[0].click()"
driver.execute_script(search_js2)
driver.execute_script(button_js2)

注意:使用以上代码前请记得import json模块才可以使用。
参考作者主页:https://blog.youkuaiyun.com/qq_32897143 感谢!

使用Python + Selenium进行UI自动化测试,以下几种情况适合使用JavaScript定位方式操作元素来完成测试用例: - **常规定位方式失效**:当使用Selenium提供的常规定位方式(如ID、Class Name、XPath等)无法定位到元素,可能是由于元素被动态加载、隐藏或处于iframe中,此可以借助JavaScript定位元素。例如,某些元素在页面加载完成后,通过AJAX动态加载,常规定位方式可能无法及获取到元素,而JavaScript可以直接操作DOM来定位这些元素 [^1][^2][^3]。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com") # 使用JavaScript定位元素 element = driver.execute_script("return document.getElementById('dynamic-element')") ``` - **执行特殊操作**:需要对元素执行一些特殊的操作,而Selenium的API无法直接实现,可使用JavaScript。比如,要修改元素的属性、滚动页面到指定元素位置、触发元素的某些事件等。例如,当需要滚动页面到某个元素位置,可以使用JavaScript的`scrollIntoView`方法 [^1][^2][^3]。 ```python element = driver.find_element_by_id("target-element") # 使用JavaScript滚动到元素位置 driver.execute_script("arguments[0].scrollIntoView();", element) ``` - **处理隐藏元素**:当需要对隐藏元素进行操作Selenium默认无法直接操作隐藏元素,而JavaScript可以绕过这个限制。例如,要获取隐藏元素的文本内容或修改其属性 [^1][^2][^3]。 ```python # 使用JavaScript获取隐藏元素的文本内容 hidden_text = driver.execute_script("return document.getElementById('hidden-element').textContent;") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值