Ejemplo n.º 1
0
def open_cds(cfg_path: str ='', pass_path: str='') -> WebDriver:
    config_path = cfg_path if cfg_path else 'config.json'
    with open(config_path) as f:
        config = json.load(f)

    password_path = pass_path if pass_path else '.pass'
    with open(password_path) as f:
        credential = json.load(f)

    chrome_option = webdriver.ChromeOptions()
    chrome_option.add_experimental_option("prefs",
                                          {"download.default_directory": os.path.join(os.getcwd(), 'template')})
    if 'driver_executable_path' in config and os.path.exists(config['driver_executable_path']):
        browser_driver = Chrome(executable_path=config['driver_executable_path'], chrome_options=chrome_option)
    else:
        browser_driver = Chrome(chrome_options=chrome_option)

    browser_driver.get(config['url_link_cds_eit100'])
    input_email = browser_driver.find_element_by_css_selector('input[name= "USER"]')
    input_email.send_keys(credential['user_name'])

    input_password = browser_driver.find_element_by_css_selector('input[name = "PASSWORD"]')
    input_password.send_keys(decrypt(credential['password'], str(uuid.getnode())))

    btn_login = browser_driver.find_element_by_css_selector('input[value = "Log on"]')
    btn_login.click()
    return browser_driver
Ejemplo n.º 2
0
def get_all_salaries(city_urls, cities: List[str]) -> Iterable[Dict[str, Any]]:
    """ Return a dict of city, avg_salary, and, if available, min/max salaries per city."""
    browser = Chrome()
    for url, city in zip(city_urls, cities):
        print(url)
        browser.get(url)
        try:
            sel_title = 'td.bar-chart-bootstrap-range-label'
            sel_title2 = 'div.pay-spotlight__pay-value'
            avg_salary = browser.find_element_by_css_selector(
                sel_title2).text.strip().strip('$').replace(',', '')
            salary_range = browser.find_element_by_css_selector(sel_title).text
            min_salary, max_salary = parse_salary_range(salary_range)
            result = {
                'city': city,
                'avg_salary': avg_salary,
                'min_salary': min_salary,
                'max_salary': max_salary
            }
            yield result
        except NoSuchElementException:
            sel_title = 'div.pay-spotlight__pay-value'
            avg_salary = browser.find_element_by_css_selector(
                sel_title).text.strip().strip('$')
            result = {'city': city, 'avg_salary': avg_salary}
            yield result
def test_post_count_after_search():
    # Uruchomienie przeglądarki Chrome. Ścieżka do chromedrivera
    # ustawiana automatycznie przez bibliotekę webdriver-manager
    browser = Chrome(executable_path=ChromeDriverManager().install())

    # Otwarcie strony

    browser.get('https://www.awesome-testing.com/')

    # Inicjalizacja searchbara i przycisku search
    search_input = browser.find_element_by_css_selector("input.gsc-input")
    search_button = browser.find_element_by_css_selector('.gsc-search-button')
    # Szukanie

    search_input.send_keys('cypress')
    search_button.click()

    # Czekanie na stronę
    time.sleep(5)  # czekamy na posty

    # Pobranie listy tytułów
    list_of_post = browser.find_elements(By.CSS_SELECTOR, '.post-title a')

    # Asercja że lista ma 3 elementy
    assert len(list_of_post) == 3

    # Zamknięcie przeglądarki
    browser.quit()
Ejemplo n.º 4
0
def crawl_scholar(title_list, min_sleeping_time=1):
    browser = Chrome()
    output = []
    browser.get('https://scholar.google.co.kr/')
    try:
        for idx1, title in enumerate(title_list):
            browser.get('https://scholar.google.co.kr/')
            time.sleep(randint(min_sleeping_time, min_sleeping_time + 3))
            search = browser.find_element_by_css_selector('#gs_hdr_tsi')
            search.clear()
            search.send_keys(title)
            #time.sleep(3)
            search_button = browser.find_element_by_css_selector(
                '#gs_hdr_tsb > span')
            search_button.click()
            #time.sleep(3)
            try:
                abstract_table = browser.find_element_by_class_name('gs_rs')
                abstract = abstract_table.text
            except:
                print("Error at title {}: {}".format(idx1, e))
                abstract = ''
            output.append(abstract)
    except:
        return output
    return output
Ejemplo n.º 5
0
def gather_thumbs():
    opt = Options()
    opt.add_argument(
        'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
        'Chrome/74.0.3729.169 Safari/537.36')
    opt.add_argument("--disable-notifications")
    browser = Chrome(executable_path='chromedriver.exe', options=opt)
    browser.maximize_window()
    browser.get(URL)
    for _ in range(N):
        browser.find_element_by_tag_name('body').send_keys(Keys.END)
        sleep(1)
        try:
            browser.find_element_by_css_selector('input.mye4qd').click()
            sleep(1)
        except selenium.common.exceptions.ElementNotInteractableException:
            pass
        over = browser.find_element_by_css_selector('div.Yu2Dnd').text
        if over != '':
            break
    thumbs_urls = browser.find_elements_by_css_selector('a.mM5pbd')
    list_urls = []
    for href in thumbs_urls:
        action_chains = ActionChains(browser)
        action_chains.context_click(href).perform()
        list_urls.append(href.get_attribute('href'))
        if len(list_urls) % 30 == 0:
            print('collecting links ...', len(list_urls))
    browser.close()
    print('------------------------THUMBS collected. Total: ', len(list_urls))
    return list_urls
def test_post_count_after_search():
    # Uruchomienie przeglądarki Chrome. Ścieżka do chromedrivera
    # ustawiana automatycznie przez bibliotekę webdriver-manager
    browser = Chrome(executable_path=ChromeDriverManager().install())

    # Otwarcie strony

    browser.get('https://www.awesome-testing.com/')

    # Inicjalizacja searchbara i przycisku search
    search_input = browser.find_element_by_css_selector("input.gsc-input")
    search_button = browser.find_element_by_css_selector('.gsc-search-button')
    # Szukanie

    search_input.send_keys('cypress')
    search_button.click()

    # Czekanie na stronę
    wait = WebDriverWait(browser, 10)
    grey_status_bar = (By.CLASS_NAME, 'status-msg-body')
    wait.until(expected_conditions.visibility_of_element_located(grey_status_bar))

    # Pobranie listy tytułów
    list_of_post = browser.find_elements(By.CSS_SELECTOR, '.post-title a')

    # Asercja że lista ma 3 elementy
    assert len(list_of_post) == 3

    # Zamknięcie przeglądarki
    browser.quit()
Ejemplo n.º 7
0
def additionalCrawl2():
    # 增加爬取信息公开数据
    target = 'http://www.csrc.gov.cn/pub/zjhpublic/'

    driver = Chrome(executable_path="/usr/local/bin/chromedriver",
                    options=CHROME_OPS)
    driver.get(target)
    # iframe = driver.find_element_by_css_selector('iframe#divNoObjectFound')
    driver.switch_to.frame("DataList")
    page_source = driver.page_source

    # 爬取20页的数据
    for page in range(20):
        bs = BeautifulSoup(
            page_source,
            'lxml',
        )
        all_row = bs.find_all('div', class_="row")
        for row in all_row:
            res_map = {}
            href = row.find('a').get('href')
            title = row.find('a').get_text()
            date = row.find('li', class_="fbrq").get('title')
            res_map["title"] = title
            res_map["date"] = format_date(date)
            res_map[
                "url"] = 'http://www.csrc.gov.cn/pub/zjhpublic/' + href.replace(
                    '../', '')

            TARGET_LISTS.append(res_map)
        if page < 20:
            driver.find_element_by_css_selector('span.nav_go_next').click()
            page_source = driver.page_source

    driver.close()
