提问人:Jay Cheng 提问时间:11/15/2023 最后编辑:Jay Cheng 更新时间:11/16/2023 访问量:40
如何使用 Selenium Python 循环并单击所有图标以下载文件
How to loop and click all icons to download files with Selenium Python
问:
2023 年 11 月 15 日更新:
你好
在我修改代码后,能够通过在循环结束时重新查找pdf_links来解决 pdf 下载问题,如下所示:
pdf_links = driver.find_elements(By.XPATH,'//div[@title="Download as PDF"]')
for i in range(len(pdf_links)):
# print(pdf_links[i])
pdf_links[i].click()
select_all_box = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,'//input[@controlid="selectAll"]/following-sibling::span')))
select_all_box.click()
submit_select_button = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,'//button[@label="Submit"]'))).click()
download_button = WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,'//button[@label="Download"]'))).click()
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH,'//div[@title="Download as PDF"]')))
pdf_links = driver.find_elements(By.XPATH,'//div[@title="Download as PDF"]')
但是,关于 excel 下载的另一个问题是,代码在 time.sleep() 中运行正常,但在 WebDriverWait 中不能运行
WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH,'//div[@title="Download as Excel"]')))
excel_links = driver.find_elements(By.XPATH,'//div[@title="Download as Excel"]')
for i in range(len(excel_links)):
print(excel_links[i])
excel_links[i].click()
time.sleep(3)
# WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,'//div[@title="Download as Excel"]')))
excel_links = driver.find_elements(By.XPATH,'//div[@title="Download as Excel"]')
当我使用 WebdriverWait 行而不是 time.sleep() 时,它会给我带来以下错误:
您的意见将有所帮助。
====================================================================
嗨,我正在尝试循环并单击所有图标以下载 pdf/excel 文件。它是一个内部网站,所以我所能提供的只是带有html代码的屏幕截图。
在过去的 3 天里,我每天花 3 到 4 个小时,但还没有取得任何成功。您的建议将不胜感激。
基本上每行有 2 个图标,一个用于 pdf,另一个用于 excel,每页有 50 行。
pdf 的 DOM 如下:
单击pdf图标时,弹出窗口如下
使用以下 DOM:
然后我会选择所有然后提交以带来下载按钮
到目前为止,我下载pdf的代码如下:
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH,'//div[@title="Download as PDF"]')))
pdf_links = driver.find_elements(By.XPATH,'//div[@title="Download as PDF"]')
for pdf in pdf_links:
pdf.click()
select_all_box = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//span[@class="_checkmark_17ala_27"]')))
select_all_box.click()
submit_select_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//button[@label="Submit"]'))).click()
download_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,'//button[@label="Download"]'))).click()
time.sleep(3)
当我运行代码时,它只下载第一个pdf文件,然后向我抛出一个“NoSuchElementException”
下载 excel 操作相对容易,因为一旦单击图标,excel 就会自动下载。
WebDriverWait(driver,3).until(EC.element_to_be_clickable((By.XPATH,'//div[@title="Download as Excel"]')))
excel_links = driver.find_elements(By.XPATH,'//div[@title="Download as Excel"]')
for excel in excel_links:
excel.click()
time.sleep(5)
与pdf的代码类似,它只在网页中下载了第一个excel,并给了我一个“NoSuchElementException”:
答: 暂无答案
评论