Python:selenium.webdriver问题(服务器上没有X)

2024-03-28 12:47:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我拼凑了以下脚本,在远程Asterisk/Vicidial服务器上生成每日报告。这个脚本从报表中获取源代码,执行一些格式化,将结果保存为文本文件,然后通过smtp发送给我的老板审阅。我目前正在本地的cron作业上运行这个脚本,它运行得很好,但是我希望能够在我的VPS上运行它;问题是,脚本弹出一个Firefox窗口,VPS没有X或任何类型的GUI,因此,Firefox不会打开,数据也无法检索。在

为了澄清一下,我已经安装了Firefox和所有必需的模块,VPS基本上与我的本地机器barx和GUI(debianlenny)完全相同。在

如果有人能提供任何帮助,如何修改这个脚本,以便在没有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()

Tags: textimport脚本comdateemailasmsg
1条回答
网友
1楼 · 发布于 2024-03-28 12:47:41

Corey Goldberg explains如何使用pyvirtualdisplay执行此操作。在

但是,您需要能够安装pyvirtualdisplay、xvfb和xserverxephyr。在

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上,可以使用

^{pr2}$

相关问题 更多 >