Ejemplo n.º 8
0
def google_distance(search_tag_list):
    google_distance_list = []
    # 建立Chrome物件
    driver = Chrome('./chromedriver')
    url = 'https://www.google.com.tw/maps/dir///@24.9554014,121.2384829,17z/data=!4m2!4m1!3e0?hl=zh-TW'
    for start in search_tag_list:
        for end in search_tag_list:

            if start == end:
                pass
            else:

                driver.get(url)
                time.sleep(1)
                driver.find_element_by_xpath(
                    '//*[@id="sb_ifc50"]/input').send_keys(
                        start.replace('\n', ''))  # --- 輸入起點

                time.sleep(1)
                driver.find_element_by_xpath(
                    '//*[@id="sb_ifc51"]/input').send_keys(
                        end.replace('\n', ''))  # --- 輸入目的

                time.sleep(2)
                driver.find_element_by_xpath(
                    '//*[@id="sb_ifc51"]/input').send_keys(Keys.ENTER)
                time.sleep(5)
                driver.find_element_by_css_selector(
                    'span#section-directions-trip-details-msg-0').click()
                time.sleep(3)

                soup = BeautifulSoup(driver.page_source, 'html.parser')

                a = soup.select('h1[class="section-trip-summary-title"]')
                c = soup.select('h2[class="directions-mode-group-title"]')
                # print(c)
                address = [d.text for d in c]

                # print(b)
                for i in a:
                    # print(i.text.split('-')[0])
                    # time.sleep(1)

                    save_data_dict = {
                        '出發地點': start.replace('\n', ''),
                        '目的地': end.replace('\n', ''),
                        '所需時間': i.text.split('-')[0],
                        '路徑': address
                    }

                    save_data_js = json.dumps(save_data_dict,
                                              ensure_ascii=False)

                    # print(save_data_js)
                    google_distance_list.append(save_data_js)

    driver.close()

    return google_distance_list
Ejemplo n.º 9
0
def test_imdb_search():
    driver = Chrome(
        "/Users/andymckerrow/Helio/QAPoint/Python-Selenium-UI-Tests/_drivers/chromedriver"
    )
    driver.get("https://www.imdb.com/")
    driver.find_element_by_id('navbar-query').send_keys('badlands')
    driver.find_element_by_css_selector('[class*="magnifyingglass"]').click()
    assert driver.title == 'Find - IMDb'
Ejemplo n.º 10
0
 def open_the_browser(self):
     options = ChromeOptions()
     options.headless = False  # -> FALSE IF YOU WANT TO SEE THE BROWSER BROWSING
     driver = Chrome(options=options, executable_path=ChromeDriverManager().install())
     driver.get(self.WEB_LINKS["football"])
     sleep(3)
     driver.find_element_by_css_selector('#close-cc-bar').click()
     return driver
Ejemplo n.º 11
0
def main():
    driver = Chrome("./chromedriver")
    driver.get("https://accounts.google.com/signin/v2/identifier?service=youtube&uilel=3&passive=true&continue=https"
               "%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26hl%3Dzh-TW%26next"
               "%3Dhttps%253A%252F%252Fwww.youtube.com%252F%253Fgl%253DTW%2526tab%253Dw1&hl=zh-TW&ec=65620&flowName"
               "=GlifWebSignIn&flowEntry=ServiceLogin")
    driver.find_element_by_id("identifierId").send_keys("djflsdflkl")
    driver.find_element_by_css_selector("span.RveJvd.snByac").click()
Ejemplo n.º 12
0
def main():
    driver = Chrome("./chromedriver")
    url = "https://www.ptt.cc/bbs/index.html"
    driver.get(url)

    board = driver.find_element_by_css_selector("div.board-name")
    board.click()
    driver.find_element_by_css_selector("button.btn-big").click()
Ejemplo n.º 13
0
 def test_get_secret(self, browser: webdriver.Chrome, link):
     browser.get(link)
     textarea = browser.find_element_by_css_selector("textarea.textarea")
     answer = math.log(int(time.time()))
     textarea.send_keys(str(answer))
     submit = browser.find_element_by_css_selector("button.submit-submission")
     submit.click()
     result = browser.find_element_by_css_selector("pre.smart-hints__hint").text
     assert result == "Correct!", result
Ejemplo n.º 14
0
def take_screenshots():
    driver = Chrome()
    driver.get('http://127.0.0.1:7000')
    driver.set_window_size(1260, 800)
    driver.save_screenshot('main.png')

    driver.find_element_by_css_selector('.feed-post').click()
    time.sleep(5)  # Wait for MathJax to do its thing.
    driver.save_screenshot('post.png')
    driver.close()
Ejemplo n.º 15
0
def take_screenshots():
    driver = Chrome()
    driver.get('http://127.0.0.1:7000')
    driver.set_window_size(1260, 800)
    driver.save_screenshot('main.png')

    driver.find_element_by_css_selector('.feed-post').click()
    time.sleep(5)  # Wait for MathJax to do its thing.
    driver.save_screenshot('post.png')
    driver.close()
Ejemplo n.º 16
0
 def __init__(self, gym, login, password):
     Chrome.__init__(self, self.executable_path, options=self.options)
     Chrome.implicitly_wait(self, self.time_to_wait)
     Chrome.get(self, self.ff_website)
     Chrome.find_element_by_css_selector(
         self, self.gym_selector).click()  # Expand gym location dropdown
     Chrome.find_element_by_link_text(self, gym).click()  # Choose gym
     Chrome.find_element_by_id(self, 'requiredtxtUserName').send_keys(login)
     Chrome.find_element_by_id(self,
                               'requiredtxtPassword').send_keys(password)
     Chrome.find_element_by_id(self, 'btnLogin').click()  # Login
Ejemplo n.º 17
0
def test_saysth():
    browser = Browser()
    # 用户打开了主页
    browser.get(index_url)
    left_bar = browser.find_element_by_class_name('layout-aside-left')
    # 用户看见了登录按键
    login_button = left_bar.find_element_by_class_name('q-card-main')
    assert '登录' in login_button.text
    # 用户点击了登录
    login_button.click()
    sleep(1)
    # 用户登录了网站
    assert try_login_with(browser, TESTING_CARD_ID, TESTING_PASSWORD)
    # 用户点击了"广场"
    browser.find_element_by_xpath(
        '//*[@id="q-app"]/div/aside/div[1]/div[2]/div[3]/div[2]/div').click()
    # 用户点击了"+"按钮
    browser.find_element_by_css_selector(
        'div.layout-page-container.transition-generic > main > div:nth-child(1) > div.z-fixed.fixed-bottom-right > button'
    ).click()
    sleep(1)
    # 用户输入了一些话
    browser.find_element_by_xpath(
        '/html/body/div[3]/div/div/div[2]/div[1]/div/div/div/div/a/div[2]/div[2]/textarea'
    ).send_keys('测试')
    # 用户点击了发布
    browser.find_element_by_xpath(
        '/html/body/div[3]/div/div/div[1]/div/button[2]/span').click()
    sleep(1)
    # 用户看见了自己的帖子
    the_post = browser.find_element_by_css_selector(
        '#q-app > div > div.layout-page-container.transition-generic > main > div:nth-child(1) > div.q-infinite-scroll > div.q-infinite-scroll-content > div:nth-child(3)'
    )
    post_text = the_post.text
    assert '测试' in post_text
    # 用户点击了删除
    the_post.find_element_by_tag_name('button').click()
    sleep(1)
    browser.find_element_by_class_name(
        'modal-buttons').find_elements_by_tag_name('button')[1].click()
    sleep(1)
    # 用户不再能看见了自己的帖子了
    try:
        the_post = browser.find_element_by_css_selector(
            '#q-app > div > div.layout-page-container.transition-generic > main > div:nth-child(1) > div.q-infinite-scroll > div.q-infinite-scroll-content > div:nth-child(3)'
        )
    except:
        pass
    else:
        post_text = the_post.text
        assert '测试' not in post_text
    browser.close()
