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
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()
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
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()
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
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