Ejemplo n.º 1
0
def postmessage_browser(cur, taskrow, msgdetail):
    email, password = get_user_email_pw(cur, taskrow[6])
    contact = get_db(cur, contact_select, (msgdetail[6], ))
    print('contact:', contact)
    # driver = login_linkedin_withwebdriver(email, password)
    driver = get_driver(email, password)
    # go to the user homme
    userhome = "{0}/in/{1}/".format(LINKEDIN_URL, contact[10])
    print('userhome:', userhome)
    status = True
    # click on the send message
    try:
        wait = WebDriverWait(driver, IDLE_INTERVAL_IN_SECONDS)
        driver.get(userhome)
        # pv-s-profile-actions--message
        #message_btn = driver.find_element_by_class_name("pv-s-profile-actions--message")
        message_btn = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, "button.pv-s-profile-actions--message")))
        message_btn.click()
        # post the text in the right box
        box_css = """div.application-outlet>aside.msg-overlay-container div.msg-overlay-conversation-bubble div.msg-overlay-conversation-bubble__content-wrapper form.msg-form """
        #  textarea.ember-text-area msg-form__textarea"
        form_box = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, box_css)))
        script = "window.scrollBy({x},{y});".format(x=form_box.location.get('x', 0),
                                                    y=form_box.location.get('y', 1000))
        print('script:', script)
        driver.execute_script(script)
        #print('get_attribute:', form_box.get_attribute('innerHTML'))
        text_box_css = "{0} {1}".format(
            box_css, "div.msg-form__compose-area>textarea[name='message']")
        print('text_box_css:', text_box_css)
        message_box = wait.until(EC.visibility_of_element_located(
                (By.CSS_SELECTOR, text_box_css)))
        message_box.send_keys(msgdetail[3])
        message_box.send_keys(Keys.RETURN)
        time.sleep(IDLE_INTERVAL_IN_SECONDS)
        # send
        button_css = "{0} {1}".format(
            box_css, "footer button.msg-form__send-button")
        try:
            send_btn = wait.until(EC.visibility_of_element_located(
                (By.CSS_SELECTOR, button_css)))
            send_btn.click()
        except Exception as e:
            print('------->', e)
        print('---->click end message<------')
        message_time = get_send_message_date(driver)
        if message_time is not None:
            try:
                cur.execute(message_time_update_sql, (message_time, msgdetail[0]))
            except Exception as e:
                print('----->', e)
        time.sleep(IDLE_INTERVAL_IN_SECONDS)
    except Exception as err:
        print('send message error:', err)
        status = False
    # check back id?
    driver.close()
    return status
Ejemplo n.º 2
0
def get_fastcontacts(email, password):

    driver = get_driver(email, password)
    print("==== GET CONTACTS ======")

    try:

        driver.get(LINKEDIN_CONNECTIONS_URL)
        time.sleep(10)

        total_connection_counts = driver.find_element_by_tag_name("h2")
        counts_text = total_connection_counts.text
        counts = counts_text.split(" ")

        cnt_all_connections = counts[0].replace(',', '')
        csrf_tocken = get_browser_csrf_tocken(driver)
        url = "https://www.linkedin.com/voyager/api/relationships/connections?count=" + cnt_all_connections
        url = url + "&sortType=RECENTLY_ADDED&start=0"
        url = url + "&projection=(elements*(to~(id,localizedFirstName,localizedLastName)))"

        #############################################################################################################################
        driver.execute_script("""
          var element = document.createElement('div');
          element.id = "interceptedResponse";
          element.appendChild(document.createTextNode(""));
          document.body.appendChild(element);

          var xhttp = new XMLHttpRequest();

          xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
              document.getElementById("interceptedResponse").innerHTML = this.responseText;
            }
          };
          xhttp.open("GET", '""" + url + """', true);
          xhttp.setRequestHeader('Csrf-Token', """ + csrf_tocken + """)
          xhttp.send();""")
        #############################################################################################################################
        time.sleep(3)
        responsedata = driver.find_element_by_id('interceptedResponse').text

        #print('responsedata :', responsedata)
        targetjsondata = json.loads(responsedata)
        print('----------------targetjsondata------------------> :',
              targetjsondata)

    except Exception as err:
        print('errors:', err)

    driver.close()
