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

如何在检查子元素文本后捕获父元素文本

林烨华
2023-03-14
store_block_list  = '//div[@class="amlocator-store-information"]'
anc ='//div[@class="amlocator-store-information"]/parent::div'


driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
wait = WebDriverWait(driver, 30)
storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
full_list = []
address_list = []
for store in storeElement:
    address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
    if address not in address_list:
        address_list.append(address)
        f=driver.find_element_by_xpath(anc)
        full_list.append(f.get_attribute('data-amid'))
driver.quit()
print(full_list)

共有1个答案

尉迟鸿熙
2023-03-14

要捕获数据,您可以运行:

   parent = store.find_element_by_xpath('..')
   grandparent = parent.find_element_by_xpath('..')
   data_amid = grandparent.get_attribute('data-amid')

这将返回数字值

代码的一个问题是您正在搜索数据--在使用find_element_by_xpath的“f”中,这将只返回找到的第一个元素。如果不向上移动到父节点,get_attribute调用将只返回'none',如果确实从f向上移动到父节点,find_element_by_xpath将始终停止在第一个元素处并返回'1'。

    driver.get('https://www.charlottesweb.com/where-to-buy-charlottes-web/partner-locations')
    wait = WebDriverWait(driver, 30)
    storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list)))
    full_list = []
    address_list = []
    for store in storeElement:
        address = driver.execute_script('return arguments[0].childNodes[2].textContent;', store).strip()
        if address not in address_list:
            address_list.append(address)
            parent = store.find_element_by_xpath('..')
            grandparent = parent.find_element_by_xpath('..')
            print(grandparent.get_attribute('data-amid'))
            full_list.append(grandparent.get_attribute('data-amid'))
    driver.quit()
    print(full_list)
 类似资料:
  • 我是一个自动化测试的新手,现在我正在使用selenium C#。我有一个问题,我想从一个元素中获取文本,但是代码: 和我的声明 driver.findElement(by.xpath(“//*[@id='contact list']/div[1]/div/div[1]/div/div/div/div/div/div[2]”)).text; 获取: 有人有办法吗?非常感谢!此处为HTML:

  • 问题内容: 是否可以仅从父元素而不是Selenium中的子元素获取文本? 示例:假设我有以下代码: 用C#(或任何语言),我将有: 但是,链接文本将带有“ Google Link此链接会将您带到Google主页”。 如果不进行大量的字符串操作(例如获取所有子项的文本并从父项的结果文本中减去该文本),是否有办法从父项元素中仅获取文本? 问题答案: 这是一个常见的问题,因为您无法直接访问文本节点- 换

  • 在Selenium中,是否可以仅从父元素而不是其子元素获取文本? 例如:假设我有以下代码: 用C#(或任何语言),我将有: 然而,链接文本将有“谷歌链接”这个链接将带你进入谷歌主页 如果不进行一系列字符串操作(例如获取所有子元素的文本,并从父元素的结果文本中减去这些文本),有没有办法只从父元素获取文本?

  • 问题内容: This is some text 获得“这是一些”并非易事。例如,返回“ This is some text”: 通常,如何获得特定元素的文本而不包含其子元素的文本? (我在下面提供了一个答案,但是如果有人想出一个不太丑陋的解决方案,它将让问题悬而未决)。 问题答案: 这是一个常规解决方案: 传递给函数的元素可以是从方法中获得的东西(即它可以是一个对象)。 或者,如果您没有jQuer

  • (我在下面给出了一个答案,但如果有人能想出一个不那么可怕的解决方案,我会保留这个问题)。

  • 我在一个具有特定ID的div中使用javascript创建了一个SVG元素。我的主要目标是获得SVG图像,让用户下载它。 因此,我的想法可能是绝对错误的,是使用,获取子元素,这是我的SVG,然后执行以获取字符串并将其保存到某个位置。我可以看到元素,我知道它在那里,但当我从vaadin打印容器元素时,它没有任何子元素。 我的情况: 我从内容中得到什么,其中是我的DIV,ID: 我错过了什么? 如果这