示例#1
0
def fetch_image_unsplash(query: str,
                         max_links_to_fetch: int,
                         wd: webdriver,
                         sleep_between_interactions: int = 3):
    def scroll_to_end(wd, scroll_point):
        wd.execute_script(f"window.scrollTo(0, {scroll_point});")
        time.sleep(sleep_between_interactions)

    # build the unsplash query
    search_url = f"https://unsplash.com/s/photos/{query}"
    # load the page
    wd.get(search_url)
    time.sleep(sleep_between_interactions)

    image_urls = set()
    image_count = 0
    number_results = 0

    for i in range(1, 20):
        scroll_to_end(wd, i * 1000)
        time.sleep(5)
        thumb = wd.find_elements_by_css_selector("img._2UpQX")
        time.sleep(5)
        for img in thumb:
            image_urls.add(img.get_attribute('src'))
            image_count = len(image_urls)
            number_results = image_count
            time.sleep(.5)
        print(f"Found: {number_results} search results. Extracting links...")
    return image_urls
示例#2
0
def download_csv(driver: webdriver, dropdown_option: Tuple[str, str]) -> None:
    """
    Downloads the CSV containing route details for the selected vehicle
    Args:
        driver (webdriver): The webdriver used to run the browser session
        dropdown_option (Tuple[str, str]): The tuple returned from
        go_to_history(), used to fill in parameters for the download URL
    """
    aid = dropdown_option[1]
    aname = dropdown_option[0]
    yesterday = (datetime.now() - timedelta(days=1)).strftime('%d/%m/%Y')
    url = 'https://www.dennisconnect.co.uk/_handler/csv.ashx?' \
        'req=HISTORY_LIST&' \
        f'sdate={yesterday}%2000:00&edate={yesterday}%2023:59' \
        f'&atype=V&aid={aid}&aname={aname}' \
        '&locfil=&useshape=false&dtl=0&s2r=false' \
        '&showdriverbehavioralerts=false'
    print('Downloading CSV file')
    driver.get(url)
    time.sleep(3)
    # Get name of downloaded file
    files = glob.glob('./*.csv')
    downloaded = max(files, key=os.path.getctime)
    newname = f'./{aname}_{downloaded[2:-4]}.csv'
    os.rename(downloaded, newname)
    print(f'Downloaded file {newname[2:]}\n')
def scrape_classifica(brow: webdriver) -> None:
    """
	Scrape real data from website in order to check later how the algorithm is
	working.
	"""

    brow.get(f'{cfg.BASE_URL}classifica')
    time.sleep(3)

    dbf.empty_table(table='classifica')

    positions = brow.find_elements_by_xpath(
        './/table/tbody/tr[contains(@data-logo, ".png")]')

    columns = ['team', 'G', 'V', 'N', 'P', 'Gf', 'Gs', 'Dr', 'Pt', 'Tot']
    for pos in positions:
        team_data = []
        scroll_to_element(brow, pos)
        fields = pos.find_elements_by_xpath('.//td')[2:-2]

        for field in fields:
            team_data.append(field.text)

        dbf.db_insert(table='classifica', columns=columns, values=team_data)

    brow.close()
示例#4
0
def test_button(browser: webdriver):
    """
        Тестируем наличие кнопки на странице
    :param browser: webdriver
    :return:
    """
    def isElementPresent() -> bool:
        """
        Проверяем наличие элемента, если него нет на странице то "ловим" исключение
        и обрабатываем его
        :rtype: bool
            - True - элемент найден
            - False - элемент не найден
        """
        try:
            browser.find_elements_by_class_name(
                'btn btn-lg btn-primary btn-add-to-basket')
            return True
        except NoSuchElementException:
            return False

    link = "http://selenium1py.pythonanywhere.com/catalogue/coders-at-work_207/"
    browser.get(link)
    time.sleep(5)
    assert isElementPresent() == True, "Button not found"
