Spaces:
Sleeping
Sleeping
| import time | |
| from selenium.webdriver.common.by import By | |
| from selenium.common.exceptions import NoSuchElementException | |
| def scroll_and_collect_profiles(driver, log_path="profile_links.log"): | |
| profile_links = set() | |
| last_height = driver.execute_script("return document.body.scrollHeight") | |
| while True: | |
| time.sleep(2) | |
| cards = driver.find_elements(By.XPATH, "//a[contains(@href, '/in/') and @data-test-app-aware-link]") | |
| for card in cards: | |
| href = card.get_attribute("href") | |
| if href and "/in/" in href: | |
| profile_links.add(href) | |
| driver.execute_script("window.scrollBy(0, document.body.scrollHeight);") | |
| time.sleep(2) | |
| new_height = driver.execute_script("return document.body.scrollHeight") | |
| if new_height == last_height: | |
| break | |
| last_height = new_height | |
| with open(log_path, "w", encoding="utf-8") as f: | |
| for link in profile_links: | |
| f.write(link + "\n") | |
| print(f"β Collected {len(profile_links)} profile links.") | |
| return list(profile_links) | |
| def visit_profiles_and_connect(driver, profile_links): | |
| for link in profile_links: | |
| try: | |
| driver.get(link) | |
| time.sleep(6) | |
| # Try direct Connect button first | |
| connected = driver.execute_script(""" | |
| const connectBtn = [...document.querySelectorAll('button')] | |
| .find(b => b.textContent.trim() === 'Connect'); | |
| if (connectBtn) { | |
| connectBtn.click(); | |
| return true; | |
| } | |
| return false; | |
| """) | |
| if connected: | |
| time.sleep(3) | |
| driver.execute_script(""" | |
| const sendBtn = [...document.querySelectorAll('button')] | |
| .find(b => b.textContent.trim() === 'Send without a note'); | |
| if (sendBtn) sendBtn.click(); | |
| """) | |
| print(f"β Connected directly: {link}") | |
| time.sleep(4) | |
| continue | |
| # Try via More > Connect | |
| used_more = driver.execute_script(""" | |
| const btn = document.querySelector('button[id$="-profile-overflow-action"]'); | |
| if (btn) { | |
| btn.click(); | |
| return true; | |
| } | |
| return false; | |
| """) | |
| if used_more: | |
| time.sleep(3) | |
| found_connect = driver.execute_script(""" | |
| const connectBtn = Array.from(document.querySelectorAll('span.display-flex.t-normal.flex-1')) | |
| .find(el => el.textContent.trim() === 'Connect'); | |
| if (connectBtn) { | |
| connectBtn.click(); | |
| return true; | |
| } | |
| return false; | |
| """) | |
| if found_connect: | |
| time.sleep(3) | |
| driver.execute_script(""" | |
| const sendWithoutNoteBtn = document.querySelector('button[aria-label="Send without a note"]'); | |
| if (sendWithoutNoteBtn) sendWithoutNoteBtn.click(); | |
| """) | |
| print(f"β Connected via More menu: {link}") | |
| time.sleep(4) | |
| else: | |
| print(f"β Connect option not found in More menu: {link}") | |
| else: | |
| print(f"β No Connect or More button: {link}") | |
| except Exception as e: | |
| print(f"β οΈ Error visiting profile {link}: {e}") | |
| time.sleep(3) | |