Ejemplo n.º 18
0
def claim_prize(driver: webdriver.Chrome, email_addr: str):
    try:
        claim_prize_button = WebDriverWait(driver, 5).until(
            EC.visibility_of_element_located(
                (By.CSS_SELECTOR, "div.prize-overlay button.main-button")))
        button_click(driver, claim_prize_button)
    except:
        return -1

    # Opens another tab

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

    name_input = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located(
            (By.CSS_SELECTOR, "input[name='name']")))
    name_input.send_keys(get_random_word())

    time.sleep(0.5)

    email_input = driver.find_element_by_css_selector("input[name='email']")
    email_input.send_keys(email_addr)

    time.sleep(0.5)

    region_select = driver.find_element_by_css_selector(
        "select[name='gameServer']")
    button_click(driver, region_select)

    time.sleep(0.5)

    euw = driver.find_element_by_css_selector(
        "option[value='Europe West (EUW)']")
    euw.click()

    time.sleep(0.5)

    checkmark = driver.find_element_by_class_name("mc-checkmark")
    button_click(driver, checkmark)

    time.sleep(0.5)

    submit_button = driver.find_element_by_css_selector("input.custom-button")
    button_click(driver, submit_button)

    save_email(email_addr)

    time.sleep(5)
    return 1
Ejemplo n.º 19
0
def homework():
    print("取得します")
    options = ChromeOptions()
    options.add_argument('--headless')
    driver = Chrome(options=options)
    driver.get('https://hcms.hosei.ac.jp/')
    print("取得中...")
    WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
    driver.find_element_by_xpath("//*[@id='username']").send_keys(
        os.environ['ID'])
    driver.find_element_by_xpath("//*[@id='password']").send_keys(
        os.environ['PASS'])
    driver.find_element_by_css_selector(
        "button.form-element.form-button").click()
    driver.implicitly_wait(10)
    print("ログイン完了")
    iframe = driver.find_element_by_xpath(
        "//*[@id='Main46dc03dbxaccex4553x867cxd1f69a7656b1']")
    driver.switch_to.frame(iframe)
    WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
    time.sleep(1)
    try:
        size = len(
            driver.find_element_by_xpath("/html/body/div/form/table/tbody").
            find_elements_by_tag_name('tr'))
    except NoSuchElementException:
        print('エラー')
        return
    list1 = [[0 for i in range(2)] for j in range(size - 1)]
    print("課題取得中")
    for i in range(size - 1):
        name = driver.find_element_by_xpath(
            "/html/body/div/form/table/tbody/tr[" + str(i + 2) +
            "]/td[4]").text
        list1[i][0] = name
        due = driver.find_element_by_xpath(
            "/html/body/div/form/table/tbody/tr[" + str(i + 2) +
            "]/td[3]").text
        list1[i][1] = due
    print("取得完了")
    temp = max(list1[:], key=len)
    Max = max(temp, key=len)
    headers = ["教科", "期限"]
    for i in range(len(list1)):
        leftTime = math.ceil(
            (datetime.datetime.strptime(list1[i][1], "%Y/%m/%d %H:%M") -
             datetime.datetime.now()).seconds / 3600)
        if leftTime == 2:
            text = list1[i][0] + "あと" + str(leftTime) + "時間ですよ"
            slack.chat.post_message('URZM8NGHY', str(text), as_user=True)
    driver.quit()
Ejemplo n.º 20
0
def test_imdb_badlandsreleasedate():
    driver = Chrome(
        "/Users/andymckerrow/Helio/QAPoint/Python-Selenium-UI-Tests/_drivers/chromedriver"
    )
    driver.get("https://www.imdb.com/")
    driver.find_element_by_id('navbar-query').send_keys('badlands')
    driver.find_element_by_css_selector('[class*="magnifyingglass"]').click()
    driver.find_element_by_link_text('Badlands').click()
    assert 'Badlands (1973) - IMDb' + '1973'
    assert 'Badlands (1973) - IMDB' + 'PG'
    assert 'Badlands (1973) - IMDB' + '1hr 34min'
    assert 'Badlands (1973) - IMDB' + 'Crime'
    assert 'Badlands (1973) - IMDB' + 'Drama'
    assert 'Badlands (1973) - IMDB' + 'Terrence Malick'
Ejemplo n.º 21
0
class CloudFoundry(object):
    def __init__(self, headless=False):
        options = ChromeOptions()
        options.add_argument("disable-extensions")
        options.add_argument("incognito")
        if headless:
            options.add_argument("headless")
        if os.name == 'nt':
            path_to_chrome = str(Path('./chromedriver.exe').relative_to('.'))
        else:
            path_to_chrome = str(Path('./chromedriver').absolute())
        self.browser = Chrome(path_to_chrome, options=options)

    def logging_in(self, login, password):
        self.browser.get('https://login.cf.eu1.mindsphere.io/passcode')
        # self.browser.get('https://academy2.eu1.mindsphere.io')
        # self.browser.get('https://eo3codev.eu1.mindsphere.io')
        # self.browser.get('https://svcusr.cn1.mindsphere-in.cn')
        # self.browser.get('https://svcdev.cn1.mindsphere-in.cn/')
        # self.browser.get('https://svcuopt.cn1.mindsphere-in.cn')
        # self.browser.get('https://kosfprod.eu1.mindsphere.io/')
        self.wait_until_css_element_object_found('#username')
        self.browser.find_element_by_css_selector('#username').send_keys(login)
        # self.browser.find_element_by_css_selector('#emailaddress').send_keys(login)
        self.browser.find_element_by_css_selector('#password').send_keys(
            password)
        self.browser.find_element_by_css_selector('.btn-yellow').submit()

    def get_temporary_passcode(self):
        self.wait_until_css_element_object_found('h2')
        self.temporary_passcode = self.browser.find_element_by_css_selector(
            'h2').text
        self.browser.quit()

    def highlight_background_by_css(self, css_selector):
        self.browser.execute_script('window.document.querySelector(\'' +
                                    css_selector +
                                    '\').style.backgroundColor= "yellow"')
        self.browser.execute_script('window.document.querySelector(\'' +
                                    css_selector + '\').scrollIntoView')
        # input('Press Enter')
        el_object = self.browser.find_element_by_css_selector(css_selector)
        ActionChains(self.browser).move_to_element(el_object).perform()
        sleep(1)

    def highlight_background_by_id(self, id_element):
        self.browser.execute_script('window.document.getElementById(\'' +
                                    id_element +
                                    '\').style.backgroundColor= "yellow"')
        self.browser.execute_script('window.document.getElementById(\'' +
                                    id_element + '\').scrollIntoView')
        # input('Press Enter')
        el_object = self.browser.find_element_by_id(id)
        ActionChains(self.browser).move_to_element(el_object).perform()
        sleep(1)

    def wait_until_css_element_object_found(self, css_param, wait_time=10):
        wait = WebDriverWait(self.browser, wait_time)
        wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, css_param)))