def download_videos(url: str, download_path: str, lower: int, upper: int,
                    driver: webdriver) -> None:
    for x in range(lower, upper + 1):
        # Sentinal value to indicate page has loaded, necessary because sometimes the page will hang
        bad = True
        while bad:
            try:
                # Format the URL to be the correct page for the given lesson
                driver.get(url.format(x if x > 9 else "0{}".format(x)))

                # Wait until the page has loaded (indicated by the "Download" button)
                ui.WebDriverWait(
                    driver, 30).until(lambda d: d.find_element_by_xpath(
                        r"""//a[text()="Download"]""") is not None)

                # Indicate the the page has successfully loaded
                bad = False
            except:
                pass

        file_name = get_download_file(driver)
        if not path.exists(path.join(download_path, file_name)):
            print("DOWNLOADING:", file_name, flush=True)
            click_download_link(driver)
            sleep(.1)

            # Navigate to downloads, then wait until all downloads are finished
            driver.get("chrome://downloads")
            print("WAITING FOR DOWNLOAD TO FINISH", flush=True)
            while not driver.execute_script(
                    r"""return downloads.Manager.get().items_.every(e => e.state === "COMPLETE");"""
            ):
                sleep(5)
            print("DOWNLOAD FINISHED", flush=True)
def download_courses(username: str, password: str, download_path: str,
                     driver: webdriver):
    wait30: ui.WebDriverWait = ui.WebDriverWait(driver, 30)

    print("LOGGING IN", flush=True)
    # Request the login page and wait for it to load
    driver.get("https://members.usegolang.com/login")
    wait30.until(lambda driver: driver.find_element_by_xpath(
        r"""//input[@id="email"]""") is not None)

    # Fill in the email and password fields, then hit enter to login
    driver.find_element_by_id("email").send_keys(username)
    driver.find_element_by_id("password").send_keys(password + "\n")

    # Wait until login finishes
    wait30.until(lambda driver: driver.find_element_by_xpath(
        r"""//small[contains(text(), "Access all of your course contents belows")]"""
    ) is not None)

    print("LOGGED IN", flush=True)
    print("DOWNLOADING MAIN LESSONS", flush=True)
    # Download all of the main lessons
    download_videos("https://members.usegolang.com/twg/lessons/lesson-{}",
                    download_path, 1, 83, driver)

    # Download all of the project lessons
    download_videos("https://members.usegolang.com/twg/projects/lesson-{}",
                    download_path, 1, 19, driver)
示例#7
0
def symbol_to_frames(symbol: str, browser_object: webdriver) -> DataFrame:
    """ Takes in the symbol and returns floorsheet dataframe """
    search_url: str = f"{BASE_URL}{symbol}"
    browser_object.get(search_url)
    browser_object.implicitly_wait(IMP_DELAY)
    # Click on the nav button
    browser_object.find_element_by_id("navFloorSheet").click()
    wait()
    intent_block = browser_object.find_element_by_id(
        "ctl00_ContentPlaceHolder1_CompanyDetail1_divDataFloorsheet")
    frame_block = block_to_frame(intent_block)
    next_button = browser_object.find_element_by_xpath(
        "//a[@title='Next Page']")
    pages = []
    while get_pages(intent_block)["current_page"] <= get_pages(
            intent_block)["last_page"] and get_pages(
                intent_block)["current_page"] not in pages:
        pages.append(int(get_pages(intent_block)["current_page"]))
        next_button.click()
        wait()
        next_button = browser_object.find_element_by_xpath(
            "//a[@title='Next Page']")
        intent_block = browser_object.find_element_by_id(
            "ctl00_ContentPlaceHolder1_CompanyDetail1_divDataFloorsheet")
        inter_frame = block_to_frame(intent_block)
        frame_block = pd.concat([frame_block, inter_frame], axis=0)
    pages = []
    return frame_block
示例#8
0
def login(_driver: webdriver):
    send_to_field_with(css_sel_or_xpath='.js-signin-login',
                       keys=badoo_email,
                       _driver=_driver)
    send_to_field_with(css_sel_or_xpath='.js-signin-password',
                       keys=badoo_pass,
                       _driver=_driver)
    click_btn_with(
        css_sel_or_xpath='//button[@class="btn btn--sm btn--block"]',
        _driver=_driver,
        login_func=login,
        use_xpath=True)
    time.sleep(random_float_number(2, 3))

    # if unsuccessful login, lets retry
    sign_in_link = return__element_by_xpath(
        xpath="//a[@class='link js-signin-link']", _driver=_driver)
    if sign_in_link is not None:
        sign_in_link.click()
        time.sleep(2)
        login(_driver)

    set_scale(_driver)
    time.sleep(3)
    _driver.get('https://badoo.com/encounters')