Ejemplo n.º 3
0
def checkmessage_browser(cur, taskrow, msgdetail):
    email, password = get_user_email_pw(cur, taskrow[6])
    try:
        contact = get_db(cur, contact_select, (msgdetail[6], ))
    except Exception as e:
        print('----->', e)
        return
    print('contact:', contact)
    # driver = login_linkedin_withwebdriver(email, password)
    driver = get_driver(email, password)
    user_path = "/in/{0}/".format(contact[10])
    # go to the user homme
    userhome = "{0}{1}".format(LINKEDIN_URL, user_path)
    print('userhome:', userhome)
    status = True
    replied_date = None
    message = ""
    # click on the send message
    try:
        wait = WebDriverWait(driver, IDLE_INTERVAL_IN_SECONDS)
        driver.get(userhome)
        # pv-s-profile-actions--message
        #message_btn = driver.find_element_by_class_name("pv-s-profile-actions--message")
        message_btn = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, "button.pv-s-profile-actions--message")))
        message_btn.click()
        # post the text in the right box
        box_css = """div.application-outlet>aside.msg-overlay-container div.msg-overlay-conversation-bubble div.msg-overlay-conversation-bubble__content-wrapper div.msg-s-message-list-container """
        #  textarea.ember-text-area msg-form__textarea"
        msg_box = wait.until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, box_css)))
        script = "window.scrollBy({x},{y});".format(x=msg_box.location.get('x', 0),
                                                    y=msg_box.location.get('y', 1000))
        print('script:', script)
        driver.execute_script(script)
        # print('get_attribute:', msg_box.get_attribute('innerHTML'))
        msg_list_css = "{0} {1}".format(box_css, "ul.msg-s-message-list>li")
        print('msg_list_css:', msg_list_css)
        message_list = driver.find_elements_by_css_selector(msg_list_css)
        html = message_list[-1].get_attribute('innerHTML')
        if user_path in html:
            # found replied
            replied_date = datetime.now()
            m = re.search(r'([\d]+):([\d]+)\s+([AP]M)', html)
            print('time:', m)

            if m:
                hr = int(m.group(1))
                mi = int(m.group(2))
                if m.group(3) == "PM":
                    hr += 12
                d = replied_date.day
                if hr < replied_date.hour:
                    d = d - 1

                replied_date = replied_date.replace(minute=mi, hour=hr,
                                                    day=d)
                print('replied_date:', replied_date)
            # get message
            try:
                m = message_list[-1].find_element_by_css_selector('p.msg-s-event-listitem__body').text
            except Exception as e:
                print('error ----->', e)
                pass
            if m:
                message = m.strip()
                print('message:', message)
    except Exception as err:
        print('send message error:', err)
        status = False
    # check back id?
    driver.close()
    return status, replied_date, message
