Python/selenium: 如何为一个对象创建一个XPath查询,该对象的X坐标位于另一个对象的X坐标内?

2024-10-01 17:38:11 发布

您现在位置:Python中文网/ 问答频道 /正文

浏览器中显示了一种类型的多个容器对象-每个(称为容器对象)包含另一种类型的多个其他对象(称为包含对象)

但是,任何对象之间都没有层次xpath关系,所包含的对象只是由浏览器基于“x”和“y”坐标在各自的容器对象上呈现

获取这些对象的一种方法是获取每个包含对象的x坐标,并与每个容器对象的x+宽度进行匹配,以确定对应于特定包含对象的容器

这是在下面的代码中显示的(<强> EM >请忽略任何编码错误,只考虑方法EME><强> >:

all_contained = driver.find_elements_by_xpath("//*[@type='contained']")
all_containers = driver.find_elements_by_xpath("//*[@type='container']")
object_info = dict()

ctr1 = 0;
for contained in all_contained:
    ctr1 += 1;
    for container in all_containers:            
        if container.rect['x'] < contained.rect['x'] < container.rect['x'] + container.rect['width']:
           if ctr1 not in object_info:
               object_info[ctr1] = {
                   'name': container.text.split()[0],
                   'container_is': container.text.split()[1], 
                   'contained_objects': list()
               }
           object_info[ctr1]['contained_objects'].append(contained)

这是一段冗长的代码,是否可以一次获取所有容器对象的x坐标,然后在xpath中使用此信息来查找包含的对象-下面的伪代码:

all_containers = driver.find_elements_by_xpath("//*[@type='container']")
object_info = dict()

ctr1 = 0;
for container in all_containers:
    contained_objects = driver.find_elements_by_xpath(
       "//*[@type='contained']
       [container.rect['x'] < location.x < container.rect['width']]") <-- I HAVE NO IDEA HOW TO IMPLEMENT THIS??!!
    ctr1 += 1;
    object_info[ctr1] = {
       'name': container.text.split()[0],
       'container_is': container.text.split()[1], 
       'contained_objects': contained_objects
    }

有没有基于属性范围提取xpath的方法(或者比第一个解决方案中描述的方法更好的方法)


Tags: 对象方法rectinfoobjectsobjectcontainerdriver

热门问题