【问题标题】:AttributeError: 'dict' object has no attribute 'click' error with find_element_by_css_selector() and click() using Selenium and ChromeDriverAttributeError: 'dict' 对象没有属性'click' 错误与 find_element_by_css_selector() 和 click() 使用 Selenium 和 ChromeDriver
【发布时间】:2022-01-14 14:55:51
【问题描述】:

我想在我的测试页面上使用 click 命令。但我收到以下错误。我是用python写的

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import pandas as pd

url="https://tv.com/home"
options = webdriver.ChromeOptions()
options.binary_location ="C:\Program Files\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome("chromedriver.exe",chrome_options=options)

driver.get(url
driver.maximize_window()
time.sleep(20)
arr=[]
driver.find_element_by_css_selector("._1DRQ8").click()
x=driver.find_element_by_css_selector("._1sZ9q").find_elements_by_tag_name("a")

出现错误:

driver.find_element_by_css_selector("._1DRQ8").click()

AttributeError: 'dict' object has no attribute 'click'

【问题讨论】:

    标签: python selenium google-chrome selenium-webdriver selenium-chromedriver


    【解决方案1】:

    对 selenium 和 chromedriver 的最新更改可能会导致如下错误:

    [AttributeError: 'dict' object has no attribute ...错误....使用Selenium和ChromeDriver]

    修复 AttributeError: 'dict' object has no attribute:

    1. 执行一个步骤来检查结果中是否有此 dict。
    2. 根据字典的值创建 WebElement。

    下面是代码示例:

    def get_web_element_from_dict_if_it_is(driver: WebDriver, element_to_check_for_dict):
    if type(element_to_check_for_dict) is dict:
        first_element_value = list(element_to_check_for_dict.values())[0]
        element_to_check_for_dict = driver.create_web_element(element_id=first_element_value)
    return element_to_check_for_dict
    

    PS:

    • 如果您当前的结果是 dict - 它将根据字典中的值创建一个新元素。
    • 如果它不是字典,您将照常使用此元素。

    这种方法可以与任何使用 selenium 元素的 selenium 方法(查找元素、执行脚本)和任何使用 selenium 的语言(python、java 等)相关

    【讨论】:

      【解决方案2】:

      也许您正试图在元素准备好被点击之前点击它。

      试试这个

      from selenium.webdriver.support.ui import WebDriverWait
      
      elem = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "._1DRQ8")))
      elem.click()
      

      【讨论】:

        【解决方案3】:

        您的代码没有问题。可能您使用的是旧版本的 ChromeDriver 返回错误形状的对象。


        解决方案

        确保:


        tl;博士

        FIND_ELEMENT command return a dict object value

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          • 1970-01-01
          • 2012-06-28
          • 2022-09-29
          • 2022-07-01
          • 2022-12-05
          相关资源
          最近更新 更多