问题描述
我正在编写一个运行预定作业的代码,并在 chromedriver 上截取屏幕截图并通过电子邮件发送。我试图找到一种方法将控制台输出捕获到文件中,然后通过电子邮件发送。下面是调度程序和屏幕截图模块的代码片段。
这是我的调度程序,
<div class= "container">
<div id = "Boxes">
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}</p>
<p class = "year">${year}dbfdfbbfsfeeadwaawwda</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}seefs</p>
<p class = "year">${year}esfesdbffdbbfdf</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sefsfe</p>
<p class = "year">${year}eesesfdfbfdbbfdfbd</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sfeeeeeeee</p>
<p class = "year">${year}sfeeeeeeeeeeee</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sfeeeeeeee</p>
<p class = "year">${year}sfeeeeeeeeeeee</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sfeeeeeeee</p>
<p class = "year">${year}sfeeeeeeeeeeee</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sfeeeeeeee</p>
<p class = "year">${year}sfeeeeeeeeeeee</p>
</div>
</div>
<div class="Box">
<img src= ${img}>
<div class = "subtext">
<p class = "title">${title}sfeeeeeeee</p>
<p class = "year">${year}sfeeeeeeeeeeee</p>
</div>
</div>
</div>
<div>
我的截图代码,
import schedule
import time
from datetime import datetime
from screenshot import screenshot
def job():
print("Launching scresnshot")
screenshot()
我的控制台输出
附注:import time
from Screenshot import Screenshot_Clipping
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from email_it import email_it
from environmental_variables import environmental_variables
from error_alert_email import error_alert_email
from selenium import webdriver
def screenshot():
ob=Screenshot_Clipping.Screenshot()
chrome_options = Options()
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--start-fullscreen')
chrome_options.add_argument('--no-sandBox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(executable_path = r"C:\Users\me\Documents\Projects\chromedriver.exe")
print('Confirming visibility...')
webdriverwait(driver,60).until(EC.visibility_of_element_located((By.ID,visibility_element)))
print('taking screenshot...')
img_url=ob.full_Screenshot(driver,path = path,image_name = label)
print('closing driver...')
driver.close()
screenshot()
C:\Users\Documents\Projects\> python .\src\scheduler.py
解决方法
您可以做的一件事是将所有控制台输出路由到一个文本文件中,然后在程序运行完成后通过电子邮件发送文本文件的内容。我将在下面添加一些关于如何将所有打印语句定向到文本文件的代码,对于电子邮件发送部分,有一些很好的 Python 库可以使发送电子邮件变得非常简单。 Here 是一篇关于这个主题的好文章。
sys.stdout = open("test.txt","w")
print("Hello World")
sys.stdout.close()
,
你可以试试这个。它是上述方法和日志记录的混合体!
import logging
stdout_ = sys.stdout
sys.stdout = open("logFiles.txt","w")
e_type,e_val,e_tb = sys.exc_info()
traceback.print_exception(e_type,e_tb,file = sys.stdout)
root = logging.getLogger()
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
def job():
print("Launching scresnshot")
screenshot()
sys.stdout = stdout_
sys.stdout.close()