解决Selenium中无法点击元素,Selemium使用JS代码 driver.execute_script点击元素

2023-09-22 11:09:39

@FindBy(how = How.XPATH, using = "//*[text()='A1. Approved']")
private WebElement Approved;

driver.execute_script("arguments[0].click();",Approved)


这句话的意思是使用 JavaScript 在浏览器中执行一个点击操作,将页面元素 "supportUser" 点击。

具体来说,"driver.execute_script" 是调用浏览器驱动程序 (driver) 的一个方法,它可以用来在浏览器中执行 JavaScript 代码。"arguments[0].click()" 是一段 JavaScript 代码,它表示调用第一个参数 (即 "supportUser") 的 "click" 方法,这样就可以在浏览器中对这个元素执行点击操作了。

总的来说,这句话的作用就是通过浏览器驱动程序自动化地执行浏览器中的点击操作。

如果代码报错:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument

这可能是由于元素的交互方式或页面的特殊设计导致的。为了解决这个问题,
我们可以尝试以下三种方案:模拟鼠标操作、模拟键盘操作和通过JavaScript操作。

1. 模拟鼠标操作

当无法通过click方法点击元素时,我们可以通过Selenium的ActionChains类来模拟鼠标操作,

操作步骤:
# 1.导入ActionChinas类
from selenium.webdriver import ActionChains
# 2.实例化ActionChinas对象
actions = ActionChains(driver)
# 3.执行鼠标操作,如点击元素
actions.click(ele).perform()

代码优化

import time
from selenium import webdriver
from pywinauto.keyboard import send_keys
# 1.导入ActionChinas类
from selenium.webdriver import ActionChains
try:
    dr = webdriver.Chrome()
    dr.get("https://www.baidu.com")
    dr.implicitly_wait(5)
    dr.find_element_by_xpath('//span[@class="soutu-btn"]').click()
    ele = dr.find_element_by_xpath('//div[@class="upload-wrap"]/input[@type="file"]')
    # 2.实例化ActionChinas对象
    actions = ActionChains(dr)
    # 3.执行鼠标操作,如点击元素
    actions.click(ele).perform()
    time.sleep(3)
    send_keys(keys=r'D:\api_test.jpg')
    send_keys(keys='{ENTER}')
    time.sleep(30)
except Exception as e:
    raise e
finally:
    dr.quit()
    
2. 模拟键盘操作

如果元素无法通过鼠标点击,我们可以尝试使用键盘操作来触发相应的事件。具体步骤如下:

导包

from selenium.webdriver.common.keys import Keys
在元素发送特定的键盘按键

element.send_keys(Keys.ENTER)# 模拟回车键

3. 通过js操作


如果无法通过鼠标和键盘操作来点击元素,我们可以尝试使用JavaScript来直接操作页面元素。具体步骤如下:

使用execute_script方法来执行js代码

driver.execute_script("arguments[0].click();", element)
百度搜图代码优化

import time
from selenium import webdriver
from pywinauto.keyboard import send_keys
# 1.导入ActionChinas类
from selenium.webdriver import ActionChains
try:
    dr = webdriver.Chrome()
    dr.get("https://www.baidu.com")
    dr.implicitly_wait(5)
    dr.find_element_by_xpath('//span[@class="soutu-btn"]').click()
    ele = dr.find_element_by_xpath('//div[@class="upload-wrap"]/input[@type="file"]')
    # #使用execte_script来来点击。因为无法通过click()点击
    dr.execute_script("arguments[0].click();",ele)
    actions.click(ele).perform()
    time.sleep(3)
    send_keys(keys=r'D:\api_test.jpg')
    send_keys(keys='{ENTER}')
    time.sleep(30)
except Exception as e:
    raise e
finally:
    dr.quit()

更多推荐

如何使用远程桌面软件进行远程工作

