本文整理汇总了Python中zope.testbrowser.browser.Browser.getControl方法的典型用法代码示例。如果您正苦于以下问题:Python Browser.getControl方法的具体用法?Python Browser.getControl怎么用?Python Browser.getControl使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类zope.testbrowser.browser.Browser
的用法示例。
在下文中一共展示了Browser.getControl方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: getLink
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def getLink(self, url=None):
if not url: return
# /////////////////////////////////////////////////////////////////////////////
# Scenario 1: do a simple search for all web server logs
# /////////////////////////////////////////////////////////////////////////////
# start search
browser = Browser()
# Get URL
#
# Option A: return all of the matched events
browser.open(url)
ctrl = browser.getControl(name='')
ctrl.value = ''
ctrl = browser.getControl(name='')
ctrl.value = ''
ctrl = browser.getControl(name='submitButtonName')
ctrl.click()
print browser.contents
示例2: login
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def login(self):
br = Browser()
br.mech_browser.set_handle_robots(False)
br.open(self.starturl)
br.getControl('Username:').value = self.acc_user
br.getControl('Password:').value = self.acc_pass
br.getControl('Login').click()
return br
示例3: TestMechRepr
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class TestMechRepr(unittest.TestCase):
"""Testing ..browser.*.mechRepr()."""
def setUp(self):
super(TestMechRepr, self).setUp()
app = TestApp()
app.set_next_response(u'''\
<html>
<body>
<form>
<input name="inp1" type="text" value="Täkst" />
<select name="sel1">
<option value="op">Türn</option>
</select>
<input name="check1" type="checkbox" value="šêlėçtèd" />
<input name="mail1" type="email" value="[email protected]" />
<input name="sub1" type="submit" value="Yës" />
</form>
</body>
</html>'''.encode('utf-8'))
self.browser = Browser(wsgi_app=app)
self.browser.open('https://localhost')
def test_TextControl_has_str_mechRepr(self):
mech_repr = self.browser.getControl(name='inp1').mechRepr()
self.assertIsInstance(mech_repr, str)
self.assertEqual(mech_repr, '<TextControl(inp1=Täkst)>')
def test_ItemControl_has_str_mechRepr(self):
option = self.browser.getControl(name='sel1').getControl(value="op")
mech_repr = option.mechRepr()
self.assertIsInstance(mech_repr, str)
self.assertEqual(
mech_repr,
"<Item name='op' id=None contents='Türn' value='op'"
" label='Türn'>")
def test_CheckboxListControl_has_str_mechRepr(self):
from ..browser import CheckboxListControl
ctrl = self.browser.getControl(name='check1')
self.assertIsInstance(ctrl, CheckboxListControl)
mech_repr = ctrl.mechRepr()
self.assertIsInstance(mech_repr, str)
self.assertEqual(mech_repr, '<SelectControl(check1=[*, ambiguous])>')
def test_Control_for_type_email_has_mechRepr(self):
option = self.browser.getControl(name='mail1')
mech_repr = option.mechRepr()
self.assertIsInstance(mech_repr, str)
self.assertEqual(mech_repr, "<EMailControl([email protected])>")
def test_SubmitControl_has_str_mechRepr(self):
mech_repr = self.browser.getControl(name='sub1').mechRepr()
self.assertIsInstance(mech_repr, str)
self.assertEqual(mech_repr, '<SubmitControl(sub1=Yës)>')
示例4: _getPadsPage
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def _getPadsPage(self):
username, password, url = self.getUserData()
# login
browser = Browser()
browser.open('%s/ep/account/sign-in' % self.trail_url(url))
browser.getControl(name='email').value = username
browser.getControl(name='password').value = password
browser.getForm(id='signin-form').submit()
# open pads table page
browser.getLink('Pads').click()
return safe_unicode(browser.contents)
示例5: fetch_data
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def fetch_data(self):
url, username, password = self._url, self._username, self._password
login_url = '/tutos/php/bookinginserter/login.php'
showteamhours_url = '/tutos/php/bookinginserter/showteamhours.php'
browser = Browser(url)
browser.getControl(name='username').value = username
browser.getControl(name='password').value = password
browser.getForm(action=login_url).submit()
browser.getLink(url='showteamhours.php').click()
start_date_value = browser.getControl(name='startdate').options[0]
browser.getControl(name='startdate').value = [start_date_value]
end_date_value = browser.getControl(name='enddate').options[-1]
browser.getControl(name='enddate').value = [end_date_value]
browser.getForm(action=showteamhours_url).submit()
self._from_date = start_date_value
self._to_date = end_date_value
self._data = browser.contents
示例6: setUp
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def setUp(self):
super(TestDisplayValue, self).setUp()
app = TestApp()
app.set_next_response(b'''\
<html>
<body>
<form>
<select name="sel1">
<option value="op">Turn</option>
<option value="alt">Alternative</option>
</select>
</form>
</body>
</html>''')
browser = Browser(wsgi_app=app)
browser.open('https://localhost')
self.control = browser.getControl(name='sel1')
示例7: ZopeTestBrowser
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class ZopeTestBrowser(DriverAPI):
driver_name = "zope.testbrowser"
def __init__(self, user_agent=None):
mech_browser = self._get_mech_browser(user_agent)
self._browser = Browser(mech_browser=mech_browser)
self._cookie_manager = CookieManager(self._browser.cookies)
self._last_urls = []
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
pass
def visit(self, url):
self._browser.open(url)
def back(self):
self._last_urls.insert(0, self.url)
self._browser.goBack()
def forward(self):
try:
self.visit(self._last_urls.pop())
except IndexError:
pass
def reload(self):
self._browser.reload()
def quit(self):
pass
@property
def title(self):
return self._browser.title
@property
def html(self):
return self._browser.contents
@property
def url(self):
return self._browser.url
def find_option_by_value(self, value):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[@value="%s"]' % value)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)], find_by="value", query=value)
def find_option_by_text(self, text):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[normalize-space(text())="%s"]' % text)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)], find_by="text", query=text)
def find_by_css(self, selector):
xpath = CSSSelector(selector).path
return self.find_by_xpath(xpath, original_find="css", original_selector=selector)
def find_by_xpath(self, xpath, original_find=None, original_selector=None):
html = lxml.html.fromstring(self.html)
elements = []
for xpath_element in html.xpath(xpath):
if self._element_is_link(xpath_element):
return self._find_links_by_xpath(xpath)
elif self._element_is_control(xpath_element):
return self.find_by_name(xpath_element.name)
else:
elements.append(xpath_element)
find_by = original_find or "xpath"
query = original_selector or xpath
return ElementList([ZopeTestBrowserElement(element, self) for element in elements], find_by=find_by, query=query)
def find_by_tag(self, tag):
return self.find_by_xpath('//%s' % tag, original_find="tag", original_selector=tag)
def find_by_value(self, value):
return self.find_by_xpath('//*[@value="%s"]' % value, original_find="value", original_selector=value)
def find_by_id(self, id_value):
return self.find_by_xpath('//*[@id="%s"][1]' % id_value, original_find="id", original_selector=id_value)
def find_by_name(self, name):
elements = []
index = 0
while True:
try:
control = self._browser.getControl(name=name, index=index)
elements.append(control)
index += 1
#.........这里部分代码省略.........
示例8: __init__
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class DAInstaller:
""" Automatically download DeviceAtlas API bundle and extract.
DeviceAtlas Python API files are downloaded from
and installed to ${your home folder}/da_distribution.
This is to keep proprietary files away from your own
(potentially open source) source tree.
zc.testbrowser class is used to mimic the real web browser.
To install zope.testbrowser, type:
easy_install zope.testbrowser
You might or might not want to do this, since Zope dependencies are quite heavy.
"""
def __init__(self, username, password, path=None):
"""
@param username: DeviceAtlas username
@param password: DeviceAtlas password
@param path: Path to install API and database files or None to use ~/da_distribution. Path is added to PYTHONPATH.
"""
try:
from zope.testbrowser.browser import Browser
except ImportError:
raise
raise RuntimeError("zope.testbrowser must be installed to automatize DeviceAtlas downloads")
self.browser = Browser()
if not path:
path = os.path.abspath(os.path.join(os.getenv("HOME"), "da_distribution"))
self.path = path
# Wrap things away from Python namespace
self.api_path = os.path.join(path, "da_api")
if not os.path.exists(self.path):
os.makedirs(self.path)
os.makedirs(self.api_path)
if not path in sys.path:
# Include autodownload folder in Python import
sys.path.append(self.path)
self.fname = "da.zip"
self.json_file = "json.zip"
self.raw_json = os.path.join(self.path, "data.json") # Unzipped json database
self.username = username
self.password = password
self.login_url = "http://deviceatlas.com"
self.api_url = url="http://deviceatlas.com/getAPI/python"
def login(self):
"""
"""
self.browser.open(self.login_url)
if "Signed in as" in self.browser.contents:
return # already logged in
field = self.browser.getControl(name="name")
field.value = self.username
field = self.browser.getControl(name="pass")
field.value = self.password
submit = self.browser.getControl("Go")
submit.click()
if not "http://deviceatlas.com/user" in self.browser.url:
raise RuntimeError("Could not log in to deviceatlas.com with username " + self.username)
#print self.browser.url
#print self.browser.headers
#print self.browser.contents
def need_download(self):
"""
@return: True if zip download needed
"""
if not os.path.exists(os.path.join(self.path, self.fname)):
return True
return False
def need_unzip(self):
"""
@return: True if zip extract needed
"""
#.........这里部分代码省略.........
示例9: ZopeTestBrowser
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class ZopeTestBrowser(DriverAPI):
def __init__(self):
self._browser = Browser()
self._last_urls = []
def visit(self, url):
self._browser.open(url)
def back(self):
self._last_urls.insert(0, self.url)
self._browser.goBack()
def forward(self):
try:
self.visit(self._last_urls.pop())
except IndexError:
pass
def reload(self):
self._browser.reload()
def quit(self):
pass
@property
def title(self):
return self._browser.title
@property
def html(self):
return self._browser.contents
@property
def url(self):
return self._browser.url
def find_option_by_value(self, value):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[@value="%s"]' % value)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)])
def find_option_by_text(self, text):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[normalize-space(text())="%s"]' % text)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)])
def find_by_css(self, selector):
xpath = CSSSelector(selector).path
return self.find_by_xpath(xpath)
find_by_css_selector = warn_deprecated(find_by_css, 'find_by_css_selector')
def find_by_xpath(self, xpath):
html = lxml.html.fromstring(self.html)
elements = []
for xpath_element in html.xpath(xpath):
if self._element_is_link(xpath_element):
return self.find_link_by_text(xpath_element.text)
elif self._element_is_control(xpath_element):
return self.find_by_name(xpath_element.name)
else:
elements.append(xpath_element)
return ElementList([ZopeTestBrowserElement(element, self) for element in elements])
def find_by_tag(self, tag):
return self.find_by_xpath('//%s' % tag)
def find_by_id(self, id_value):
return self.find_by_xpath('//*[@id="%s"][1]' % id_value)
def find_by_name(self, name):
elements = []
index = 0
while True:
try:
control = self._browser.getControl(name=name, index=index)
elements.append(control)
index += 1
except IndexError:
break
return ElementList([ZopeTestBrowserControlElement(element, self) for element in elements])
def find_link_by_text(self, text):
return self._find_links_by_xpath("//a[text()='%s']" % text)
def find_link_by_href(self, href):
return self._find_links_by_xpath("//a[@href='%s']" % href)
def fill(self, name, value):
self.find_by_name(name=name).first._control.value = value
fill_in = warn_deprecated(fill, 'fill_in')
#.........这里部分代码省略.........
示例10: ZopeTestBrowser
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class ZopeTestBrowser(DriverAPI):
driver_name = "zope.testbrowser"
def __init__(self):
self._browser = Browser()
self._cookie_manager = CookieManager(self._browser.cookies)
self._last_urls = []
def visit(self, url):
self._browser.open(url)
def back(self):
self._last_urls.insert(0, self.url)
self._browser.goBack()
def forward(self):
try:
self.visit(self._last_urls.pop())
except IndexError:
pass
def reload(self):
self._browser.reload()
def quit(self):
pass
@property
def title(self):
return self._browser.title
@property
def html(self):
return self._browser.contents
@property
def url(self):
return self._browser.url
def find_option_by_value(self, value):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[@value="%s"]' % value)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)], find_by="value", query=value)
def find_option_by_text(self, text):
html = lxml.html.fromstring(self.html)
element = html.xpath('//option[normalize-space(text())="%s"]' % text)[0]
control = self._browser.getControl(element.text)
return ElementList([ZopeTestBrowserOptionElement(control, self)], find_by="text", query=text)
def find_by_css(self, selector):
xpath = CSSSelector(selector).path
return self.find_by_xpath(xpath, original_find="css", original_selector=selector)
def find_by_xpath(self, xpath, original_find=None, original_selector=None):
html = lxml.html.fromstring(self.html)
elements = []
for xpath_element in html.xpath(xpath):
if self._element_is_link(xpath_element):
return self.find_link_by_text(xpath_element.text)
elif self._element_is_control(xpath_element):
return self.find_by_name(xpath_element.name)
else:
elements.append(xpath_element)
find_by = original_find or "xpath"
query = original_selector or xpath
return ElementList(
[ZopeTestBrowserElement(element, self) for element in elements], find_by=find_by, query=query
)
def find_by_tag(self, tag):
return self.find_by_xpath("//%s" % tag, original_find="tag", original_selector=tag)
def find_by_value(self, value):
return self.find_by_xpath('//*[@value="%s"]' % value, original_find="value", original_selector=value)
def find_by_id(self, id_value):
return self.find_by_xpath('//*[@id="%s"][1]' % id_value, original_find="id", original_selector=id_value)
def find_by_name(self, name):
elements = []
index = 0
while True:
try:
control = self._browser.getControl(name=name, index=index)
elements.append(control)
index += 1
except IndexError:
break
return ElementList(
[ZopeTestBrowserControlElement(element, self) for element in elements], find_by="name", query=name
)
#.........这里部分代码省略.........
示例11: OronDownloader
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class OronDownloader(object):
def __init__(self, downloads_urls, urls_file, username, password,
dest_dir=None, generate_thumbs=True, font_path=None,
stop_at_quota=500):
self.downloads_urls = downloads_urls
self.urls_file = urls_file
self.username = username
self.password = password
if dest_dir is None:
dest_dir = os.getcwd()
self.dest_dir = dest_dir
self.generate_thumbs = generate_thumbs
self.font_path = font_path
self.stop_at_quota = stop_at_quota
log.info("Starting Browser")
self.browser = Browser("http://oron.com")
self.to_download = 0
self.downloaded = 0
self.download_quota = 0
self.downloads_until_quota_reload = 10
def login(self):
if self.browser and self.browser.contents:
if self.username in self.browser.contents and \
'Logout' in self.browser.contents:
log.info("Already logged in!")
return
log.info("Logging into Oron.com")
self.browser.open('http://oron.com/login')
self.browser.getControl(name='login').value = self.username
self.browser.getControl(name='password').value = self.password
self.browser.getForm(name='FL').submit(' Submit ')
if self.username not in self.browser.contents:
log.error("Failed to login...")
print self.browser.contents
sys.exit(1)
log.info("Logged in successfully")
self.load_download_quota()
def load_download_quota(self):
log.info("Loading download quota...")
self.browser.open("http://oron.com/?op=my_account")
doc = etree.HTML(self.browser.contents)
quota_string_match = doc.xpath('//form/table/tr[3]/td[2]/text()')
if quota_string_match:
self.download_quota = int(quota_string_match[0].split()[0])
log.info("You have %d Mb of download quota.", self.download_quota)
else:
log.error("Failed to retrieve download quota!")
sys.exit(1)
def check_quota(self):
if self.download_quota <= self.stop_at_quota:
log.info("Download quota is now %d. Stop downloading for now...",
self.download_quota)
sys.exit(0)
if not self.downloads_until_quota_reload:
self.downloads_until_quota_reload = 10
self.load_download_quota()
else:
self.downloads_until_quota_reload -= 1
def download(self):
self.login()
self.check_quota()
if self.urls_file:
log.info("Opening download URLs file: %s", self.urls_file)
self.find_download_links_from_file()
else:
log.info("Processing %d oron folder urls", len(self.downloads_urls))
for url in self.downloads_urls:
log.info("Opening downloads URL: %s", url)
self.browser.open(url)
self.find_download_links(self.browser.contents)
def find_download_links_from_file(self):
urls = open(self.urls_file, 'r').readlines(True)
self.to_download = len([u for u in urls if u.strip()])
log.info("Processing %d oron file urls", self.to_download)
for url in urls:
if not url.strip():
continue
url = url.strip()
log.info('-'*78)
log.info("[%d/%d] Opening URL: %s", self.downloaded+1, self.to_download, url)
attempts = 0
while True:
try:
self.browser.open(url.strip())
doc = etree.HTML(self.browser.contents)
break
except socket.timeout:
if attempts > 2:
break
log.info("Socket timeout. retrying...")
attempts += 1
if attempts > 2:
#.........这里部分代码省略.........
示例12: Blogger
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
class Blogger(object):
def __init__(self, options):
self.oron_folder_url = options.url
self.title_base = options.title_base
self.links_per_post = options.links_per_post
self.screenshots_dir = options.screenshots
self.output_dir = options.output
# Email Options
self.smtp_host = options.smtp_host
self.smtp_port = options.smtp_port
self.smtp_user = options.smtp_user
self.smtp_pass = options.smtp_pass
self.smtp_from = options.smtp_from
self.smtp_use_tls = options.smtp_use_tls
self.email_recipient = options.email
self.email_initial_text = options.email_initial_text
self.email_ending_text = options.email_ending_text
self.start_on_post = options.start_on_post
log.info("Starting Browser")
self.browser = Browser("http://oron.com")
self.total_links = 0
self.links = {}
def login(self):
if self.browser and self.browser.contents:
if self.username in self.browser.contents and \
'Logout' in self.browser.contents:
log.info("Already logged in!")
return
log.info("Logging into Oron.com")
self.browser.open('http://oron.com/login')
self.browser.getControl(name='login').value = self.username
self.browser.getControl(name='password').value = self.password
self.browser.getForm(name='FL').submit(' Submit ')
if self.username not in self.browser.contents:
log.error("Failed to login...")
print self.browser.contents
sys.exit(1)
log.info("Logged in successfully")
def grab_links(self):
log.info("Loading oron folder url: %s", self.oron_folder_url)
self.browser.open(self.oron_folder_url)
doc = etree.HTML(self.browser.contents)
self.total_links = len(doc.xpath(
'//table[@class="tbl2"]/tr/td[1]/a[@target="_blank"]/small'
))
self.total_posts = int(round(self.total_links/(self.links_per_post*1.0)))
log.info("Found %d links to create %s blog posts.",
self.total_links, self.total_posts)
trs = doc.xpath('//table[@class="tbl2"]/tr')
for tr in trs:
link_td = tr.xpath('td[1]/a')
size_td = tr.xpath('td[2]/small/nobr/text()')
if not link_td or not size_td:
continue
filename_search = link_td[0].xpath('small/text()')
if not filename_search:
continue
filename = filename_search[0]
href = link_td[0].attrib['href']
size = size_td[0].upper()
self.links[filename] = {
'href': href, 'size': size, 'filename': filename
}
def create_posts(self):
self.grab_links()
filenames = sorted(self.links.keys())
chunker = Chunker(self.links_per_post)
n = 1
if n < self.start_on_post:
log.info("Skipping posts %d to %d", n, self.start_on_post)
for chunk in chunker(filenames):
if n < self.start_on_post:
n += 1
continue
log.info("Processing post %s of %s", n, self.total_posts)
title = self.title_base + ' - %d of %d' % (n, self.total_posts)
links = []
for filename in chunk:
screenshot_name = filename + '.jpg'
screenshot_path = os.path.join(self.screenshots_dir, screenshot_name)
image_html = "<em>Missing Image preview for <b>%s</b></em>" % filename
if os.path.isfile(screenshot_path):
log.info("Uploading screenshot %s", screenshot_name)
browser = Browser("http://www.freeporndumpster.com/legacy.php")
caption_control = browser.getControl(name='imagename[]', index=0)
caption_control.value = self.links[filename]['href']
file_control = browser.getControl(name='images[]', index=0)
#.........这里部分代码省略.........
示例13: create_posts
# 需要导入模块: from zope.testbrowser.browser import Browser [as 别名]
# 或者: from zope.testbrowser.browser.Browser import getControl [as 别名]
def create_posts(self):
self.grab_links()
filenames = sorted(self.links.keys())
chunker = Chunker(self.links_per_post)
n = 1
if n < self.start_on_post:
log.info("Skipping posts %d to %d", n, self.start_on_post)
for chunk in chunker(filenames):
if n < self.start_on_post:
n += 1
continue
log.info("Processing post %s of %s", n, self.total_posts)
title = self.title_base + ' - %d of %d' % (n, self.total_posts)
links = []
for filename in chunk:
screenshot_name = filename + '.jpg'
screenshot_path = os.path.join(self.screenshots_dir, screenshot_name)
image_html = "<em>Missing Image preview for <b>%s</b></em>" % filename
if os.path.isfile(screenshot_path):
log.info("Uploading screenshot %s", screenshot_name)
browser = Browser("http://www.freeporndumpster.com/legacy.php")
caption_control = browser.getControl(name='imagename[]', index=0)
caption_control.value = self.links[filename]['href']
file_control = browser.getControl(name='images[]', index=0)
file_control.add_file(
open(screenshot_path),
"image/jpeg", screenshot_name
)
browser.getControl('upload').click()
doc = etree.HTML(browser.contents)
image_html = "<em>Missing Image html for <b>%s</b></em>" % filename
image_html_match = doc.xpath('//table/tr/td/p[contains(., "website")]/textarea/text()')
if image_html_match:
image_html = image_html_match[0]
else:
log.error("Failed to get uploaded image html")
else:
log.warn("There's no screenshot for filename %s", filename)
links.append((
filename,
self.links[filename]['size'],
self.links[filename]['href'],
image_html
))
html = HTML_TEMPLATE.render(
links=links, initial_text=self.email_initial_text,
ending_text=self.email_ending_text
)
open(os.path.join(self.output_dir, title+'.txt'), 'w').write(html)
n += 1
server = None
email = MIMEMultipart('alternative')
email['Subject'] = title
email['From'] = '[email protected]'
email['To'] = self.email_recipient
email.attach(MIMEText(html, 'html'))
log.info("Sending post email")
try:
try:
# Python 2.6
server = smtplib.SMTP(self.smtp_host, self.smtp_port, timeout=60)
except:
# Python 2.5
server = smtplib.SMTP(self.smtp_host, self.smtp_port)
except Exception, err:
log.error("There was an error sending the notification email: %s", err)
if server is None:
log.error("Failed to setup SMTP server")
continue
security_enabled = self.smtp_use_tls
if security_enabled:
server.ehlo()
if not server.esmtp_features.has_key('starttls'):
log.warning("TLS/SSL enabled but server does not support it")
else:
server.starttls()
server.ehlo()
if self.smtp_user and self.smtp_pass:
try:
server.login(self.smtp_user, self.smtp_pass)
except smtplib.SMTPHeloError, err:
log.error("The server didn't reply properly to the helo "
"greeting: %s", err)
except smtplib.SMTPAuthenticationError, err:
log.error("The server didn't accept the username/password "
"combination: %s", err)