コード例 #1
0
            browser.find_element_by_xpath("//input[@id='Submit']").click()
            logging.info('[get_baidu_tongji_cookie] 4. vcode submit after.')

        try:
            wait.until(lambda browser: browser.find_element_by_xpath(
                '''//*[@id="QuestionSelect"]|//*[@id='site-summary']/table'''))
        except TimeoutException:
            logging.error('[get_baidu_tongji_cookie] vcode auth failed!')
            if browser.current_url.find('cas.baidu.com/?action=login') > 0:
                browser.quit()
                return ''

        try:
            ## 4.1 phone authorize if need
            ui.Select(
                browser.find_element_by_xpath(
                    "//*[@id='QuestionSelect']")).select_by_value('100000000')
            browser.find_element_by_xpath(
                "//*[@id='QuestionInput']").send_keys(phone)
            browser.find_element_by_xpath(
                "//*[@id='uc-sec-confirm-btn']").click()
            logging.info('[get_baidu_tongji_cookie] 5. need phone auth.')
        except NoSuchElementException, e:
            logging.info('[get_baidu_tongji_cookie] 5. not need phone auth.')

        ## 5. login
        try:
            wait.until(lambda browser: browser.find_element_by_xpath(
                "//*[@id='site-summary']/table"))
        except TimeoutException:
            logging.error('[get_baidu_tongji_cookie] after auth failed!')
コード例 #2
0
    # os.mkdir(save_dir + "url_and tags_" + str(i))
    # os.mkdir(dir_path)
    p = 0
    for div in divs:
        if down_count == i:
            break

        i = i + 1
        dir_path = save_dir + "image_" + str(i)

        url_xpath = "/html/body/table/tbody/tr[1]/td/table/tbody/tr/td/table[6]/tbody/tr[1]/td/div/div[" + str(
            i) + "]/div/a"

        driver.find_element_by_xpath(url_xpath).click()

        dropdown_menu = UI.Select(driver.find_element_by_name("formats"))
        a = 0
        while a < len(file_type):
            b = 0
            for option in dropdown_menu.options:
                formats = str(option.text).split(" ")[0]
                if file_type[a] == formats:
                    option.click()
                    break
                b = b + 1
            if b < len(dropdown_menu.options):
                break
            a = a + 1

        if a < len(file_type):
            os.mkdir(dir_path)
コード例 #3
0
ファイル: modulo.py プロジェクト: mrlcast/WebDriver
from selenium import webdriver
import time
import selenium.webdriver.support.ui as UI

driver = webdriver.Chrome()
# Open the desired web page
driver.get('http://juliemr.github.io/protractor-demo/')

# Type in numbers for operation
first_number = driver.find_element_by_css_selector('[ng-model=first]')
first_number.send_keys('10')
second_number = driver.find_element_by_css_selector('[ng-model=second]')
second_number.send_keys('100')

# Select the operation to be performed
operation_add = UI.Select(
    driver.find_element_by_css_selector(
        '[ng-model=operator]')).select_by_value("MODULO")

# Click on the button to perform operation
result_button = driver.find_element_by_class_name('btn')
result_button.click()

# Await operation to be performed
time.sleep(4)
result = driver.find_element_by_class_name('ng-binding')

