如何每六分钟从网站下载一张图像?

我正在开发一个机器学习项目,需要大量图片作为数据集来训练我的程序。这是我到目前为止所拥有的:

driver.get('https://its.txdot.gov/ITS_WEB/FrontEnd/default.html?r=SAT&p=San%20Antonio&t=cctv')

time.sleep(5) #to let the site load

driver.find_element_by_id('LP-1604').click() #to get to the 1604 tab

time.sleep(5) #to let the site load

pic = driver.find_element_by_id('LP 1604 at Kyle Seale Pkwy__SAT')

action = ActionChains(driver)

action.context_click(pic)

右键单击时通常会弹出的下拉菜单不显示。我觉得必须有一种比右键单击更好的方法来做到这一点。我知道如何将其包装在每六分钟执行一次的循环中,因此我不需要那里的帮助。这只是下载图像部分。我遇到的问题之一是所有图像都在同一个 url 下,并且大多数示例都使用 url。任何的意见都将会有帮助。



慕妹3146593
浏览 100回答 2
2回答

BIG阳

我认为它可以帮助您将图像保存在电脑中:from PIL import Imagedef save_image_on_disk(driver, element, path):    location = element.location    size = element.size    # saves screenshot of entire page    driver.save_screenshot(path)    # uses PIL library to open image in memory    image = Image.open(path)    left = location['x']    top = location['y'] + 0    right = location['x'] + size['width']    bottom = location['y'] + size['height'] + 0    image = image.crop((left, top, right, bottom))  # defines crop points    image = image.convert('RGB')    image.save(path, 'png')  # saves new cropped imagedef your_main_method():    some_element_img = driver.find_element_by_xpath('//*[@id="id-of-image"]')    save_image_on_disk(driver, some_element_img, 'my-image.png')关于你应该使用 time.sleep(6*60) 的时间

慕田峪9158850

图像数据位于 currentSnap 元素的 src 属性中。它以 Base64 编码,因此您需要捕获它并解码它。然后使用 PIL,您可以对图像执行任何您喜欢的操作。您还可以使用 selenium 的内置等待函数而不是硬编码睡眠。在这种情况下,有时即使在图像元素加载之后也会加载图像,因此代码中仍然有一个额外的短暂睡眠以允许其加载。from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom PIL import Imagefrom io import BytesIOimport base64import re# Max time to wait for page to loadtimeout=10driver = webdriver.Chrome()driver.get('https://its.txdot.gov/ITS_WEB/FrontEnd/default.html?r=SAT&p=San%20Antonio&t=cctv')# Wait for element to load before clickingelement_present = EC.presence_of_element_located((By.ID, 'LP-1604'))WebDriverWait(driver, timeout).until(element_present)driver.find_element_by_id('LP-1604').click() #to get to the 1604 tab# Waat for image to load before capturing dataelement_present = EC.presence_of_element_located((By.ID, 'currentSnap'))WebDriverWait(driver, timeout).until(element_present)# Sometimes the image still loads after the element is present, give it a few more secondstime.sleep(4)# Get base64 encoded image data from srcpic = driver.find_element_by_id('currentSnap').get_attribute('src')# Strip prefixpic = re.sub('^data:image/.+;base64,', '', pic)# Load image file to memoryim = Image.open(BytesIO(base64.b64decode(pic)))# Write to diskim.save('image.jpg')# Display image in Jupyterim# Open in your default image viewerim.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python