def parse_post_data(driver: webdriver, url):
    """Собирает данные о лайках и комментах к посту"""
    driver.get(url)
    try:
        likes = int(
            driver.find_elements_by_class_name(
                'sqdOP')[2].find_element_by_tag_name('span').text.replace(
                    ' ', ''))  # sqdOP yWX7d     _8A5w5 vcOH2
        views = 0
    except NoSuchElementException:
        print('это видео')
        try:
            button = driver.find_element_by_class_name('vcOH2')
            views = int(
                button.find_element_by_tag_name('span').text.replace(' ', ''))
            button.click()
            likes = int(
                driver.find_element_by_class_name(
                    'vJRqr').find_element_by_tag_name('span').text.replace(
                        ' ', ''))
            button = driver.find_element_by_class_name('QhbhU')
            button.click()
        except NoSuchElementException:
            views = 0
            try:
                likes = int(
                    driver.find_element_by_class_name(
                        'vJRqr').find_element_by_tag_name('span').text.replace(
                            ' ', ''))
            except NoSuchElementException:
                likes = 0
                print(f'Нихуя не нашло у поста: {url}')
    comments = get_comments_count(driver=driver)
    return likes, views, comments
def filter_posts_list(driver: webdriver, months: list,
                      posts_list: list) -> list:
    """Отфильтровывает только нужные для анализа записи"""
    res = []
    for post_url in posts_list:
        driver.get(post_url)
        try:
            sleep(2)
            time = driver.find_element_by_class_name('Nzb55').get_attribute(
                'datetime')
            for month in months:
                if time[0:7] == month:
                    res.append(post_url)
        except NoSuchElementException:
            print(f'ДАТУ НЕ НАХОДИТ!!! ПОСТ {post_url}')
            driver.get(post_url)
            try:
                sleep(2)
                time = driver.find_element_by_class_name(
                    'Nzb55').get_attribute('datetime')
                for month in months:
                    if time[0:7] == month:
                        res.append(post_url)
            except NoSuchElementException:
                print(f'ДАТУ НЕ НАХОДИТ ВТОРОЙ РАЗ!!! ПОСТ {post_url}')
                res.append(post_url)
    return res
示例#11
0
def execSearch(browser: webdriver, inifile):

    # 検索ワード抽出
    browser.get(_get(inifile, 'search', 'url_trend'))
    contents = browser.find_elements_by_tag_name('h1')
    searchWords = []
    for content in contents:
        searchWords.append(content.text)
    searchWords.pop(0)
    searchWords.pop(0)

    # ログインボタンの押下(検索、メールDEポイント共通)
    browser.get(_get(inifile, 'search', 'url') + '/Web?qt=' + searchWords[0])
    searchWords.pop(0)
    browser.find_element_by_link_text(_get(inifile, 'search',
                                           'login_context')).click()

    login_user = browser.find_element_by_name(_get(inifile, 'user', 'id_name'))
    login_user.send_keys(_get(inifile, 'user', 'id'))
    login_password = browser.find_element_by_name(
        _get(inifile, 'user', 'pass_name'))
    login_password.send_keys(_get(inifile, 'user', 'pass'))
    browser.find_element_by_name("submit").click()
    sleep(_getRandomNum())

    ## 検索ワードを一つずつ処理
    for index, searchWord in enumerate(searchWords):
        search_box = browser.find_element_by_name("qt")
        search_box.clear()
        search_box.send_keys(searchWord)
        browser.find_element_by_id('searchBtn').click()
        sleep(_getRandomNum())
示例#12
0
def scrap_by_id(driver: webdriver, cafe_id: int, article_id: int):
    url = make_article_url_by_id(cafe_id, article_id)
    images = list()

    driver.get(url)

    soup = BeautifulSoup(driver.page_source, 'lxml')
    img_tag = soup.select('#photoview')
    image = reg.search(str(img_tag))
    if bool(image):
        images.append(str(image.group('img')))
        return images

    try:
        driver.switch_to.frame("cafe_main")
    except NoSuchFrameException:
        raise InvalidURLException(url)

    soup = BeautifulSoup(driver.page_source, 'lxml')

    lines = soup.select('#attachLayer > ul > script')

    for line in lines:
        m = reg.search(str(line))
        if bool(m):
            images.append(str(m.group('img')))

    return images
