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
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()
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)
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
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
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())
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
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
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
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
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
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"
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'}
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"
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
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()
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')
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
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"
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
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()
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
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')