Ejemplo n.º 22
0
def scrape_company_data(companies):
    """Scrape data from Glassdoor on companies in list."""
    browser = Chrome()
    url = "https://www.glassdoor.com/Reviews/index.htm"
    browser.get(url)
    final_data = []
    sleep(23)

    for company in companies:
        try:
            sel = "input#KeywordSearch.keyword"
            search_bar = browser.find_element_by_css_selector(sel)

            search_bar.send_keys(company)
            search_bar.send_keys(Keys.ENTER)
            sleep(4)

            if len(browser.window_handles) > 1:
                tab_1, tab_2 = browser.window_handles
                browser.switch_to.window(tab_1)
                browser.close()
                browser.switch_to.window(tab_2)

            sel = "a.tightAll.h2"
            company_link = browser.find_element_by_css_selector(sel)
            company_link.click()
            sleep(4)

            sel = "a.eiCell.cell.reviews"
            reviews_link = browser.find_element_by_css_selector(sel)
            reviews_link.click()
            sleep(4)

            temp_stats = [company]
            stats = get_stats(browser)
            for stat in stats:
                temp_stats.append(stat)
            print(temp_stats)
            final_data.append(temp_stats)

            browser.get(url)
        except Exception as e:
            print(e)
            print('error with ', company)
            url = "https://www.glassdoor.com/Reviews/index.htm"
            browser.get(url)

    return pd.DataFrame(
        final_data,
        columns=['Company', 'Rating', 'Employee Recommended', 'CEO Approval'])
Ejemplo n.º 23
0
def main():
    excel_df = pd.read_excel('challenge.xlsx', sheet_name='Sheet1')
    excel_data = excel_df.to_dict(orient='records')

    driver = Chrome()
    driver.get('http://www.rpachallenge.com/')

    start_button = driver.find_element_by_tag_name('button')
    start_button.click()

    for item in excel_data:
        first_name_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelFirstName"]')
        last_name_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelLastName"]')
        company_name_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelCompanyName"]')
        role_in_company_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelRole"]')
        address_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelAddress"]')
        email_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelEmail"]')
        phone_number_input = driver.find_element_by_css_selector('input[ng-reflect-name="labelPhone"]')

        submit_button = driver.find_element_by_css_selector('input[type="submit"]') 

        form_inputs = [first_name_input, last_name_input, company_name_input, role_in_company_input, address_input, email_input, phone_number_input]
        
        for index, (key, value) in enumerate(item.items()):
            form_inputs[index].send_keys(value)

        submit_button.click()

    time.sleep(5)
    driver.close()
Ejemplo n.º 24
0
def check_element_exist(driver: webdriver.Chrome,
                        path: str,
                        by: str = 'xpath') -> bool:
    try:
        if by == 'xpath':
            driver.find_element_by_xpath(path)
        elif by == 'css':
            driver.find_element_by_css_selector(path)
        elif by == 'id':
            driver.find_element(By.ID, path)
        else:
            logger.info(f"Unable to check element using '{by}'")
    except NoSuchElementException:
        return False
    return True
Ejemplo n.º 25
0
    def get_baidu_hot(self):
        """

        :return: 返回百度热搜词条列表,每次20条
        """
        option = ChromeOptions()
        option.add_argument("--headless")  # 隐藏游览器
        option.add_argument("--no-sandbox")
        option.add_argument("--disable-gpu")
        option.add_argument("--disable-dev-shm-usage")

        # browser = Chrome(options=option, executable_path=self.Chrome_drive_path)

        browser = Chrome(options=option)
        url = self.url
        browser.get(url)
        # 找到展开按钮对象
        but = browser.find_element_by_css_selector(self.but_selector)
        # 点击加载更多
        but.click()
        # 爬虫与反爬,模拟人等待1秒
        time.sleep(1)
        # 找到热搜标签
        c = browser.find_elements_by_xpath(self.label_xpath)
        # 获取标签内容
        context = [i.text for i in c]
        browser.close()
        return context
Ejemplo n.º 26
0
def get_baidu_hot():
    """
    :return:返回百度疫情热搜
    """
    option = ChromeOptions()  # 创建谷歌浏览器实例
    option.add_argument("--headless")  # 隐藏浏览器
    option.add_argument("--no-sandbox")

    d = int(time.strftime("%d", time.localtime())) - 1  # 应对 more_btn 地址的变化

    url = "https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1"
    browser = Chrome(options=option, executable_path="chromedriver.exe")
    browser.get(url)

    # 找到展开按钮
    more_btn = browser.find_element_by_css_selector(
        '#ptab-0 > div > div.VirusHot_1-5-4_32AY4F.VirusHot_1-5-4_2RnRvg > section > div')
    # more_btn = browser.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-%d'%(d)+'_32AY4F.VirusHot_1-5-%d'%(d)+'_2RnRvg > section > div')
    more_btn.click()
    time.sleep(1)  # 等待1秒

    # 找到热搜标签
    infos = browser.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
    context = [i.text for i in infos]
    return context