示例#13
0
def scrap(driver: webdriver, url: str):
    images = list()

    driver.get(url)

    # 게시글 내의 이미지가 1개일 경우를 위한 코드
    # Code for case when number of images is only 1
    soup = BeautifulSoup(driver.page_source, 'lxml')
    img_tag = soup.select('#photoview')
    image = reg.search(str(img_tag))
    if bool(image):
        images.append(str(image.group('img')))
        return images

    try:
        driver.switch_to.frame("cafe_main")
    except NoSuchFrameException:
        raise InvalidURLException(url)
    soup = BeautifulSoup(driver.page_source, 'lxml')

    lines = soup.select('#attachLayer > ul > script')

    for line in lines:
        m = reg.search(str(line))
        if bool(m):
            images.append(str(m.group('img')))

    return images
示例#14
0
def getConCafeData(browser: webdriver, url):
    try:
        # URLにアクセス
        browser.get(url)
        sleep(3)

        # エリアのリンク一覧を配列で取得
        AreaList = browser.find_elements_by_class_name("f-found_link")[0]

        for Area in AreaList:
            Area[0].click()
            sleep(3)
            for Shop in browser.find_elements_by_class_name("free_shop"):
                print(shop.find_elements_by_class_name("shop_name ellipsis"))
                sleep(3)

        # データの取得
        articleElements = browser.find_elements_by_class_name("data")
        contactAddress = articleElements[3].text
        updateDate = articleElements[2].text

        return [contactAddress, updateDate]

    except Exception as e:
        return e
示例#15
0
def login(driver: webdriver, username: str, password: str) -> object:
    # Load page
    driver.get("https://www.instagram.com/accounts/login/")

    # Wait for 2FA or Profile link to appear
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, "button[type='submit']")))

    # Login
    driver.find_element_by_css_selector("input[name='username']").send_keys(
        username)
    driver.find_element_by_css_selector("input[name='password']").send_keys(
        password)
    driver.find_element_by_css_selector("button[type='submit']").click()

    # Wait for 2FA or Profile link to appear
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, "a span[aria-label='Profile']")))

    cookies = driver.get_cookies()

    pickle.dump(cookies, open(f"{COOKIES_PATH}/instagram-cookies.pkl", "wb"))
    return cookies
    def fetch_image_urls(query: str,
                         max_links_to_fetch: int,
                         wd: webdriver,
                         sleep_between_interactions: int = 3):
        def scroll_to_end(wd, scroll_point):
            wd.execute_script(f"window.scrollTo(0, {scroll_point});")
            time.sleep(sleep_between_interactions)

        # to build out python package use input function in search_url variable
        # build the unsplash query
        search_url = f"https://www.google.com/search?q=google+images+{query}&rlz=1C1CHBF_enUS830US830&sxsrf=ALeKk03SgL8-qRAfeZd1QDzweydJ4MlDgg:1628187781073&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi61sWSwJryAhXNTDABHYhPDpsQ_AUoAXoECAEQAw&biw=1536&bih=722&dpr=1.25"
        # load the page
        wd.get(search_url)
        time.sleep(sleep_between_interactions)

        image_urls = set()
        image_count = 0
        number_results = 0

        for i in range(1, 20):
            scroll_to_end(wd, i * 1000)
            time.sleep(5)
            thumb = wd.find_elements_by_css_selector("img")
            time.sleep(5)
            for img in thumb:
                print(img)
                print(img.get_attribute('src'))
                image_urls.add(img.get_attribute('src'))
                image_count = len(image_urls)
                number_results = image_count
                time.sleep(.5)
            print(
                f"Found: {number_results} search results. Extracting links...")
        return image_urls
示例#17
0
def get_niche_grade(driver: webdriver, property_id: int):
    neighborhood = 'WASHINGTON'  # getNeighborhood(property_id)
    result = []
    niche_base_url = 'https://www.niche.com/places-to-live/'
    url = niche_base_url + 'washington-dc-district-of-columbia-dc'
    driver.get(url)

    grades = driver.find_elements_by_css_selector(
        '.profile-grade--two .niche__grade')
    keys = [
        'public_school', 'safety', 'jobs', 'nightlife', 'cost_of_living',
        'housing'
    ]
    values = []
    for i in grades:
        text_list = i.text.split()
        if len(text_list) > 0:
            values.append(text_list[1])

    result = {}
    for k, v in zip(keys, values):
        result[k] = [v]

    result['neighborhood'] = [neighborhood]
    df = pd.DataFrame.from_dict(result)

    return result