Ejemplo n.º 4
0
def search():
    driver = get_driver(user_email, user_pw, force_login=True
                        )
    if 'feed' not in driver.current_url:
        driver.get(SEARCH_URL)

    print("==== SEARCH ======")
    limit = 100
    
    search_mode = 0
    search_data = 'do less earn more'
    
    try:
        if search_mode == 0:
            time.sleep(5)
            # search connection
            search_input = driver.find_element_by_xpath(
                "/html/body/nav/div/form/div/div/div/artdeco-typeahead-deprecated/artdeco-typeahead-deprecated-input/input")
            keyword = search_data
            search_input.clear()
            search_input.send_keys(keyword)
            search_input.send_keys(Keys.ENTER)

            print("-------click search button-----------")

            time.sleep(5)
            total_resultcounts_tag = driver.find_element_by_css_selector(
                "h3.search-results__total")
            total_resultcounts = total_resultcounts_tag.text
            result_counts = total_resultcounts.split(" ")
            real_counts = result_counts[1]
            counts = real_counts.replace(",", "")
            print('counts:', counts)
            range_count = int(counts) // 10 + 1
            print('range_count:', range_count)
            range_count = 10

            parse_urls = {}
            print('parsing url:')
            count = 0
            for _ in range(range_count):
                time.sleep(3)
                driver.execute_script("window.scrollBy(0, 1000);")
                time.sleep(3)

                search_list = driver.find_elements_by_class_name(
                    "search-result__result-link")
                #print('search_list:', search_list)
                

                #for search_index in range(len(actor_name_lists)):

                for tag in search_list:
                    url = tag.get_attribute('href')
                    if url in parse_urls or 'result' in url:
                        continue
                    parse_urls[url] = 1
                    count += 1
                    if count >= limit:
                        break
                    
                if count >= limit:
                        break

                try:
                    driver.find_element_by_class_name("next").click()
                except Exception as err1:
                    print('No next:', err1)
                    break
            
            get_search_contact(parse_urls, driver)
        
    except Exception as err:
        print('execption:', err)
        
    driver.close()
Ejemplo n.º 5
0
def postconnect_browser(cur, taskrow, msgdetail):
    print('------------postconnect_browser-------------')
    email, password = get_user_email_pw(cur, taskrow[6])
    contact = get_db(cur, contact_select, (msgdetail[6], ))
    print('contact:', contact)
    # driver = login_linkedin_withwebdriver(email, password)
    driver = get_driver(email, password)

    user_path = "/in/{0}/".format(contact[10])
    # go to the user homme
    userhome = "{0}{1}".format(LINKEDIN_URL, user_path)
    print('userhome:', userhome)
    status = True
    replied_date = None
    message = ""
    # click on the send connect
    try:
        wait = WebDriverWait(driver, IDLE_INTERVAL_IN_SECONDS)
        driver.get(userhome)
        print('-----------finding--------pass_connect_btn----------------')
        try:
            connect_btn = wait.until(
                EC.visibility_of_element_located(
                    (By.CSS_SELECTOR, "button.pv-s-profile-actions--connect")))
        except Exception as e:
            more_button_btn = wait.until(
                EC.visibility_of_element_located(
                    (By.CSS_SELECTOR,
                     "button.pv-s-profile-actions__overflow-toggle")))
            more_button_btn.click()
            connect_btn = wait.until(
                EC.visibility_of_element_located(
                    (By.CSS_SELECTOR, "button.pv-s-profile-actions--connect")))
        connect_btn.click()

        # post the text in the popup
        box_css = """div#li-modal-container>div.modal-content-wrapper"""
        print('-------------------pass_connect_btn----------------')

        # add a note in popup
        addnote_css = """div.send-invite__actions>button.button-secondary-large"""
        btn_addnote = wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, addnote_css)))
        btn_addnote.click()
        print('-------------------btn_addnote----------------')

        # text_box_css = "{0} {1}".format(box_css, "div.msg-form__compose-area>textarea[name='message']")
        text_box_css = "textarea#custom-message"
        print('text_box_css:', text_box_css)
        message_box = wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, text_box_css)))
        message_box.send_keys(msgdetail[3])
        print('-------------------message_box----------------', msgdetail[3])

        message_box.send_keys(Keys.RETURN)
        time.sleep(IDLE_INTERVAL_IN_SECONDS)

        # connect send in popup
        connect_css = "div.send-invite__actions>button.button-primary-large"
        btn_send = wait.until(
            EC.visibility_of_element_located((By.CSS_SELECTOR, connect_css)))

        btn_send.click()

        time.sleep(IDLE_INTERVAL_IN_SECONDS)

    except Exception as err:
        print('send connect error:', err)
        status = False
    driver.close()
    return status
