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

@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()

使用 `driver.execute_script()` 方法模拟点击一个元素并上传附件,你可以执行以下步骤: 1. 首先,使用 `driver.find_element()` 方法定位到要点击元素。 2. 然后,使用 `driver.execute_script()` 方法执行 JavaScript 代码来模拟点击事件。可以使用 `element.click()` 方法来触发点击事件。 3. 接下来,你可以使用 `driver.find_element()` 方法找到上传文件输入框的元素。 4. 最后,使用 `element.send_keys()` 方法将文件路径作为参数传递给输入框,以实现上传文件的操作。 下面是一个示例代码,演示了如何使用 `driver.execute_script()` 方法点击元素并上传附件: ```python from selenium import webdriver # 创建一个 Chrome 浏览器实例 driver = webdriver.Chrome() # 打开网页 driver.get("https://www.example.com") # 定义 JavaScript 代码点击上传按钮 click_script = """ var element = document.getElementById('uploadButton'); element.click(); """ # 执行 JavaScript 代码点击上传按钮 driver.execute_script(click_script) # 找到文件上传输入框 file_input = driver.find_element("xpath", "//input[@type='file']") # 上传文件 file_input.send_keys("/path/to/file.txt") # 关闭浏览器实例 driver.quit() ``` 在上述示例代码中,我们首先创建了一个 Chrome 浏览器实例,并打开了一个网页。 然后,我们使用 `driver.execute_script()` 方法执行 JavaScript 代码来模拟点击上传按钮。该代码找到 ID 为 `uploadButton` 的元素,并调用 `click()` 方法模拟点击事件。 接下来,我们使用 `driver.find_element()` 方法找到文件上传输入框的元素。这里使用了 XPath 定位方式,你可以根据实际情况选择适合的定位方式。 最后,我们使用 `send_keys()` 方法将文件路径传递给文件上传输入框,实现文件上传操作。 请确保你已经正确安装了 Selenium 库,并根据实际情况修改代码中的网页 URL、元素定位方式和文件路径。 如果你有任何其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值