示例#18
0
def test_delete_file_local_branch(driver: selenium.webdriver, *args, **kwargs):
    """
    Test that a file created on the master branch, deleted in a local branch, and then merged back into the
    master branch does not appear in the master branch.
    """
    r = testutils.prep_py3_minimal_base(driver)
    username, project_title = r.username, r.project_name
    logging.info(f"Navigating to Input Data")
    driver.get(
        f"{os.environ['GIGANTUM_HOST']}/projects/{username}/{project_title}/inputData"
    )
    time.sleep(2)
    logging.info(
        f"Adding a file to the master branch of project {project_title}")
    file_browser_elts = testutils.FileBrowserElements(driver)
    file_browser_elts.drag_drop_file_in_drop_zone()
    time.sleep(4)
    branch_elts = testutils.BranchElements(driver)
    branch_elts.create_local_branch("test-branch")
    time.sleep(8)
    logging.info(f"Deleting file in test-branch")
    file_browser_elts = testutils.FileBrowserElements(driver)
    file_browser_elts.check_file_check_box.find().click()
    file_browser_elts.delete_file_button.wait().click()
    file_browser_elts.confirm_delete_file_button.wait().click()
    time.sleep(2)
    branch_elts.switch_to_alternate_branch()
    branch_elts.merge_alternate_branch()
    logging.info(
        f"Checking that file deleted in test-branch does not appear in master branch"
    )

    assert file_browser_elts.file_browser_empty.find(), \
        "Expected sample-upload.txt to not appear in master branch"
示例#19
0
    def __paginate(driver: webdriver,
                   current_url: str,
                   tag: str,
                   offset: int,
                   timeout=5) -> object:
        try:
            url = override_query_params(current_url, {'start': offset})
            info(tag, f'Opening {url}')
            driver.get(url)

            elapsed = 0
            sleep_time = 0.05  # 50 ms

            info(tag, f'Waiting for new jobs to load')
            # Wait for new jobs to load
            while elapsed < timeout:
                loaded = driver.execute_script(
                    '''
                        return document.querySelectorAll(arguments[0]).length > 0;                
                    ''', Selectors.jobs)

                if loaded:
                    return {'success': True}

                sleep(sleep_time)
                elapsed += sleep_time
        finally:
            pass

        return {'success': False, 'error': 'Timeout on pagination'}
示例#20
0
def test_edge_build_versions(driver: selenium.webdriver, *args, **kwargs):
    """
    Test that the requests edge build version matches the selenium edge build version.

    Args:
        driver
    """
    host = f"{os.environ['GIGANTUM_HOST']}/api/ping"
    # Get requests edge build version
    logging.info("Getting requests edge build version")
    r = requests.get(host)
    if r.status_code != 200:
        logging.error(f"Gigantum is not found at {host}")
        sys.exit(1)
    requests_edge_build_version = json.loads(r.text)
    # Get selenium edge build version
    logging.info("Getting selenium edge build version")
    driver.get(host)
    time.sleep(2)
    if driver.name == 'firefox':
        driver.find_element_by_css_selector("#rawdata-tab").click()
    selenium_edge_build_version = json.loads(
        driver.find_element_by_css_selector("pre").text)

    assert requests_edge_build_version == selenium_edge_build_version, \
        "requests edge build version does not match selenium edge build version"
示例#21
0
def download_data(browser_object: webdriver,
                  config_object: configparser.ConfigParser) -> BeautifulSoup:
    browser_object.get(config_object["rekyl_portal"]["url"])
    time.sleep(1)

    username = browser_object.find_element_by_id("username")
    password = browser_object.find_element_by_css_selector(
        "input[type=password")

    username.send_keys(config_object["rekyl_portal"]["username"])
    password.send_keys(config_object["rekyl_portal"]["password"])

    browser_object.find_element_by_id("button_login_security_low").click()

    time.sleep(3)

    show_errands = Select(browser_object.find_element_by_name("maxhits"))

    show_errands.select_by_index(10)
    time.sleep(5)
    browser_object.find_element_by_name("maxhits").send_keys(Keys.RETURN)
    time.sleep(5)

    iframe = browser_object.find_element_by_id("iframe_workorder")
    browser_object.switch_to.frame(iframe)
    iframe_source = browser_object.page_source
    soup = BeautifulSoup(iframe_source, "html.parser")

    browser_object.close()
    browser_object.quit()
    logging.info("Raw data downloaded")

    return soup