Ejemplo n.º 6
0
def checkconnect_browser(cur, taskrow, msgdetail):
    email, password = get_user_email_pw(cur, taskrow[6])
    contact = get_db(cur, contact_select, (msgdetail[6], ))
    print('contact:', contact)
    # driver = login_linkedin_withwebdriver(email, password)
    driver = get_driver(email, password)
    user_path = "/in/{0}/".format(contact[10])
    # go to the user homme
    userhome = "{0}{1}".format(LINKEDIN_URL, user_path)
    print('userhome:', userhome)
    status = True
    replied_date = datetime.now()
    connect = ""
    message = None
    # click on the send connect
    try:
        wait = WebDriverWait(driver, IDLE_INTERVAL_IN_SECONDS)
        driver.get(userhome)
        message_btn = None
        pending_btn = None
        inmail_btn = None
        try:
            pending_btn = wait.until(
                EC.visibility_of_element_located(
                    (By.CSS_SELECTOR, "button.pv-s-profile-actions--pending")))
        except Exception as e:
            print('---no pending---', e)
            try:
                inmail_btn = wait.until(
                    EC.visibility_of_element_located(
                        (By.CSS_SELECTOR,
                         "button.pv-s-profile-actions--send-in-mail")))
            except Exception as e:
                print('---no ignored---', e)
                try:
                    message_btn = wait.until(
                        EC.visibility_of_element_located(
                            (By.CSS_SELECTOR,
                             "button.pv-s-profile-actions--message")))
                except Exception as e:
                    print('---no connected---', e)

        if inmail_btn is not None:
            connect = "ignored"

        if pending_btn is not None:
            connect = "pending"

        if message_btn is not None or inmail_btn is not None:
            if message_btn is not None:
                connect = "connected"
                find_contact_on_message_box(driver, contact)
                # open_msg_box_btn = "button.msg-overlay-bubble-header__control--new-convo-btn"
                # open_msg_box = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, open_msg_box_btn)))
                # message_btn.click()
            if inmail_btn is not None:
                find_contact_on_message_box(driver, contact)
            box_css = """div.application-outlet>aside.msg-overlay-container div.msg-overlay-conversation-bubble div.msg-overlay-conversation-bubble__content-wrapper div.msg-s-message-list-container"""
            try:
                msg_box = wait.until(
                    EC.visibility_of_element_located(
                        (By.CSS_SELECTOR, box_css)))
            except Exception as e:
                print('error:->', e)
            script = "window.scrollBy({x},{y});".format(
                x=msg_box.location.get('x', 0),
                y=msg_box.location.get('y', 1000))
            print('script:', script)
            driver.execute_script(script)
            msg_list_css = "{0} {1}".format(box_css,
                                            "ul.msg-s-message-list>li")
            # print('msg_list_css:', msg_list_css)
            message_list = driver.find_elements_by_css_selector(msg_list_css)
            html = message_list[-1].get_attribute('innerHTML')
            # print('message_list:', html)
            if user_path in html:
                # found replied
                replied_date = datetime.now()
                m = re.search(r'([\d]+):([\d]+)\s+([AP]M)', html)
                print('time:', m)

                if m:
                    hr = int(m.group(1))
                    mi = int(m.group(2))
                    if m.group(3) == "PM":
                        hr += 12
                    d = replied_date.day
                    if hr < replied_date.hour:
                        d = d - 1
                    replied_date = replied_date.replace(minute=mi,
                                                        hour=hr,
                                                        day=d)
                    print('replied_date:', replied_date)
                try:
                    m = message_list[-1].find_element_by_css_selector(
                        'p.msg-s-event-listitem__body').text
                except Exception as e:
                    print(e)
                    pass
                if m:
                    message = m.strip()
                    print('message:', message)

    except Exception as err:
        print('check connect error:', err)
        status = False

    driver.close()
    return status, replied_date, connect, message