首页 > 解决方案 > Selenium 为不同的选项卡下载相同的文件

问题描述

我正在做一个自动化项目。在那,我正在从不同选项卡下的网页下载报告文件。我在使用 for 循环时一个一个地单击每个选项卡。单击每个报告选项卡的逻辑工作正常。但是对于每次点击,它每次都会下载第一份报告。

例如,总共有 5 个选项卡,这意味着我必须一个一个地单击 5 个选项卡才能下载每个报告。我的逻辑单击 for-loop 下的每个选项卡,但下载的文件只是第一个选项卡中的第一个报告文件。所以,我下载了 5 个报告文件,但都是一样的。

以下是我的功能:

def reports_with_tab_iteration(mstr_id, report_name):
    time.sleep(random.randint(2, 3))
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(random.randint(1, 2))

    table_row = WebDriverWait(driver, 20).until(
        EC.presence_of_all_elements_located((By.XPATH, '//table[@class="mstrmojo-ListBox-table"]/tbody/tr/td'))
    )
    
    old_len = 0

    for td_11 in range(len(table_row)):
        driver.execute_script("location.reload(true);")
        time.sleep(random.randint(20, 25))
        table_row = WebDriverWait(driver, 20).until(
            EC.presence_of_all_elements_located((By.XPATH, '//table[@class="mstrmojo-ListBox-table"]/tbody/tr/td'))
        )
        
        td = table_row[td_11]
        # print(td_)
        
        td.click()

        # driver.execute_script("arguments[0].click();",td)
        time.sleep(random.randint(5, 10))

        """New Block Starts"""
        try:
            drop_down = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(
                (By.XPATH, '//div[@class="mstrmojo-Button  mstrmojo-oivmSprite tbDown"]')))
            time.sleep(10)
            if drop_down != None:
                print("new_len: ", len(drop_down))
                new_len = len(drop_down)
                index = new_len - old_len
                print("index: ", index)
                new_drp_dwn = drop_down[-(index):]
                # print("/"*40)
                # print("Actuall Drop Down List")
                # print(drop_down)
                # print("/"*40)
                print("New Drop Down List")
                print(new_drp_dwn)
                print("new_drop_down: ", len(new_drp_dwn))
                old_len = new_len
                print("old_len: ", old_len)
                time.sleep(5)
                
                driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(
                        EC.presence_of_element_located(
                            (By.XPATH, '//div[@class="mstrmojo-Button  mstrmojo-oivmSprite tbDown"]'))))
                print("single elem clicked")
                time.sleep(random.randint(3, 5))
                driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(
                    EC.presence_of_element_located((By.XPATH, '//td[text() = "Export to Excel"]'))))
                time.sleep(random.randint(5, 10))
                driver.switch_to.window(driver.window_handles[2])
                time.sleep(random.randint(5, 10))
                print("Downloading Complete!!!!!")
                driver.close()
                driver.switch_to.window(driver.window_handles[1])
                time.sleep(random.randint(5, 10))
                
            else:
                print("No drop down")

        except TimeoutException:
            print("no drop down")

我没有得到,我做错了什么。

标签: pythonselenium-webdriverautomation

解决方案


推荐阅读