# Assert operation result and finish browser instance
assert result.text == '10'
driver.quit()
コード例 #4
0
def main():
    parser = argparse.ArgumentParser(
        description='This command will record a VClass page')
    parser.add_argument('-u',
                        '--url',
                        type=str,
                        required=True,
                        help='URL of vclass')
    parser.add_argument('-d',
                        '--duration',
                        type=float,
                        required=True,
                        help='Duration of class in minutes')

    args = parser.parse_args()

    SOURCE_DIR = os.path.abspath(os.path.dirname(__file__))
    BASE_DIR = os.path.dirname(SOURCE_DIR)

    download_path = os.path.join(
        BASE_DIR, 'downloads',
        datetime.now().isoformat() + '--' +
        ''.join(random.choices(string.ascii_lowercase, k=10)))
    os.mkdir(download_path)

    chrome_options = Options()
    chrome_options.add_extension(os.path.join(SOURCE_DIR, 'skyroom.crx'))
    chrome_options.add_experimental_option(
        "prefs", {
            "download.default_directory": download_path,
            "download.prompt_for_download": False,
            "download.directory_upgrade": True,
            "safebrowsing.enabled": True
        })
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument("disable-infobars")

    logger.info('Opening google chrome')
    driver = None
    for retry_number in range(10):
        try:
            if driver:
                logger.info('Driver is not none, close it.')
                driver.close()
        except Exception as e:
            logger.exception(e)
        try:
            driver = webdriver.Chrome(options=chrome_options)

            driver.implicitly_wait(10)
            time.sleep(2)

            driver.maximize_window()
            time.sleep(1)
            driver.maximize_window()

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Create new window for not closing browser')
    for retry_number in range(10):
        try:
            if len(driver.window_handles) < 2:
                driver.execute_script("window.open('about:blank', 'tab2');")
            time.sleep(2 * (retry_number + 1))

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Configure skyroom extension')
    for retry_number in range(10):
        try:
            if len(driver.window_handles) > 1:
                driver.switch_to.window(driver.window_handles[0])
                driver.get("chrome-extension://"
                           "pejdnafppnpfimpnipdkiidjancinenc/options.html")
                ui.Select(driver.find_element_by_id(
                    'video_bitrate')).select_by_value('1000')
                ui.Select(driver.find_element_by_id(
                    'audio_bitrate')).select_by_value('32')

                driver.find_element_by_id('btnSave').click()
            time.sleep(2 * (retry_number + 1))

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Open vclass')
    for retry_number in range(10):
        try:
            driver.switch_to.window(driver.window_handles[0])
            driver.get(args.url)
            time.sleep(2 * (retry_number + 1))

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Login as guest')
    for retry_number in range(10):
        try:
            force_refresh(driver)
            time.sleep(5 * retry_number)
            goto_class(driver)
            driver.find_element_by_xpath("//input[@class='full-width']")
            driver.execute_script(
                "document.querySelector('.dlg-nickname .full-width').value"
                " = 'ضبط کننده‌ی خودکار';")
            driver.execute_script(
                "document.querySelector('.dlg-nickname .btn').click();")

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Start record')
    for retry_number in range(10):
        try:
            open_skyroom_popup()

            if not is_tab_in_recording():
                if not pyautogui.pixelMatchesColor(*START_RECORDING_ICON,
                                                   (255, 0, 0)):
                    close_skyroom_popup()
                    raise Exception('Recording red color not found :|')

                pyautogui.click(*START_RECORDING_ICON)
                time.sleep(5)

            if not pyautogui.pixelMatchesColor(*BETWEEN_PAUSE_AND_STOP_ICON,
                                               (245, 245, 245)):
                raise Exception('I can not see pause and stop icon!')
            if not is_tab_in_recording():
                raise Exception('Tab blue recording icon can not be seen!')

            close_skyroom_popup()

            break
        except Exception as e:
            logger.exception(e)

    logger.info('Recording is started, watch for freeze detection!')
    end_time = datetime.now() + timedelta(minutes=args.duration)
    old_screenshot = cv2.imdecode(
        np.frombuffer(driver.get_screenshot_as_png(), np.uint8), -1)
    while datetime.now() < end_time:
        for retry_number in range(10):
            try:
                cur_screenshot = cv2.imdecode(
                    np.frombuffer(driver.get_screenshot_as_png(), np.uint8),
                    -1)
                similarity = ssim(old_screenshot,
                                  cur_screenshot,
                                  multichannel=True)
                if similarity > 0.98:
                    logger.info('Screenshots are too similar, refresh!')
                    force_refresh(driver)
                    goto_class(driver)

                break
            except Exception as e:
                logger.exception(e)

        time.sleep(
            max(0, min(300, (end_time - datetime.now()).total_seconds())))
        old_screenshot = cur_screenshot

    logger.info('Time is over, stop recording')
    for retry_number in range(10):
        try:
            time.sleep(5 * retry_number)
            if is_tab_in_recording():
                open_skyroom_popup()

                if not pyautogui.pixelMatchesColor(*STOP_RECORDING_ICON,
                                                   (0, 0, 0)):
                    raise Exception('I can not see stop recording black icon')
                pyautogui.click(*STOP_RECORDING_ICON)
                time.sleep(5)
                close_skyroom_popup()

            if is_tab_in_recording():
                raise Exception('I stop recording but tab is in recording :|')
            if len(driver.window_handles) < 2:
                raise Exception('Recording window is not open :(')

            break
        except Exception as e:
            logger.exception(e)

    # download file
    for retry_number in range(10):
        try:
            time.sleep(5)

            driver.switch_to.window(driver.window_handles[1])
            time.sleep(0.5)

            driver.find_element_by_id('download').click()
            time.sleep(5 * (1 + retry_number))

            if not pyautogui.pixelMatchesColor(*CENTER_OF_DOWNLOAD_BAR,
                                               (255, 255, 255)):
                raise Exception('I can not see download bar')

            break
        except Exception as e:
            logger.exception(e)

    # close windows
    for retry_number in range(100):
        try:
            if len(os.listdir(download_path)) == 0 or not os.listdir(
                    download_path)[0].endswith('.webm'):
                raise Exception('Downloaded file can not be found!')
                time.sleep(5 * (1 + retry_number))
            break
        except Exception as e:
            logger.exception(e)

    for retry_number in range(100):
        try:
            driver.switch_to.window(driver.window_handles[0])
            driver.close()
            time.sleep(3)
            driver.switch_to.window(driver.window_handles[0])
            driver.close()
            break
        except Exception as e:
            logger.exception(e)

    # webm to mp4
    webm_file = os.path.join(download_path, os.listdir(download_path)[0])
    new_webm_file = os.path.join(download_path, 'video.webm')
    os.rename(webm_file, new_webm_file)

    ffmpeg.input(new_webm_file).output(
        os.path.join(download_path, 'video.mp4'), **{
            'vcodec': 'h264',
            'acodec': 'mp3',
        }).run()
