次のスクリプトを組み合わせて、リモートのAsterisk/Vicidialサーバーで日次レポートを生成しました。スクリプトはレポートからソースを取得し、いくつかのフォーマットを実行し、結果をテキストファイルとして保存してから、レビューのためにSMTP経由で上司に送信します。現在、ローカルでcronジョブでスクリプトを実行しており、完全に機能しますが、VPSで実行できるようにしたいと考えています。問題は、スクリプトがFirefoxウィンドウをポップし、VPSにXまたはその他の種類のGUIがないため、Firefoxが開かず、データを取得できないことです。
明確にするために、私はFirefoxと必要なすべてのモジュールをインストールしており、VPSは基本的に私のローカルマシンであるバーXとGUI(Debian Lenny)と同じです。
X / GUIなしで動作するようにこのスクリプトを変更する方法について誰かが何らかの助けを提供してくれるなら、それは大いにありがたいです!
ありがとう、トビー。
import contextlib
import selenium.webdriver as webdriver
import lxml.html as LH
import lxml.html.clean as clean
import csv
import sys
import smtplib
from email.mime.text import MIMEText
import email.mime.application
import email
import mimetypes
import datetime
date=datetime.date.today()
url="http://myuser:mypass@ipaddress"+ str(date) + "some_other_string"
ignore_tags=('script','noscript','style')
with contextlib.closing(webdriver.Firefox()) as browser:
browser.get(url)
content=browser.page_source
cleaner=clean.Cleaner()
content=cleaner.clean_html(content)
with open('vicidial_data.html','w') as f:
f.write(content.encode('utf-8'))
doc=LH.fromstring(content)
with open('grab_raw.txt','w') as f:
for elt in doc.iterdescendants():
if elt.tag in ignore_tags: continue
text=elt.text or ''
tail=elt.tail or ''
words=' '.join((text,tail)).strip()
if words:
words=words.encode('utf-8')
f.write(words+'\n')
grab=open( 'grab_raw.txt', 'r' )
grab_list=grab.readlines()
grab.close()
del grab_list[0:21]
grab_out=open("Vicidial_Report-"+str(date)+".txt", 'w')
grab_out.writelines(grab_list)
grab_out.close()
msg=email.mime.Multipart.MIMEMultipart()
msg['Subject']='Vicidial call-report'
msg['From']='me@mycomapny.com'
msg['To']='myboss@mycompany.com'
body = email.mime.Text.MIMEText("Please find attached call-report for " + str(date))
msg.attach(body)
filename= "Vicidial_Report-"+str(date)+".txt"
fp=open(filename,'rb')
att = email.mime.application.MIMEApplication(fp.read(),_subtype="text")
fp.close()
att.add_header('Content-Disposition','attachment',filename=filename)
msg.attach(att)
s = smtplib.SMTP('smtp.gmail.com')
s.starttls()
s.login('mygmaillogin@mycompanydomain.com','mypassword')
s.sendmail('me@mycompanydomain.com',['myboss@mycompanydomain.com', 'someoneelse@mycompanydomain.com', ], msg.as_string())
s.quit()