我目前正在使用 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()
我添加了一张图片,以便您可以准确地明白我的意思
连接按钮不包含文本“Conectar”,按钮内的范围有它。
尝试改变这一点:
connect_buttons = driver.find_elements_by_xpath("//button[contains(text(), 'Conectar')]")
到此
connect_buttons = driver.find_elements_by_xpath("//span[contains(text(), 'Conectar')]")