there textarea
, button synthesize
on page. looks follows:
<textarea id="ttstext" name="text" style="font-size: 130%; width: 100%; height: 120px; padding: 5px;"></textarea> ... <div id="audioplayer"> <script> create_playback(); </script><audio autoplay="" autobuffer="" controls=""></audio> </div> <input id="commitbtn" value="synthesize" type="submit">
when click button synthesize
, html code of page change follows (it create audio player).
<div id="audioplayer" style="display: block;"><embed width="370" height="20" flashvars="height=20&width=370&type=mp3&file=http://services.abc.xyz.mp3&showstop=true&usefullscreen=false&autostart=true" allowfullscreen="true" allowscriptaccess="always" quality="high" name="mpl" id="mpl" style="undefined" src="/demo/mediaplayer.swf" type="application/x-shockwave-flash"></div>
i generate mp3 file python code.
what have tried far.
#!/usr/bin/env python # encoding: utf-8 __future__ import unicode_literals contextlib import closing selenium.webdriver import firefox selenium.webdriver.support.ui import webdriverwait import beautifulsoup import time url = "http://www..." def texttospeech(): closing(firefox()) browser: try: browser.get(url) except selenium.common.exceptions.timeoutexception: print "timeout" browser.find_element_by_id("ttstext").send_keys("hello.") button = browser.find_element_by_id("commitbtn") button.click() time.sleep(10) webdriverwait(browser, timeout=100).until( lambda x: x.find_element_by_id('audioplayer')) src = browser.page_source return src def getaudio(source): soup = beautifulsoup.beautifulsoup(source) audio = soup.find("div", {"id": "audioplayer"}) return audio.string if __name__ == "__main__": print getaudio(texttospeech())
the key success url resulting mp3 file. don't know how wait script change html (inner text of <div id="audioplayer">
). code returns none
, because takes result sooner.
in case of changes, not enough wait element:
webdriverwait(browser, timeout=100).until( lambda x: x.find_element_by_id('audioplayer'))
but need wait change condition, using expectedcondition
. started (not tested):
from selenium.webdriver.support import expected_conditions ec wait_text = 'file=http://' element = webdriverwait(driver, 10).until( ec.text_to_be_present_in_element((by.id, "mydynamicelement"), wait_text) )
you can checkout expected conditions here: http://selenium-python.readthedocs.org/en/latest/api.html?highlight=text_to_be_present_in_element#module-selenium.webdriver.support.expected_conditions