Ejemplo n.º 27
0
def get_baidu_hot():
    """

    :return: 百度疫情热搜
    """
    option = ChromeOptions()
    option.add_argument("--headless")  # 隐藏浏览器
    option.add_argument("--no-sandbox")

    url = "https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1"

    browser = Chrome(options=option)
    browser.get(url)
    # print(browser.page_source)
    but = browser.find_element_by_css_selector(
        '#ptab-0 > div > div.VirusHot_1-5-4_32AY4F.VirusHot_1-5-4_2RnRvg > section > div'
    )
    # 点击展开
    but.click()
    # 等待3s
    time.sleep(3)

    c = browser.find_elements_by_xpath(
        '//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
    context = [i.text for i in c]
    # for i in c:
    #     print(i.text)

    # browser.close()
    return context
Ejemplo n.º 28
0
def get_baidu_hot():
    """
    :return:返回百度热搜词
    """
    url = "https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_aladin_banner#tab1"
    # 得到展开全部按钮的selector
    selector = "#ptab-1 > div.Virus_1-1-300_2SKAfr > div.Common_1-1-300_3lDRV2 > span"
    xpath = "//*[@id=\"ptab-1\"]/div[3]/div/div[2]/a/div"  # 得到标题的Xpath

    # 隐藏每次打开浏览器的操作
    option = ChromeOptions()
    option.add_argument("--headless")  # 隐藏浏览器
    option.add_argument("--no-sandbox")  # 彻底停用沙箱

    # 创建浏览器对象
    brower = Chrome(options=option)
    brower.get(url)
    # print(brower.page_source)  # 获取到网页源码

    button = brower.find_element_by_css_selector(selector)
    button.click()  # 点击展开
    time.sleep(1)  # 等待1秒

    xpath_text = brower.find_elements_by_xpath(xpath=xpath)
    context = [i.text for i in xpath_text]
    # print(context)
    brower.close()
    return context
Ejemplo n.º 29
0
class Greenhouse:

    FIRST_NAME = 'first_name'
    LAST_NAME = 'last_name'
    EMAIL = 'email'
    PHONE = 'phone'

    def __init__(self):
        self.driver = Chrome()
        self.data = {
            'first_name': '',
            'last_name': '',
            'email': '',
            'phone': ''
        }

    def get(self, url):
        self.driver.get(url)

    def enter_field(self, id, value):
        input_text = self.driver.find_element_by_id(id)
        input_text.send_keys(value)

    def enter_by_attribute(self, attribute, value):
        e = self.driver.find_element_by_css_selector(
            "[autocomplete='custom-question-linkedin-profile']")
        e.send_keys('LinkedIN')
def get_host_search():
    from selenium.webdriver import Chrome, ChromeOptions
    # google chrome的无头模式,即不打开浏览器,后台自动加载数据,可以大幅度提高爬虫效率,
    option = ChromeOptions()
    option.add_argument('--headless')  # 一藏浏览器,可以大幅度提高爬虫效率
    option.add_argument('--no-sandbox')  # 部署的时候linux还会要求参数,需要禁用sandbox
    broswer = Chrome('driver_file/chromedriver', options=option)
    url = 'https://voice.baidu.com/act/virussearch/virussearch/'
    broswer.get(url)
    # print(broswer.page_source)
    more = broswer.find_element_by_css_selector(
        '#ptab-0 > div > div.VirusHot_1-5-6_32AY4F.VirusHot_1-5-6_2RnRvg > section > div'
    )
    # print(more)
    more.click()
    # more.click()  # 点击展开
    time.sleep(1)  # 等待一定时间
    data_lst = broswer.find_elements_by_xpath(
        '//*[@id="ptab-0"]/div/div[1]/section/a/div/span[2]')  # list
    # for item in lst:
    #   print(item.text)
    # print(data_lst)
    context = [item.text for item in data_lst]  # 在关闭浏览器之前获取,否则报session失效
    broswer.close()  # 关闭浏览器
    # print(context)
    return context
Ejemplo n.º 31
0
def get_baidu_hot():
    """
    :return: 返回百度疫情热搜
    """
    option = ChromeOptions()  # 创建谷歌浏览器实例
    option.add_argument("--headless")  # 隐藏浏览器
    option.add_argument('--no-sandbox')

    url = "https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1"
    browser = Chrome(options=option, executable_path="./chromedriver.exe")
    browser.get(url)
    # print(browser.page_source)
    # 找到展开按钮
    # browser.switch_to_frame(browser.find_element_by_xpath("//iframe[contains(@id,'x-URS-iframe')]"))
    # dl = browser.find_element_by_xpath('//*[@id="main"]/div/div/section/div[2]/div/div[2]/section/div')
    # dl.click()
    # but = browser.find_element_by_css_selector\
    #     ('#main > div > div > section > VirusSearch_1-5-6_2K0WZ5 > div > div.VirusHot_1-5-6_32AY4F.VirusHot_1-5-6_2RnRvg > section')
    but = browser.find_element_by_css_selector(
        '#main > div > div > section > div.VirusSearch_1-5-6_3ae6cO >'
        ' #ptab-0 > div > div.VirusHot_1-5-6_32AY4F.VirusHot_1-5-6_2RnRvg > section>div'
    )
    print(but)
    but.click()
    time.sleep(1)
    # 找到热搜标签
    # c = browser.find_elements_by_xpath('//*[@id="main"]/div/div/section/div[2]/div/div[2]/section/a/div/span[2]')
    c = browser.find_elements_by_xpath(
        '//*[@id="main"]/div/div/section/div[2]/*[@id="ptab-0"]/div/div[1]/section/a/div/span[2]'
    )
    print(c)
    context = [i.text for i in c]  # 获取标签内容
    print(context)
    return context
Ejemplo n.º 32
0
def get_selected_text(url: str, selectors: Selectors, driver: Chrome,
                      logger: Logger) -> Optional[dict]:
    current_url = None
    selector = None
    try:
        driver.get(url)
        WebDriverWait(driver, 10).until(
            expected_conditions.presence_of_element_located(
                (By.CSS_SELECTOR, 'body')))
        current_url = driver.current_url
        selector = selectors.get_selector(current_url)
        WebDriverWait(driver, 10).until(
            expected_conditions.presence_of_element_located(
                (By.CSS_SELECTOR, selector)))
        selected_text = driver.find_element_by_css_selector(selector).text
        return {
            'url': current_url,
            'selector': selector,
            'selected_text': selected_text,
        }
    except TimeoutException as e:
        logger.error(
            json.dumps(
                {
                    'event': 'detect_related_url:get_selected_text:timeout',
                    'details': {
                        'url': current_url or url,
                        'selector': selector,
                        'error': e.__str__()
                    }
                },
                ensure_ascii=False))
        return None
Ejemplo n.º 33
0
class SeleniumTestCase(LiveServerTestCase):
    """
    Base class for Selenium tests.  Allows tests to be written independently
    of which browser they're going to be run in.
    """

    @classmethod
    def appium_command_executor(cls):
        """ Get the command executor URL for iOS simulator testing """
        if hasattr(cls, '_appium_executor'):
            return cls._appium_executor
        # Get the address iWebDriver will connect to
        address = None
        try:
            address = socket.gethostbyname(socket.gethostname())
        except:
            # Use default address defined below
            pass
        # If we don't have an address we should use localhost
        if not address:
            address = '127.0.0.1'
        port = 4723
        cls._appium_executor = "".join(["http://", address, ":", str(port),
                                       '/wd/hub'])
        return cls._appium_executor

    @classmethod
    def setUpClass(cls):
        # Create the screenshots directory if it doesn't exist yet
        screenshot_dir = settings.SELENIUM_SCREENSHOT_DIR
        if screenshot_dir and not os.path.exists(screenshot_dir):
            os.makedirs(screenshot_dir)
        super(SeleniumTestCase, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(SeleniumTestCase, cls).tearDownClass()

    def setUp(self):
        """ Start a new browser instance for each test """
        self._screenshot_number = 1
        self.browser = os.getenv('SELENIUM_BROWSER',
                                 settings.SELENIUM_DEFAULT_BROWSER)
        if os.getenv('SELENIUM_HOST'):
            self.sel = self.sauce_labs_driver()
        elif self.browser == 'firefox':
            self.sel = Firefox()
        elif self.browser == 'htmlunit':
            self.sel = RemoteWebDriver(desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)
        elif self.browser in ['ios', 'ipad', 'ipod', 'iphone']:
            capabilities = {
                'app': 'safari',
                'browserName': '',
                'device': 'iPhone Simulator',
                'os': 'iOS 6.1'
            }
            self.sel = RemoteWebDriver(command_executor=self.appium_command_executor(),
                                       desired_capabilities=capabilities)
        elif self.browser == 'opera':
            self.sel = RemoteWebDriver(desired_capabilities=DesiredCapabilities.OPERA)
        elif self.browser == 'iexplore':
            self.sel = RemoteWebDriver(desired_capabilities=DesiredCapabilities.INTERNETEXPLORER)
        elif self.browser == 'phantomjs':
            self.sel = PhantomJS(service_args=['--debug=true',
                                               '--webdriver-loglevel=DEBUG'])
        elif self.browser == 'safari':
            # requires a Safari extension to be built from source and installed
            self.sel = RemoteWebDriver(desired_capabilities=DesiredCapabilities.SAFARI)
        else:
            self.sel = Chrome()
        self.sel.set_page_load_timeout(settings.SELENIUM_PAGE_LOAD_TIMEOUT)
        # Give the browser a little time; Firefox throws random errors if you
        # hit it too soon
        time.sleep(1)

    def tearDown(self):
        # Check to see if an exception was raised during the test
        info = sys.exc_info()
        passed = info[0] is None
        if not passed:
            # Want to see what went wrong
            self.screenshot()
        self.report_status(passed)
        if hasattr(self, 'sel'):
            self.sel.quit()
        super(SeleniumTestCase, self).tearDown()

    # ~~~~~~~~~~~~~~~~~~~~~~~~~ Selenium operations ~~~~~~~~~~~~~~~~~~~~~~~~~~

    def assert_hidden(self, selector):
        element = self.wait_for_element(selector)
        msg = "'%s' should not be visible" % selector
        assert not element.is_displayed(), msg

    def assert_not_present(self, selector):
        assert_raises(NoSuchElementException,
                      self.sel.find_element_by_css_selector, selector)

    def assert_not_visible(self, selector):
        """ Ok if it's either missing or hidden """
        try:
            element = self.sel.find_element_by_css_selector(selector)
        except NoSuchElementException:
            return
        msg = "'%s' should not be visible" % selector
        assert not element.is_displayed(), msg

    def assert_text_not_in_element(self, selector, text):
        """ Verify that the specified element does not contain certain text """
        msg = "'%s' should not contain the text '%s'" % (selector, text)
        content = self.sel.find_element_by_css_selector(selector).text
        assert text not in content, msg

    def assert_visible(self, selector):
        element = self.wait_for_element(selector)
        msg = "'%s' should be visible" % selector
        assert element.is_displayed(), msg

    def audit_accessibility(self):
        """ Check for accessibility violations using the JavaScript library
        from Chrome's Developer Tools. """
        # First add the library to the page
        script = ''
        for line in ADD_ACCESSIBILITY_SCRIPT.splitlines():
            script += line.strip()
        self.sel.execute_script(script)
        # Wait for the script to finish loading
        self.wait_for_condition('return axs.AuditRule.specs.videoWithoutCaptions !== "undefined";')
        # Now run the audit and inspect the results
        self.sel.execute_script('axs_audit_results = axs.Audit.run();')
        failed = self.sel.execute_script('return axs_audit_results.some(function (element, index, array) { return element.result === "FAIL" });')
        if failed:
            report = self.sel.execute_script('return axs.Audit.createReport(axs_audit_results);')
            raise self.failureException(report)

    def click(self, selector):
        """ Click the element matching the selector (and retry if it isn't
        visible or clickable yet) """
        element = self.wait_for_element(selector)
        element_was_clicked = lambda driver: lambda_click(element)
        msg = "The element matching '%s' should be clickable" % selector
        Wait(self.sel).until(element_was_clicked, msg)
        return element

    def click_link_with_text(self, text):
        link_is_present = lambda driver: driver.find_element_by_link_text(text)
        msg = "A link with text '%s' should be present" % text
        link = Wait(self.sel).until(link_is_present, msg)
        link.click()
        return link

    def click_link_with_xpath(self, xpath):
        link_is_present = lambda driver: driver.find_element_by_xpath(xpath)
        msg = "A link with xpath '%s' should be present" % xpath
        link = Wait(self.sel).until(link_is_present, msg)
        link.click()
        return link

    def enter_text(self, selector, value):
        field = self.wait_for_element(selector)
        field.send_keys(value)
        self.screenshot()
        return field

    def enter_text_via_xpath(self, xpath, value):
        field = self.wait_for_xpath(xpath)
        field.send_keys(value)
        self.screenshot()
        return field

    def get(self, relative_url):
        self.sel.get('%s%s' % (self.live_server_url, relative_url))
        self.screenshot()

    def screenshot(self):
        if hasattr(self, 'sauce_user_name'):
            # Sauce Labs is taking screenshots for us
            return
        if not hasattr(self, 'browser') or self.browser == 'htmlunit':
            # Can't take screenshots
            return
        screenshot_dir = settings.SELENIUM_SCREENSHOT_DIR
        if not screenshot_dir:
            return
        name = "%s_%d.png" % (self._testMethodName, self._screenshot_number)
        path = os.path.join(screenshot_dir, name)
        self.sel.get_screenshot_as_file(path)
        self._screenshot_number += 1

    def select_by_text(self, selector, text):
        select = Select(self.wait_for_element(selector))
        select.select_by_visible_text(text)
        self.screenshot()
        return select

    def select_by_value(self, selector, value):
        select = Select(self.wait_for_element(selector))
        select.select_by_value(value)
        self.screenshot()
        return select

    def select_text(self, selector, start=0, end=-1):
        """ Selects the specified text range of the element matching the
        provided selector by simulating a mouse down, programmatically
        selecting the text, and then simulating a mouse up.  Doesn't yet work
        on IE < 9 or iOS. Doesn't support nested markup either. """
        if not hasattr(self, 'select_text_template'):
            template = ''
            for line in SELECT_TEXT_SOURCE.splitlines():
                template += line.strip()
            self.select_text_template = template
        script = self.select_text_template % (selector, start, end)
        self.sel.execute_script(script)
        self.screenshot()

    def wait_for_background_color(self, selector, color_string):
        color = Color.from_string(color_string)
        correct_color = lambda driver: Color.from_string(driver.find_element_by_css_selector(selector).value_of_css_property("background-color")) == color
        msg = "The color of '%s' should be %s" % (selector, color_string)
        Wait(self.sel).until(correct_color, msg)
        self.screenshot()

    def wait_for_condition(self, return_statement, msg=None):
        """Wait until the provided JavaScript expression returns true.
        Note: for this to work, the expression must include the "return"
        keyword, not just the expression to be evaluated."""
        condition_is_true = lambda driver: driver.execute_script(return_statement)
        if not msg:
            msg = '"{}" never became true'.format(return_statement)
        Wait(self.sel).until(condition_is_true, msg)

    def wait_for_element(self, selector):
        element_is_present = lambda driver: driver.find_element_by_css_selector(selector)
        msg = "An element matching '%s' should be on the page" % selector
        element = Wait(self.sel).until(element_is_present, msg)
        self.screenshot()
        return element

    def wait_for_text(self, text):
        text_is_present = lambda driver: text in driver.page_source
        msg = "The text '%s' should be present on the page" % text
        Wait(self.sel).until(text_is_present, msg)
        self.screenshot()

    def wait_for_xpath(self, xpath):
        element_is_present = lambda driver: driver.find_element_by_xpath(xpath)
        msg = "An element matching '%s' should be on the page" % xpath
        element = Wait(self.sel).until(element_is_present, msg)
        self.screenshot()
        return element

    def wait_until_element_contains(self, selector, text):
        """ Wait until the specified element contains certain text """
        text_contained = lambda driver: text in driver.find_element_by_css_selector(selector).text
        msg = "'%s' should contain the text '%s'" % (selector, text)
        Wait(self.sel).until(text_contained, msg)
        self.screenshot()

    def wait_until_hidden(self, selector):
        """ Wait until the element matching the selector is hidden """
        element = self.wait_for_element(selector)
        element_is_hidden = lambda driver: not element.is_displayed()
        msg = "The element matching '%s' should not be visible" % selector
        Wait(self.sel).until(element_is_hidden, msg)
        self.screenshot()
        return element

    def wait_until_not_present(self, selector):
        """ Wait until the element matching the selector is gone from page """
        element_is_present = lambda driver: driver.find_element_by_css_selector(selector)
        msg = "There should not be an element matching '%s'" % selector
        Wait(self.sel).until_not(element_is_present, msg)
        self.screenshot()

    def wait_until_not_visible(self, selector):
        """ Wait until the element matching the selector is either hidden or
        removed from the page """
        element_is_visible = lambda driver: driver.find_element_by_css_selector(selector).is_displayed()
        msg = "The element matching '%s' should not be visible" % selector
        Wait(self.sel).until_not(element_is_visible, msg)
        self.screenshot()

    def wait_until_option_added(self, selector, option_text):
        """ Wait until the specified select option appears; the entire
        select widget may be replaced in the process """
        end_time = time.time() + settings.SELENIUM_TIMEOUT
        while True:
            try:
                select = Select(self.sel.find_element_by_css_selector(selector))
                for option in select.options:
                    if option.text == option_text:
                        return option
            except (NoSuchElementException, StaleElementReferenceException):
                pass
            time.sleep(settings.SELENIUM_POLL_FREQUENCY)
            if time.time() > end_time:
                break
        raise TimeoutException("Select option should have been added")

    def wait_until_option_disabled(self, selector, option_text):
        """ Wait until the specified select option is disabled; the entire
        select widget may be replaced in the process """
        end_time = time.time() + settings.SELENIUM_TIMEOUT
        while True:
            try:
                select = Select(self.sel.find_element_by_css_selector(selector))
                for option in select.options:
                    if option.text == option_text and not option.is_enabled():
                        return option
            except (NoSuchElementException, StaleElementReferenceException):
                pass
            time.sleep(settings.SELENIUM_POLL_FREQUENCY)
            if time.time() > end_time:
                break
        raise TimeoutException("Select option should have been disabled")

    def wait_until_property_equals(self, selector, name, value):
        """ Wait until the specified CSS property of the element matching the
        provided selector matches the expected value """
        value_is_correct = lambda driver: driver.find_element_by_css_selector(selector).value_of_css_property(name) == value
        msg = "The %s CSS property of '%s' should be %s" % (name, selector,
                                                            value)
        Wait(self.sel).until(value_is_correct, msg)
        self.screenshot()

    def wait_until_offscreen(self, selector):
        """ Wait until the element matching the provided selector has been
        moved offscreen (deliberately, not just scrolled out of view) """
        end_time = time.time() + settings.SELENIUM_TIMEOUT
        while True:
            try:
                element = self.sel.find_element_by_css_selector(selector)
                location = element.location
                size = element.size
                if location["y"] + size["height"] <= 0:
                    self.screenshot()
                    return True
                if location["x"] + size["width"] <= 0:
                    self.screenshot()
                    return True
            except (NoSuchElementException, StaleElementReferenceException):
                pass
            time.sleep(settings.SELENIUM_POLL_FREQUENCY)
            if time.time() > end_time:
                break
        raise TimeoutException("'%s' should be offscreen" % selector)

    def wait_until_onscreen(self, selector):
        """ Wait until the element matching the provided selector has been
        moved into the viewable page """
        end_time = time.time() + settings.SELENIUM_TIMEOUT
        while True:
            try:
                element = self.sel.find_element_by_css_selector(selector)
                location = element.location
                if location["x"] >= 0 and location["y"] >= 0:
                    self.screenshot()
                    return True
            except (NoSuchElementException, StaleElementReferenceException):
                pass
            time.sleep(settings.SELENIUM_POLL_FREQUENCY)
            if time.time() > end_time:
                break
        raise TimeoutException("'%s' should be offscreen" % selector)

    def wait_until_property_less_than(self, selector, name, value):
        """ Wait until the specified CSS property of the element matching the
        provided selector is less than a certain value.  Ignores any
        non-integer suffixes like 'px'. """
        value_is_correct = lambda driver: int(re.match(r'([\d-]+)', driver.find_element_by_css_selector(selector).value_of_css_property(name)).group(1)) < value
        msg = "The %s CSS property of '%s' should be less than %s" % (name, selector, value)
        Wait(self.sel).until(value_is_correct, msg)
        self.screenshot()

    def wait_until_visible(self, selector):
        """ Wait until the element matching the selector is visible """
        element = self.wait_for_element(selector)
        element_is_visible = lambda driver: element.is_displayed()
        msg = "The element matching '%s' should be visible" % selector
        Wait(self.sel).until(element_is_visible, msg)
        return element

    # ~~~~~~~~~~~~~~~~~~~~~~~~~ Sauce Labs support ~~~~~~~~~~~~~~~~~~~~~~~~~~

    def sauce_labs_driver(self):
        """ Configure the Selenium driver to use Sauce Labs """
        host = os.getenv("SELENIUM_HOST", "ondemand.saucelabs.com")
        port = os.getenv("SELENIUM_PORT", "80")
        executor = "".join(["http://", host, ":", port, '/wd/hub'])
        platform = os.getenv("SELENIUM_PLATFORM", "Windows 7")
        version = os.getenv("SELENIUM_VERSION", "")
        self.sauce_user_name = os.getenv("SAUCE_USER_NAME")
        self.sauce_api_key = os.getenv("SAUCE_API_KEY")
        tunnel_id = os.getenv("SAUCE_TUNNEL_ID", "")
        build_number = os.getenv('BUILD_NUMBER')
        job_name = os.getenv('JOB_NAME')
        # http://code.google.com/p/selenium/wiki/DesiredCapabilities
        # https://saucelabs.com/docs/additional-config#desired-capabilities
        caps = {
            'accessKey': self.sauce_api_key,
            'capture-html': True,
            'browserName': self.browser,
            'javascriptEnabled': True,
            'name': self.id(),
            'platform': platform,
            'username': self.sauce_user_name,
            'version': version,
        }
        if build_number and job_name:
            caps['build'] = '{} #{}'.format(job_name, build_number)
        if tunnel_id:
            caps['tunnel-identifier'] = tunnel_id
        if settings.SELENIUM_SAUCE_VERSION:
            caps['selenium-version'] = settings.SELENIUM_SAUCE_VERSION
        remote = webdriver.Remote(command_executor=executor,
                                  desired_capabilities=caps)
        # Store the Sauce session ID to output later for Jenkins integration
        # See https://saucelabs.com/jenkins/5 for details
        sauce_sessions.append('SauceOnDemandSessionID={} job-name={}'.format(remote.session_id, self.id()))
        return remote

    def report_status(self, passed):
        """Report to Sauce Labs whether or not the test passed, so that can be
        reflected in their UI."""
        if not hasattr(self, 'sauce_user_name'):
            # Not using Sauce Labs for this test
            return
        url_pattern = 'http://{}:{}@saucelabs.com/rest/v1/{}/jobs/{}'
        url = url_pattern.format(self.sauce_user_name,
                                 self.sauce_api_key,
                                 self.sauce_user_name,
                                 self.sel.session_id)
        body_content = json.dumps({"passed": passed})
        headers = {
            'Content-Type': 'application/json',
        }
        response = requests.put(url, body_content, headers=headers)
        return response.status_code == 200
Ejemplo n.º 34
0
def get_job(browser: WebDriver) -> str:
    rows = browser.find_elements_by_css_selector('tr.table_row')

    for row in rows:
        cells = row.find_elements_by_tag_name('td')
        for i, c in enumerate(cells):
            if c.text == 'AUTOMATION':
                tran_run_id= cells[i+10].text
                return tran_run_id

browser.get('https://eit1-i.svcs.hp.com/cds/') # Site-Minder url
USER1=input("Please enter the User Name:")
PASSWORD1 = getpass.getpass("Password: "******"USER"]')
email.send_keys(USER1)

password = browser.find_element_by_css_selector('input[name="PASSWORD"]')
password.send_keys(PASSWORD1)

logon = browser.find_element_by_css_selector('input.btn.btn-primary')
logon.click()

browser.get('https://eit1-i.svcs.hp.com/cds/LoadLdssAsync')

load_option = browser.find_element_by_id('UploadOptionList')
load_option.send_keys('Validate Only')

file_selector = browser.find_element_by_id('ldssfile')
file_selector.send_keys(r'C:\Users\tangjing\Desktop\Auto-Reg\Automation.xlsx')
            downloadldss.click()
        else:
            time.sleep(10)
            i = i - 1
            print("Will wait 10x" + i + "second(s)")
            if i < 1:
                break

    print("you can check the validation result now!")


if __name__ == "__main__":
    browser = Chrome()
    tran_name = "Test for CDS48 - 100 users contacts - 16"

    with open(".pass") as f:
        credential = json.load(f)

    browser.get("https://eit1-i.svcs.hp.com/cds/")

    email = browser.find_element_by_css_selector('input[name= "USER"]')
    email.send_keys(credential["user_name"])

    password = browser.find_element_by_css_selector('input[name = "PASSWORD"]')
    password.send_keys(credential["password"])

    Login = browser.find_element_by_css_selector('input[value = "Log on"]')
    Login.click()

    find_a_job(browser, tran_name)
Ejemplo n.º 36
0
class AutomatorMixin(object):
    class UnexpectedSituation(Exception):
        pass

    data_property_class = None

    def __init__(self, steps, data_args=[]):
        self.steps = steps
        self.data = self.data_property_class(*data_args)

    def run(self):
        options = ChromeOptions()
        options.add_argument('--test-type')
        self.driver = Chrome(chrome_options=options)
        self.perform_steps()
        self.driver.close()

    def find_element(self, selector):
        LOG.info('finding selector "%s"' % selector)
        return self.driver.find_element_by_css_selector(selector)

    @property
    def action_method_lookup(self):
        return self.get_action_method__lookup()

    def get_action_method__lookup(self):
        return {
            'click': self.perform_click,
            'fill_form': self.perform_fill_form,
            'select_drop_down': self.perform_select_drop_down,
        }

    def get_css_selector(self, action):
        return action.get('css_selector')

    def get_action_value(self, action):
        if 'value' in action:
            value = action['value']
        elif 'property' in action:
            property_name = action['property']
            value = getattr(self.data, property_name)
        else:
            raise AutomatorMixin.UnexpectedSituation('Cannot find key "property" or "value"')

        return value

    def perform_steps(self):
        for step in self.steps:
            if 'url' in step:
                self.driver.get(step['url'])
            if 'actions' in step:
                self.perform_actions(step['actions'])

    def perform_actions(self, actions):
        for action in actions:
            action_method = self.action_method_lookup[action['type']]
            action_method(action)

    def perform_click(self, action):
        selector = self.get_css_selector(action)
        if selector:
            self.find_element(selector).click()
            return

        # Find by id.  This will be needed when people use "." in their id names.  Such as kfc's survey
        css_id = action['id_selector']
        LOG.info(css_id)
        self.driver.find_element_by_id(css_id).click()

    def perform_fill_form(self, action):
        selector = self.get_css_selector(action)
        value = self.get_action_value(action)

        self.find_element(selector).send_keys(value)

    def perform_select_drop_down(self, action):
        selector = self.get_css_selector(action)
        value = self.get_action_value(action)

        Select(self.find_element(selector)).select_by_value(value)
def order(shop=None, browser=None, lego_set=None, order_list=None, username=None, password=None):
    """
    Fill in LEGO parts to be ordered in LEGO's customer service shop.
    """
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver import Chrome, Firefox
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.support.wait import WebDriverWait
    from time import sleep

    order_list = order_list.split(',')

    shop_url = 'https://wwwsecure.us.lego.com/{shop}/service/replacementparts/order'.format(shop=shop)
    browser = Chrome() if browser == 'chrome' else Firefox()
    browser.get(shop_url)

    print("Sometimes they ask you to fill in a survey.")
    try:
        survey_layer = browser.find_element_by_id('ipeL104230')
        survey_layer.send_keys(Keys.ESCAPE)
    except NoSuchElementException:
        print("We're lucky, no survey on the LEGO shop today!")

    print("They want to know how old we are.")
    age_field = browser.find_element_by_name('rpAgeAndCountryAgeField')
    age_field.send_keys('55')
    age_field.send_keys(Keys.RETURN)

    if username and password:
        print("Let's log in with LEGO ID {user}.".format(user=username))
        login_link = browser.find_element_by_css_selector('.legoid .links > a')
        login_link.click()

        browser.switch_to.frame('legoid-iframe')

        user_input = browser.find_element_by_id('fieldUsername')
        user_input.click()
        user_input.send_keys(username)
        passwd_input = browser.find_element_by_id('fieldPassword')
        passwd_input.click()
        passwd_input.send_keys(password)
        login_button = browser.find_element_by_id('buttonSubmitLogin')
        login_button.click()

        browser.switch_to.default_content()

    sleep(4)  # seconds
    wait = WebDriverWait(browser, 5)

    print("We need to tell them which set we want to buy parts from: {lego_set}".format(lego_set=lego_set))
    setno_field = wait.until(EC.element_to_be_clickable(
        (By.CSS_SELECTOR, '.product-search input[ng-model=productNumber]')))
    setno_field.send_keys(lego_set)
    setno_field.send_keys(Keys.RETURN)

    print("Let's scroll the page down a bit, so we can see things better.")
    browser.execute_script("window.scroll(0, 750);")

    print("That's gonna be crazy: {count} elements to order! Let's rock.".format(count=len(order_list)))
    element_field = wait.until(EC.element_to_be_clickable(
        (By.ID, 'element-filter')))
    print()

    for brick in order_list:
        part_no, quantity = brick.split(':')
        print("- {qty}x #{pn} ".format(qty=quantity, pn=part_no), end='')

        element_field.clear()
        element_field.send_keys(part_no)
        element_field.send_keys(Keys.RETURN)
        sleep(.3)  # seconds

        try:
            add_button = browser.find_element_by_css_selector('.element-details + button')
            add_button.click()
            sleep(.2)  # seconds
        except NoSuchElementException:
            print("OOOPS! No LEGO part with that number found in set #{set}. :-(".format(set=lego_set))
            continue

        try:
            warn_msg = browser.find_element_by_css_selector('.alert-warning .sold-out-info')
            if warn_msg.is_displayed():
                print("NOTE: item out of stock. ", end='')
                add_anyway = browser.find_element_by_css_selector('.alert-warning + .clearfix button')
                add_anyway.click()
        except NoSuchElementException:
            pass

        amount_select = browser.find_elements_by_css_selector('.bag-item select')[-1]
        amount_select.send_keys(quantity)
        amount_select.send_keys(Keys.TAB)

        selected = Select(amount_select).first_selected_option
        if quantity != selected.text:
            print("WARNING: Could not select desired quantity. {} != {}".format(quantity, selected.text))
        else:
            print()

    browser.execute_script("window.scroll(0, 0);")
    print()
    print("We're done. You can finalize your order now. Thanks for watching!")