Python selenium webriver没有给出任何错误就错过了元素

Python selenium webriver没有给出任何错误就错过了元素,python,selenium,selenium-webdriver,web-scraping,Python,Selenium,Selenium Webdriver,Web Scraping,我一直在使用selenium ChromeDriver解析一些信息。我通过XPath找到了我需要的元素,将它们保存到列表中,然后编写了一个for循环来单击每个元素。当我有少量元素(>30)时,它工作得很好,但现在我面临一个问题,我的列表长度比网页上的实际元素数量短(比如112中的30个,或者210中的45个)。但所有这些元素都具有我最初定位的相同XPath # login function def login(email,password): driver.get('https://cr

我一直在使用selenium ChromeDriver解析一些信息。我通过XPath找到了我需要的元素,将它们保存到列表中,然后编写了一个for循环来单击每个元素。当我有少量元素(>30)时,它工作得很好,但现在我面临一个问题,我的列表长度比网页上的实际元素数量短(比如112中的30个,或者210中的45个)。但所有这些元素都具有我最初定位的相同XPath

# login function
def login(email,password):
    driver.get('https://crm.tender-win.ru/account/logon')
    driver.find_element_by_id('email').send_keys(email)
    driver.find_element_by_id('password').send_keys(password)
    driver.find_element_by_id('btnLogin').click()

df = []
login('somelogin','somepassword')
driver.get('https://crm.tender-win.ru/tenders/new')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'MyTenderMenuTabsInfo')))
tenders = [driver.find_elements_by_xpath("//div[@class='panel card ']") 
           or driver.find_elements_by_xpath("//div[@class='panel card new']")][0]

for tender in tenders:
    tender.click()
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'tenderCurrencyCode')))
    data = driver \
        .find_element_by_xpath('//*[@id="infoScroll"]/div/div[3]/div[2]/table') \
        .get_attribute('outerHTML')
    
    df1 = pd.read_html(data)
    df.append(df1)
    print(df)
附言

我解决了这个问题,将for循环转换为函数并使用它,直到我的elemenet列表为空

def clicker(tenders=None):
    for tender in tenders:
        tender.click()
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'tenderCurrencyCode')))
        data = driver \
            .find_element_by_xpath('//*[@id="infoScroll"]/div/div[3]/div[2]/table') \
            .get_attribute('outerHTML')
        df1 = pd.read_html(data)
        df.append(df1)
        print(df)
def scrape():
    tenders = [driver.find_elements_by_xpath("//div[@class='panel card ']")
          or driver.find_elements_by_xpath("//div[@class='panel card new']")][0]
    while len(tenders) > 0:
        clicker(tenders)
        tenders = [driver.find_elements_by_xpath("//div[@class='panel card ']") 
                   or driver.find_elements_by_xpath("//div[@class='panel card new']")][0]

如果未找到任何元素,则
投标
列表将为空。您的代码将退出。但我的列表不是空的。当元素数量较少时,我能够找到所有元素,但当元素数量较大时,我的列表会找到四分之一的元素。所有元素都有XPath
//div[@class='panel card']
//div[@class='panel card new]
。所以理论上我应该能找到所有的