コード例 #5
0
from selenium import webdriver
import time
import selenium.webdriver.support.ui as UI

driver = webdriver.Chrome()
# Open the desired web page
driver.get('http://juliemr.github.io/protractor-demo/')

# Type in numbers for operation
first_number = driver.find_element_by_css_selector('[ng-model=first]')
first_number.send_keys('22')
second_number = driver.find_element_by_css_selector('[ng-model=second]')
second_number.send_keys('14')

# Select the operation to be performed
operation_add = UI.Select(
    driver.find_element_by_css_selector(
        '[ng-model=operator]')).select_by_value("MULTIPLICATION")

# Click on the button to perform operation
result_button = driver.find_element_by_class_name('btn')
result_button.click()

# Await operation to be performed
time.sleep(4)
result = driver.find_element_by_class_name('ng-binding')

# Assert operation result and finish browser instance
assert result.text == '308'
driver.quit()
コード例 #6
0
ファイル: postfinance.py プロジェクト: zurajm/pybank
    def _get_credit_card_transactions(self, account, start, end):
        browser = self._browser

        logger.info('Opening credit cards overview...')
        self._go_to_assets()
        cc_tile = self._get_tile_by_title('Credit card')
        fetch.find_element_by_title(cc_tile, 'Detailed overview').click()
        self._wait_to_finish_loading()
        content = browser.find_element_by_class_name('detail_page')

        logger.debug('Finding credit card account...')
        # Switch to tab for that account.
        for tab in content.find_elements_by_css_selector('tab-wrapper'):
            if tab.text.endswith(account.name[-4:]):
                tab.find_element_by_tag_name('a').click()
        # Verify that the correct card is displayed.
        active_pane = content.find_element_by_css_selector(
            'section.js-tabs--pane.is-active')
        formatted_account_name = fetch.format_cc_account_name(account.name)
        if formatted_account_name not in active_pane.text:
            raise fetch.FetchError('Couldn\'t find account %s.' % account)

        # You can see the transactions for one month/period at a time.
        transactions = []
        while True:
            self._wait_to_finish_loading()

            # Get the period of the current page.
            date_select_el = content.find_element_by_css_selector(
                '.buttons select')
            date_select = ui.Select(date_select_el)
            period = date_select.first_selected_option.text
            if period == 'Current accounting period':
                # Just use "now", which is an inaccurate hack, but works for our
                # purposes.
                start_date = end_date = datetime.datetime.now()
            else:
                match = self._CREDIT_CARD_DATE_RANGE_PATTERN.search(period)
                if match:
                    start_date_str = match.group(1)
                    end_date_str = match.group(2)
                    start_date = datetime.datetime.strptime(
                        start_date_str, self._DATE_FORMAT)
                    end_date = datetime.datetime.strptime(
                        end_date_str, self._DATE_FORMAT)
                else:
                    raise fetch.FetchError(
                        'Not a credit card transactions page %s.' %
                        account.name)
            logger.debug('Current period: ' + period)

            transactions_on_page = self._extract_cc_transactions()
            transactions += transactions_on_page
            logger.debug('Found %i transactions on the current page.' %
                         len(transactions_on_page))

            # Are we done yet?
            if start_date <= start:
                logger.info('Should have loaded enough transaction pages.')
                break
            else:
                logger.debug('Adding marker transaction for page break.')
                if transactions:
                    transactions.append(
                        model.Payment(transactions[-1].date,
                                      amount=0,
                                      memo='[Next billing cycle]'))

            # Load earlier transactions.
            next_option = date_select_el.find_element_by_xpath(
                "option[text() = '%s']/following-sibling::option" % period)
            if not next_option:
                logger.info('No more earlier transactions.')
                break
            logger.info('Loading earlier transactions page...')
            date_select.select_by_value(next_option.get_attribute('value'))
            self._wait_to_finish_loading()

        # Filter the transactions for the requested date range.
        logger.debug('Found %i transactions before filtering for date range.' %
                     len(transactions))
        transactions = filter(lambda t: start <= t.date < end, transactions)

        # They should be sorted in reverse chronological order already, but
        # let's make this explicit.
        transactions.sort(key=lambda t: t.date, reverse=True)

        logger.info('Found %i transactions.' % len(transactions))

        self._close_tile()
        return transactions
コード例 #7
0
 def _select_dropdown(self, value, element):
     select = Support.Select(element)
     select.select_by_visible_text(value)
コード例 #8
0
 def _select_dropdown_by_value(self, value, element):
     select = Support.Select(element)
     select.select_by_value(value)
コード例 #9
0
 def _get_dropdown_options(self, element):
     select = Support.Select(element)
     return select.options
コード例 #10
0
 def element(self):
     select = self._get_element(*self._element_locator)
     return Support.Select(select)
コード例 #11
0
    def set_select_element(self, element, val):
        """A method for selecting an option in the select element on the page."""

        element = ui.Select(element)
        return element.select_by_visible_text(val)
コード例 #12
0
 def element(self):
     return Support.Select(self.src_elem)
コード例 #13
0
ファイル: checker.py プロジェクト: scmorgen/park_search
def _select_dropdown_visible_text(driver, field_id, value):
    menu = WebDriverWait(driver, 3).until(
        EC.presence_of_element_located((By.ID, field_id)))
    dropdown = ui.Select(menu)
    dropdown.select_by_visible_text(value)