鱼C论坛

 找回密码
 立即注册
查看: 2056|回复: 5

selenium自动化

[复制链接]
发表于 2023-4-20 12:35:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python selenium.webdriver模块加入js报错
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read properties of undefined (reading 'click')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-20 12:38:01 | 显示全部楼层
这个报错提示你在执行JavaScript代码时发生了错误。错误原因是你试图访问一个未定义的对象的属性(在这个例子中是'click'属性)。要解决这个问题,需要确保在执行JavaScript代码之前,相关的对象已经被定义。

以下是一些可能的解决方案:

  • 确保你正在查找的元素存在于页面中。
  • 确保在尝试执行JavaScript之前,页面已完全加载。
  • 确保你的元素选择器正确。


示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://example.com')  # 请替换为你的目标网址

try:
    # 等待元素加载
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'your_element_id'))  # 请替换为你的元素选择器
    )

    # 执行JavaScript代码
    driver.execute_script('arguments[0].click();', element)

except Exception as e:
    print(f"An error occurred: {e}")

finally:
    driver.quit()

这段代码会等待目标元素加载完成,然后执行JavaScript代码。请确保使用正确的元素选择器。你可以根据需要修改这段代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 13:07:36 | 显示全部楼层
isdkz 发表于 2023-4-20 12:38
这个报错提示你在执行JavaScript代码时发生了错误。错误原因是你试图访问一个未定义的对象的属性(在这个例 ...

里面的元素选择器可以替换成find_element吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 13:18:53 | 显示全部楼层
LYLR261002 发表于 2023-4-20 13:07
里面的元素选择器可以替换成find_element吗?

如果要显式等待的话就不能换成 find_element
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 13:28:42 | 显示全部楼层
isdkz 发表于 2023-4-20 13:18
如果要显式等待的话就不能换成 find_element

那我要定位的按钮组件时有多个相同的classname,怎么才能精确定位到第三个按钮,用presence_of_all_elements_located么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 13:31:40 | 显示全部楼层
LYLR261002 发表于 2023-4-20 13:28
那我要定位的按钮组件时有多个相同的classname,怎么才能精确定位到第三个按钮,用presence_of_all_eleme ...

你可以使用presence_of_all_elements_located来等待所有匹配的元素加载完成。

然后,你可以通过索引来精确定位到第三个按钮。以下是一个示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://example.com')  # 请替换为你的目标网址

try:
    # 等待所有匹配的元素加载
    elements = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CLASS_NAME, 'your_class_name'))  # 请替换为你的元素选择器
    )

    # 精确定位到第三个按钮(索引为2)
    target_element = elements[2]

    # 执行JavaScript代码
    driver.execute_script('arguments[0].click();', target_element)

except Exception as e:
    print(f"An error occurred: {e}")

finally:
    driver.quit()

这段代码会等待所有匹配的元素加载完成,然后根据索引(从0开始)精确定位到第三个按钮。

请注意,如果没有足够的匹配元素,这段代码可能会抛出IndexError。确保你的元素选择器正确,并且页面上有足够的匹配元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表