You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Selenium的LinkedIn每日自动化Bot开发问题求助

问题描述

我正在编写一个每日自动运行的Bot,目标是登录LinkedIn后进入特定联系人的聊天窗口,当对方发送帖子类消息时,Bot回复我的邮箱并提示对方发送简历。现有Python代码如下:

def start():
    driver.get("https://www.linkedin.com")
    time.sleep(3)
    username = driver.find_element(By.ID, 'session_key')
    username.send_keys(MyUsername)
    time.sleep(0.7)
    password = driver.find_element(By.ID, "session_password")
    password.send_keys(MyPassword)
    time.sleep(0.3)
    button_sign = driver.find_element(By.XPATH, '//*[@type="submit"]')
    button_sign.click()
    time.sleep(3)
    # scroll_down_random()
    button_messaging = driver.find_element(By.XPATH, '//*[@id="global-nav"]/div/nav/ul/li[4]/a')
    button_messaging.click()
    time.sleep(2)
    search_chat = driver.find_element(By.XPATH, '//*[@id="search-conversations"]')
    search_chat.send_keys(name_of_chat)
    search_chat.send_keys(Keys.ENTER)
    time.sleep(2)
    submit_application = driver.find_element(By.ID,'//*[@id="ember65"]')
    submit_application.click()

目前遇到两个问题:

  • 搜索聊天后无法选中首个聊天对象
  • 部署到云端时,如何保持登录状态,无需每次重新登录
解决方案

一、解决搜索聊天后无法选中首个聊天对象的问题

你代码最后一步犯了个低级错误:用By.ID定位元素,但传入的是XPATH路径,这肯定找不到元素。而且LinkedIn的ember开头的ID是动态生成的,每次刷新页面都会变,硬编码完全不可靠。

正确的做法是:

  • 用WebDriverWait替代固定的time.sleep,等待搜索结果加载完成
  • 用稳定的CSS选择器或XPATH定位第一个聊天结果,比如根据聊天项的通用类名

修改后的代码片段:

# 先导入需要的模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换原来的submit_application相关代码
# 等待第一个聊天结果可点击,超时时间10秒
first_chat = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'div.conversation-item__content'))
)
first_chat.click()

如果上述CSS选择器不生效,你可以打开LinkedIn的开发者工具,查看搜索结果里聊天项的DOM结构,换一个更精准的选择器,比如包含联系人名称的元素路径。

二、云端部署保持登录状态的方法

LinkedIn的登录状态靠Cookie维持,你可以在本地登录一次后把Cookie保存下来,之后每次启动Bot时直接加载Cookie,就能跳过登录步骤。

步骤1:本地登录并保存Cookie

在本地运行代码,登录成功后执行以下代码把Cookie保存到文件:

import pickle

# 确保已经登录成功,比如进入消息页面后
pickle.dump(driver.get_cookies(), open("linkedin_cookies.pkl", "wb"))

步骤2:云端加载Cookie跳过登录

修改启动代码,先加载Cookie再访问LinkedIn:

def start():
    driver.get("https://www.linkedin.com")
    # 加载保存的Cookie文件
    cookies = pickle.load(open("linkedin_cookies.pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)
    # 刷新页面,此时应该已经处于登录状态
    driver.refresh()
    # 直接进入消息页面,跳过登录流程
    button_messaging = driver.find_element(By.XPATH, '//*[@id="global-nav"]/div/nav/ul/li[4]/a')
    button_messaging.click()
    # 后续的搜索聊天逻辑...

注意事项

  • 要把linkedin_cookies.pkl和代码一起上传到云端
  • Cookie有有效期,过几个星期可能会失效,需要重新在本地登录更新Cookie
  • 云端要使用和本地相同的浏览器驱动(比如本地用Chrome,云端也要用ChromeDriver),否则Cookie可能不兼容

内容的提问来源于stack exchange,提问作者oren a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:20:33