远程工作提供了更大的灵活性和自由度,使得可以在任何地点工作。而要实现高效的远程工作,一个关键的工具就是远程桌面软件。本文将详细介绍如何使用远程桌面软件进行远程工作,以帮助读者提高工作效率。一、了解远程桌面软件的基本原理远程桌面软件是一种通过网络连接,将本地计算机的桌面映射到远程计算机上的工具。它允许用户在远程计算机上操

Cesium 问题:二三维切换矩形区域展示不够完整

文章目录问题分析问题设置影响图层覆盖范围时,出现三维和二维切换后展示不够完整的情况,Cesium.Rectangle.fromDegrees(-180,-90,180,90)创建的矩形区域,按理说是已经设置了全覆盖,但切换二维后并不全覆盖例如三维下切换到二维分析Cesium.Rectangle.fromDegrees(

资讯| 工信部拟筹建元宇宙标准化工作组;《权游》作者起诉OpenAI

元宇宙赛道工信部:优先开展“元宇宙+工业制造”等行业应用标准研制9月18日,工业和信息化部科技司就《工业和信息化部元宇宙标准化工作组筹建方案(征求意见稿)》(以下简称《方案》)公开征求意见。工业和信息化部元宇宙标准化工作组工作范围包括五个方面:一是研究分析元宇宙领域标准化需求方向,建设和维护元宇宙行业标准体系,提出元宇

leetcode 2602. 使数组元素全部相等的最少操作次数

给你一个正整数数组nums。同时给你一个长度为m的整数数组queries。第i个查询中,你需要将nums中所有元素变成queries[i]。你可以执行以下操作任意次:将数组里一个元素增大或者减小1。请你返回一个长度为m的数组answer,其中answer[i]是将nums中所有元素变成queries[i]的最少操作次数

多线程详解(上)

文章目录一、线程的概念1)线程是什么2)为甚要有线程(1)“并发编程”成为“刚需”(2)在并发编程中,线程比进程更轻量.3)线程和进程的区别二、Thread的使用1)线程的创建继承Thread类实现Runnable接口继承Thread类(使用匿名内部类)实现Runnable接口(使用匿名内部类)使用lambda2)Th

【探索C++】string类详解

(꒪ꇴ꒪),Hello我是祐言QAQ我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误,请在评论区指正,感谢🙏在C++中,字符串处理是非常重要

Linux 文件、目录和用户权限管理指南

文章目录1.用户和组管理引言创建用户删除用户更改用户密码修改用户属性创建组删除组将用户添加到组将用户从组中移除2.文件和目录权限管理引言文件权限概述更改文件权限更改文件所有者和所属组更改目录权限列出文件和目录权限使用特殊权限文件和目录权限的案例分析继承父目录权限特殊权限的使用案例ACL(访问控制列表)umask注意事项

双网卡主机内网外网网关冲突问题探索(策略路由、网络命名空间)(内外网双网卡时,通常不需要在内网网卡上设置默认网关)

文章目录问题背景内外网双网卡时,通常不需要在内网网卡上设置默认网关1.网络冲突2.性能影响解决方法1.默认网关的作用2.只设置一个默认网关3.内网通信4.结论参考文章问题背景我们有一台windowsserver2012服务器,配置了双网卡,一个网卡配置外网,一个网卡配置内网,当我们将外网网络配置外网网关,内网网络配置内

uvm源码解读-sequence,sequencer,driver三者之间的握手关系1

1.startitem1.start_item();sequencer.wait_for_grant(prior);this.pre_do(1);需要指出,这里明确说明了wait_for_grant和send_request之间不能有任何延迟,所以在mid_do这个任务里千万不能有任何延迟。taskuvm_sequen

Spring AOP使用

SpringAOP是什么?AOP(面向切面编程):将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;在SpringAOP中,切面由切点(P

【2023集创赛】IEEE杯二等奖作品:高性能亳米波倍频程压控振荡器设计

本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)IEEE杯二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!团队介绍参赛单位:南京邮电大学队伍名称:顺芯如意指导老师:谢祖帅,王子轩参赛队员:张文旭,汤金圣,秦

热文推荐