尝试使用 Selenium 自动化与 Linkedin 上的人建立联系

问题描述 投票:0回答:1

我目前正在使用 Selenium 进行自动化,通过 Linkedin 以自动化的方式与招聘人员联系。登录有效,我的脚本也输入了“IT Recruiter”的关键字,但是当 Chrome 位于此部分时,问题出现了,它没有单击“连接”按钮,因此它只是转到招聘人员的第 2 页,然后到数字 3,但没有单击“连接”按钮。

我的代码到底出了什么问题?

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException, StaleElementReferenceException

def login(driver, username, password):
    driver.get("https://www.linkedin.com/login?fromSignIn=true&trk=guest_homepage-basic_nav-header-signin")
    user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "username")))
    user.send_keys(username)
    password_elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "password")))
    password_elem.send_keys(password)
    password_elem.send_keys(Keys.RETURN)

def connect_with_recruiters(driver):
    for index in range(1, 101):
        print(f"Procesando página {index}")
        
        base_url = f"https://www.linkedin.com/search/results/all/?keywords=IT%20recruiter&origin=HISTORY&page={index}"
        driver.get(base_url)
        
        try:
            # Esperar a que la página cargue completamente
            WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//button[contains(text(), 'Conectar')]")))
            
            # Hacer clic en todos los botones "Conectar"
            connect_buttons = driver.find_elements_by_xpath("//button[contains(text(), 'Conectar')]")
            
            for connect_button in connect_buttons:
                try:
                    # Hacer clic en Conectar usando execute_script
                    driver.execute_script("arguments[0].click();", connect_button)
                    time.sleep(2)  # Pausa para esperar que aparezca el nuevo popup
                    
                    # Esperar a que aparezca el botón "Conectar sin nota" en el nuevo popup
                    connect_without_note_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Conectar sin nota']")))
                    connect_without_note_button.click()
                    
                    print("Conectado con un reclutador exitosamente.")
                    
                    # Añadir código para la nueva funcionalidad de seguimiento
                    try:
                        # Clic en el botón de seguimiento si está presente
                        follow_button = driver.find_element(By.XPATH, "//span[text()='Seguir']")
                        follow_button.click()
                        print("Comenzó a seguir al reclutador.")
                    except NoSuchElementException:
                        # No se encontró el botón de seguimiento, imprimir mensaje
                        print("El botón de seguimiento no está presente.")
                    
                except (TimeoutException, StaleElementReferenceException) as e:
                    # Capturar errores de tiempo de espera o referencia de elemento caducado
                    print(f"Error al conectar con el reclutador: {e}")
                except NoSuchElementException:
                    # Cerrar si se solicita un correo electrónico
                    print("Reclutador requería correo electrónico, cerrado.")
                    close_button = driver.find_element(By.XPATH, "//button[text()='Cerrar']")
                    close_button.click()
                except Exception as e:
                    print(f"Error inesperado al conectar con el reclutador: {e}")
        except TimeoutException as e:
            print(f"TimeoutException al buscar reclutadores en la página {index}: {e}")
            continue  # Salta a la siguiente iteración del bucle
        except NoSuchElementException as e:
            print(f"No se encontraron elementos de reclutadores en la página {index}: {e}")
            continue  # Salta a la siguiente iteración del bucle
        except Exception as e:
            print(f"Error general en la página {index}: {e}")
            continue  # Salta a la siguiente iteración del bucle

if __name__ == "__main__":
    options = webdriver.ChromeOptions()
    options.add_argument('--ignore-certificate-errors')
    
    driver = webdriver.Chrome(options=options)
    driver.implicitly_wait(5)
    
    your_username = "USERNAME"
    your_password = "PASSWORD"
    
    try:
        login(driver, your_username, your_password)
        connect_with_recruiters(driver)
    except Exception as e:
        print(f"Error general en el script: {e}")
    finally:
        driver.quit()

我添加了一张图片,以便您可以准确地明白我的意思

python selenium-webdriver linkedin-api
1个回答
0
投票

连接按钮不包含文本“Conectar”,按钮内的范围有它。

尝试改变这一点:

connect_buttons = driver.find_elements_by_xpath("//button[contains(text(), 'Conectar')]")

到此

connect_buttons = driver.find_elements_by_xpath("//span[contains(text(), 'Conectar')]")
© www.soinside.com 2019 - 2024. All rights reserved.