示例#22
0
def login(driver: webdriver, username: str, password: str):
    driver.get(f'{WEBSITE_ROOT}/login')
    driver.find_element_by_css_selector(
        CSS_SELECTORS['login_id']).send_keys(username)
    driver.find_element_by_css_selector(
        CSS_SELECTORS['login_password']).send_keys(password)
    driver.find_element_by_css_selector(CSS_SELECTORS['login_submit']).click()
示例#23
0
def execSearch(browser: webdriver, URL):
    """
    Googleで検索を実行する
    :param browser: webdriver
    """
    # スクリーンショットのファイル名用に日付を取得
    dt = datetime.datetime.today()
    dtstr = dt.strftime("%Y%m%d%H%M%S")

    # Googleにアクセス
    # スクショしたい画面を表示
    browser.get(URL)
    sleep(1)

    #    # キーワードの入力
    #     search_box = browser.find_element_by_name("q")
    #     search_box.send_keys('docker selenium')

    #     # 検索実行
    #     search_box.submit()
    sleep(1)

    # 画面全体をスクショするための調整
    w = browser.execute_script('return document.body.scrollWidth')
    h = browser.execute_script('return document.body.scrollHeight')
    browser.set_window_size(w, h)

    # スクリーンショット
    browser.save_screenshot('images/' + dtstr + '.png')
示例#24
0
def scrape_league_quotes(brow: webdriver, league_name: str) -> webdriver:

    if not brow:
        brow = open_browser()
    brow.get(utl.get_league_url(league_name))
    brow.refresh()
    time.sleep(5)

    for i in range(cfg.MATCHES_TO_SCRAPE):
        matches = find_all_matches(brow=brow, league_name=league_name)

        # Select the match or continue to the next league if done
        try:
            match = matches[i]
        except IndexError:
            break

        match_dt = extract_match_datetime(brow, match)
        if utl.match_is_out_of_range(match_dt):
            break
        else:
            match.click()

        # Fill "matches" table in the db
        last_id = insert_match(brow=brow,
                               league_name=league_name,
                               match_dt=match_dt)

        # Fill "quotes" table in the db
        insert_quotes(brow, last_id)

        return_to_league_page(brow=brow)

    return brow
示例#25
0
def test_task_journey(driver: webdriver, test_app):
    driver.get('http://*****:*****@id='NewItemTitle']")
    text_input.send_keys("New Todo")
    assert driver.find_element_by_xpath(
        "//button[contains(text(),'Add Item')]").text == "Add Item"
    driver.find_element_by_xpath(
        "//button[contains(text(),'Add Item')]").click()
    assert driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as In Progress')]"
    ).text == "Mark as In Progress"
    driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as In Progress')]").click()
    assert driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as Done')]").text == "Mark as Done"
    driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as Done')]").click()
    assert driver.find_element_by_xpath(
        "//summary[contains(text(),'All Done Items')]"
    ).text == "All Done Items"
    driver.find_element_by_xpath(
        "//summary[contains(text(),'All Done Items')]").click()
    assert driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as ToDo')]").text == "Mark as ToDo"
    driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as ToDo')]").click()
    assert driver.find_element_by_xpath(
        "//a[contains(text(),'Mark as In Progress')]"
    ).text == "Mark as In Progress"
