当前位置: 首页 > 知识库问答 >
问题:

通过Selenium选择子css元素无效

司寇书
2023-03-14

在获取元素以单击加号时,代码失败。下面是代码。

    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get("http://localhost:2012")
    #colIdentList = driver.find_element_by_class_name('colIdent')
    for result in driver.find_elements_by_class_name('colIdent'):
        result.click()
        #wait = WebDriverWait(driver, 5)
        for plus in driver.find_elements_by_class_name('collapser'):
            plus[0].click()
            for methodDiv in driver.find_elements_by_class_name('willnotrender'):
                value = methodDiv[0].text

    driver.close()

“collapser”是驻留在多个div和td下的div的类。我正在粘贴该组件的XPATH作为引用。但是XPATH并不总是相同的,而是不同的。我为元素找到了两个XPath。

XPATH:1/html/body/div[3]/div/ul/li2/div2/div[3]/div2/html/body/div[3]/div/ul/li2/div/div[3]/div

共有1个答案

戚成礼
2023-03-14

经过一些搜索和朋友Mahesh Kosuri的一点帮助,我终于完成了代码。我错过了网页有多个框架的事实。因此,selenium无法找到我正在搜索的元素

下面是为我完成任务的代码。

  
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import pandas as pd

    timetook,methodname,dbcalls=[],[],[]
    runnum,sheetname,counter=3,7,0
    driver = webdriver.Chrome()
    driver.get("http://localhost:2012/")

    result in driver.find_elements_by_class_name('colIdent'):
        try:
            result.click()
            counter+=1
            if counter>8:
                driver.execute_script("document.querySelector('body > div.trace-list-area').scrollBy(0,75)")
        except:
            driver.execute_script("document.querySelector('body > div.trace-list-area').scrollBy(0,100)")
            result.click()
        driver.switch_to_frame(driver.find_element_by_id('trace-frame'))
        wait = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR,'body > div.scroll-area > div > ul > li:nth-child(2) > div > div.flex-horizontal > div > button')))
        timetook.append(driver.find_elements_by_css_selector('body > div.heading-trace-panel > div.tracebar-details > div > table > tbody > tr > td:nth-child(2) > div.tracebar-value')[0].text)
        driver.find_elements_by_css_selector('body > div.scroll-area > div > ul > li:nth-child(2) > div > div.flex-horizontal > div > button')[0].click()
        methodname.append(driver.find_elements_by_css_selector('#ui_0_stacks > li.logblock.backdrop-timing.logblock-message > div > div.flex-horizontal > div.prettyprint-container')[0].text)
        try:
            dbcalls.append(driver.find_elements_by_css_selector('body > div.heading-trace-panel > div.tracebar-details > div > table > tbody > tr > td.stackNumbers > a > span')[0].get_attribute('data-badge'))
        except:
            dbcalls.append(0)
    driver.switch_to_default_content()

    df=pd.DataFrame()
    df["TimeTook"] = timetook
    df["methodName"]=methodname
    df["DBCalls"]=dbcalls


    df.to_excel("Timing Report "+str(runnum)+"_"+str(sheetname)+".xlsx")
    driver.close()
 类似资料:
  • 问题内容: 问题: 无法从CSS选择器特定元素中选择。需要验证注册用户是否可以成功更改其密码。我试过了类的不同属性来调用它。当尝试前两个示例时,结果是方法中的异常错误。最后的尝试将调用第一个类实例并重置密码字段(失败)。 尝试过: 目的: 我需要选择共享同一班级的项目。如下所示,该类是共享的。 问题答案: 编辑:因为选择器需要一个,或,但是它们本身都不是。 提供要匹配的类名,并从那里指定要选择的特

  • https://imgur.com/vfhp8n7.png 当我单击B按钮时,整行隐藏 我需要硒来点击B按钮,然后点击下一个B按钮 我想执行,但是数字4352,6820每次都不一样 你有什么想法吗? 编辑

  • 问题内容: 我正在寻找一个选择器,如果它们具有特定的子元素,它将选择所有元素。例如,选择所有带孩子的人。 可能? 问题答案: 如果元素包含特定的子元素,是否可以选择? 不幸的是还没有。 在CSS2和CSS3选择器的规格不允许任何形式的亲本选配。 关于规格变更的注意事项 从现在开始,这是关于此帖子准确性的免责声明。CSS中的父选择器已经讨论了很多年。由于尚未达成共识,因此变化不断发生。我将尝试使此答

  • 问题内容: 是否可以在CSS中选择多个具有某个特定类,id等父的元素?例如: 如果不是,是否有办法选择该元素的所有子元素? 问题答案: 是否可以在CSS中选择多个具有某个特定类,id等父的元素? 当前,不幸的是,并非没有复制整个父选择器并指定所有后代,而是1: 直到选择器3最终确定后,他们才提出了伪类表示法来进行此操作,直到最近,基本实现才开始出现。 简而言之,现在已成为标准的伪类称为。在遥远的将

  • 我试着练习用CSS选择器获取值,我想出了这个(不像预期的那样工作) (我也尝试过) 我对的期望:第三个没有id属性和data-ad-show属性的元素被选中,其值将是所需的值3。

  • 本文向大家介绍jQuery 选择元素的子元素,包括了jQuery 选择元素的子元素的使用技巧和注意事项,需要的朋友参考一下 示例 要选择元素的子代,可以使用children()方法。 更改元素所有子.parent元素的颜色: 该方法接受一个可选selector参数,该参数可用于过滤返回的元素。