3

次のスクリプトを組み合わせて、リモートの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()
4

1 に答える 1

4

Corey Goldbergが、pyvirtualdisplayを使用してこれを行う方法を説明しています。

ただし、pyvirtualdisplay、xvfb、およびxserver-xephyrをインストールできる必要があります。

import contextlib
import selenium.webdriver as webdriver
display = pyvirtualdisplay.Display(visible = False, size = (800, 600))
display.start()
with contextlib.closing(webdriver.Firefox()) as driver:    
    driver.get('http://www.google.com')
    print driver.title
    # Google
display.stop()

Ubuntu / Debianでは、必要なパッケージを次のコマンドでインストールできます。

sudo apt-get install python-setuptools
sudo apt-get install xvfb
sudo apt-get install xserver-xephyr
sudo easy_install pyvirtualdisplay
于 2012-09-22T12:52:10.610 に答える