示例#26
0
def followAccountsFromList(browser: webdriver, account):
    global remain_follow_count
    """
    Twitterでアカウントのフォロワーをフォローする
    :param browser: webdriver
    """

    # リストにアクセスする
    browser.get('https://twitter.com/' + account + '/followers')
    grid = browser.find_element_by_class_name("GridTimeline")
    profile_cards = grid.find_elements_by_class_name("js-actionable-user")
    limit = ACCOUNT_FOLLOW_LIMIT
    for profile_card in profile_cards:
        if remain_follow_count > 0 and limit > 0:
            is_follow = bool(
                profile_card.find_elements_by_class_name("not-following"))
            is_open = bool(
                profile_card.find_elements_by_class_name("js-protected"))
            description = profile_card.find_element_by_class_name(
                "ProfileCard-bio")
            description_text = description.text
            follow_btn = profile_card.find_elements_by_class_name(
                "follow-text")
            if len(description_text) > 20 and is_follow and bool(follow_btn):
                follow_btn[0].click()
                sleep(1)
                remain_follow_count = remain_follow_count - 1
                limit = limit - 1
        else:
            break
def get_tabelog_ranking(driver: webdriver, area: str, keyword: str):
    result = list()

    driver.get(TABELOG_URL)
    driver.set_page_load_timeout(TIMEOUT)
    sleep(1)

    driver.find_element_by_xpath(AREA_FORM_XPATH).send_keys(area)
    driver.find_element_by_xpath(KEYWORD_FORM_XPATH).send_keys(keyword)
    driver.find_element_by_xpath(SEARCH_BTN_XPATH).click()
    driver.set_page_load_timeout(TIMEOUT)
    sleep(1)

    driver.find_elements_by_class_name(RANKING_BTN_CSS)[0].click()
    driver.set_page_load_timeout(TIMEOUT)
    sleep(1)

    ranking = driver.find_elements_by_class_name(RANKING_LIST_CSS)
    ranking_star = driver.find_elements_by_class_name(RANKING_STAR_LIST_CSS)
    for index, shop in enumerate(ranking):
        if hasattr(shop, "text"):
            newShop = ShopInfo()
            newShop.name = shop.text
            newShop.rank = index + 1
            newShop.star = ranking_star[index].text
            result.append(newShop)

    return result
示例#28
0
def execSearch(browser: webdriver):
    """
    Googleで検索を実行する
    :param browser: webdriver
    """

    # スクリーンショットのファイル名用に日付を取得
    dt = datetime.datetime.today()
    dtstr = dt.strftime("%Y%m%d%H%M%S")

    # get request
    browser.get("http://www.python.org")

    # check words int title
    assert "Python" in browser.title

    # select input elem
    elem = browser.find_element_by_name("q")
    # send key
    elem.clear()
    elem.send_keys("pycon")
    elem.send_keys(Keys.RETURN)

    # exists results?
    assert "No results found." not in browser.page_source

    # brower close (quit: close one tab)
    browser.close()
示例#29
0
def launch_twitter(driver: webdriver):
    """
    :type driver: selenium.webdriver.firefox.webdriver.WebDriver
    """
    twitter_url = "https://twitter.com/search?f=tweets&vertical=default&q=gleam.io&src=typd&lang=en"
    driver.get(twitter_url)
    URLs = driver.find_elements_by_css_selector("li[data-item-id]")
    lurl = []

    for tweet in URLs:
        if tweet.find_elements_by_class_name("twitter-timeline-link"):
            linkr = tweet.find_element_by_class_name("twitter-timeline-link")
            text = linkr.get_attribute("href")
            if len(tweet.find_elements_by_class_name("card2")) == 0 and len(
                    text) == 0:
                if len(
                        tweet.find_elements_by_xpath(
                            ".//*[starts-with(@id,'xdm')]")) != 0:
                    frame = tweet.find_element_by_xpath(
                        ".//*[starts-with(@id,'xdm')]")
                    driver.switch_to.frame(frame)
                    link = driver.find_element_by_xpath("/html/body/div/div/a")
                    text = link.get_attribute("href")
                    driver.switch_to.default_content()
            lurl.append(text)
    return lurl
示例#30
0
def execSearch(browser: webdriver):
    """
    Googleで検索を実行する
    :param browser: webdriver
    """
    # スクリーンショットのファイル名用に日付を取得
    dt = datetime.datetime.today()
    dtstr = dt.strftime("%Y%m%d%H%M%S")

    # Googleにアクセス
    browser.get('https://www.google.co.jp/')
    sleep(1)

    # キーワードの入力
    browser.find_element_by_id('lst-ib').send_keys('docker selenium')

    # 検索実行
    browser.find_element_by_name('btnK').submit()
    sleep(1)

    # スクリーンショット
    browser.save_screenshot('images/' + dtstr + '.png')