Python 将Selenium按\u名称查找\u元素\u分解为多个阶段

Python 将Selenium按\u名称查找\u元素\u分解为多个阶段,python,selenium,Python,Selenium,我在Python3上使用Selenium,在一个带有滚动提要的网站上按名称查找元素。此提要以某种ajax格式更新。这对ajax来说运行太快,无法加载,并导致过时的元素错误 下面是我的剧本中我感兴趣的部分: for element in driver.find_elements_by_xpath('//span[contains(text(),"foo")]'): print(element.text) 我曾尝试在带有隐式等待的try-except块中运行此序列,但它

我在Python3上使用Selenium,在一个带有滚动提要的网站上按名称查找元素。此提要以某种ajax格式更新。这对ajax来说运行太快,无法加载,并导致过时的元素错误

下面是我的剧本中我感兴趣的部分:

for element in driver.find_elements_by_xpath('//span[contains(text(),"foo")]'):
    print(element.text)
我曾尝试在带有隐式等待的try-except块中运行此序列,但它看起来像driver.find\u elements\u by\u xpath会在任何except块捕获它之前完整地滚动

以下是我尝试过的:

i = 0

def gatherElements():
    for element in driver.find_elements_by_xpath('//span[contains(text(),"foo")]'):
        print(element.text)
            i+=1

while i < 8000:
    try:
        gatherElements()
    
    except:
        driver.implicitly_wait(5)
        gatherElements()

    driver.implicitly_wait(12)
i=0
def gatherElements():
对于驱动程序中的元素。通过xpath('//span[contains(text(),“foo”)]'查找元素:
打印(element.text)
i+=1
当我<8000时:
尝试:
集合元素()
除:
驱动程序。隐式等待(5)
集合元素()
驱动程序。隐式等待(12)

这就是为什么我希望通过xpath将find_元素分解为可管理的块。我会运行x元素,等待,然后运行另一个x元素,直到完成。

所以如果您只想运行10个元素,然后暂停,然后再运行10个元素,等等。。。我想试试这个:

import time

for i in range(8000):
    i += 1   
    print(driver.find_element_by_xpath('//span[contains(text(),"foo")]:nth-of-type(' + i + ')')
    print(element.text)
        if i % 10 == 0:
            time.sleep(5)

可能是我,但当你说
时,它看起来像是driver.find\u elements\u by\u xpath在任何块都捕捉到它之前滚动。我不确定你所说的“滚动完整”是什么意思?没问题。我没料到会这样,但当我运行find_elements_by_xpath时,它实际上会滚动提要并显示下一个元素。在需要重新加载之前,提要一次只显示10个元素。这个脚本很快就完成了这10个步骤。我希望能够找到前10个,等待下几个加载,收集新的,并重复,直到完成。当前进程试图在运行下一行代码之前加载每个元素(包括ajax调用),except块无法捕获任何内容,整个程序提前失败。如果我理解正确,下一批元素会在向下滚动页面后出现吗?如果是这样,有一种方法可以向下滚动,加载所有使用“惰性加载”加载的元素,直到没有。然后,您可以等待15秒,然后立即检索所有内容。这可能是一个更干净的方法。谢谢,我不会想到使用第n种类型。不幸的是,这返回了一个类型错误:
无法将str(非int)连接到str
您知道有什么好的文档可以利用Selenium的CSS选择器吗?我尝试过包含str(I)转换,但现在返回了
。//span[contains(text(),“@”)]:类型(1)的第n个不是有效的xpath表达式