LYLR261002 发表于 2023-4-20 12:35:51

selenium自动化

python selenium.webdriver模块加入js报错
selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read properties of undefined (reading 'click')

isdkz 发表于 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.click();', element)

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

finally:
    driver.quit()

这段代码会等待目标元素加载完成,然后执行JavaScript代码。请确保使用正确的元素选择器。你可以根据需要修改这段代码。

LYLR261002 发表于 2023-4-20 13:07:36

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

里面的元素选择器可以替换成find_element吗?

isdkz 发表于 2023-4-20 13:18:53

LYLR261002 发表于 2023-4-20 13:07
里面的元素选择器可以替换成find_element吗?

如果要显式等待的话就不能换成 find_element

LYLR261002 发表于 2023-4-20 13:28:42

isdkz 发表于 2023-4-20 13:18
如果要显式等待的话就不能换成 find_element

那我要定位的按钮组件时有多个相同的classname,怎么才能精确定位到第三个按钮,用presence_of_all_elements_located么?

isdkz 发表于 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

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

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

finally:
    driver.quit()

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

请注意,如果没有足够的匹配元素,这段代码可能会抛出IndexError。确保你的元素选择器正确,并且页面上有足够的匹配元素。
页: [1]
查看完整版本: selenium自动化