代码之家  ›  专栏  ›  技术社区  ›  Mirek

在服务器动态生成的情况下,是否可以通过Selenium(Python)从网站下载图像?

  •  0
  • Mirek  · 技术社区  · 1 年前

    我在一个网站上的Web检查器工具图像中发现了这一点(域只是一个例子) https://somesite.com/asd/photo.pl?num=10 它不是网站的一部分,但可能是从服务器动态生成的。
    我想问一下是否可以在python中通过selenium下载它。
    我试过这个,但不起作用。我认为这样做是不可能的,因为我所说的服务器站点。

    from selenium import webdriver
    
    import urllib.request
    import shutil
    import time
    import requests
    
    driver = webdriver.Firefox()
    
    driver.get("https://somesite.com/")
    
    img = driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/a/img')
    img_url = img.get_attribute('src')
    response = requests.get(img_url)
    
    with open("saved_image.jpg", "wb") as file:
        file.write(response.content)
    
    1 回复  |  直到 1 年前
        1
  •  2
  •   NoneSecNetSer    1 年前
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    
    # Setup WebDriver
    driver = webdriver.Firefox()
    driver.get("https://somesite.com/")
    
    # Wait for the image to be loaded
    wait = WebDriverWait(driver, 10)
    img = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[2]/div/div[1]/a/img')))
    
    # Get image URL
    img_url = img.get_attribute('src')
    
    # Download the image using Selenium
    driver.get(img_url)
    time.sleep(2)  # Wait for the image to load
    
    # Save the image
    with open("saved_image.jpg", "wb") as file:
        file.write(driver.find_element(By.TAG_NAME, "img").screenshot_as_png)
    
    # Clean up
    driver.quit()
    

    该脚本使用Selenium导航到图像URL,然后使用Selenium's屏幕截图功能保存图像。它确保在保存之前加载图像,并且不会将Selenium与请求混合,如果图像需要有效的会话或访问特定的cookie,这会很有帮助。