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

Selenium WebDriver无法登录LinkedIn Sales Navigator问题排查

问题分析与解决方案

一、Chrome Profile加载错误(显示Person 2)

  • 路径解析问题:Mac上的~/Library/Application Support/Google/Chrome/路径在Selenium环境中可能无法正确识别波浪号,建议替换为绝对路径,例如/Users/你的用户名/Library/Application Support/Google/Chrome/。
  • Profile目录名验证:打开Chrome输入chrome://version/,查看「个人资料路径」末尾的文件夹名(Chrome显示的Person名称和实际文件夹名不一定对应),确保profile-directory参数与实际文件夹名完全一致。
  • 避免进程冲突:运行脚本前关闭所有Chrome窗口,防止现有Chrome进程占用用户数据目录,导致Profile加载异常。

二、Cookie登录失败问题

当前脚本的Cookie处理逻辑存在多处错误,修正如下:

  1. Cookie Domain错误:LinkedIn的Cookie域名应为.linkedin.com,而非.www.linkedin.com,错误域名会导致Cookie无法被页面识别。
  2. 流程逻辑错误:正确流程是先清除所有现有Cookie,再添加有效登录Cookie,而非先获取页面Cookie再修改。
  3. Expiry时间过期:脚本中硬编码的过期时间已失效,建议从实际登录后的Cookie中复制有效过期时间,或直接省略该字段让浏览器自动处理。
  4. JSESSIONID属性不完整:仅修改value不够,需确保该Cookie的domain、path、httpOnly等属性与实际登录时完全一致。

修改后的代码示例

import warnings
warnings.simplefilter("ignore", UserWarning)
import time
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from seleniumwire import webdriver

def login(driver, li_at_value, JSESSIONID_value):
    try:
        print('准备设置登录Cookie...')
        # 先打开空白页面,避免提前加载LinkedIn默认Cookie
        driver.get("about:blank")
        time.sleep(2)
        
        print('清除所有现有Cookie...')
        driver.delete_all_cookies()
        
        print('添加li_at Cookie...')
        # 从实际登录后的Cookie中复制完整属性
        driver.add_cookie({
            'domain': '.linkedin.com',
            'httpOnly': True,
            'name': 'li_at',
            'path': '/',
            'sameSite': 'None',
            'secure': True,
            'value': li_at_value
        })
        
        print('添加JSESSIONID Cookie...')
        driver.add_cookie({
            'domain': '.linkedin.com',
            'httpOnly': True,
            'name': 'JSESSIONID',
            'path': '/sales',
            'sameSite': 'None',
            'secure': True,
            'value': JSESSIONID_value
        })
        
        print('跳转至LinkedIn Sales Navigator...')
        driver.get("https://www.linkedin.com/sales/home")
        time.sleep(5)
        
        print('验证登录状态...')
        # 改用更可靠的登录后标识:用户头像
        user_avatar = driver.find_elements(By.CSS_SELECTOR, "img.global-nav__me-photo")

    except Exception as e:
        print('登录失败原因:', str(e))
        return

    if len(user_avatar) > 0:
        print('登录成功!')
        return driver
    else:
        print('登录失败,请检查Cookie有效性和属性是否正确。')
        return None

def run(li_at_value, JSESSIONID_value):
    chrome_options = Options()
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument('--ignore-ssl-errors')
    chrome_options.add_argument('--log-level=3')
    # 替换为你的绝对用户数据路径
    chrome_options.add_argument("user-data-dir=/Users/你的用户名/Library/Application Support/Google/Chrome/")
    # 替换为实际的Profile文件夹名
    chrome_options.add_argument("profile-directory=Profile 5")

    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=chrome_options)
    driver = login(driver, li_at_value, JSESSIONID_value)

    if driver:
        print('当前页面标题:', driver.title)
    else:
        print('登录失败或Driver未返回')
        driver.quit()

if __name__ == '__main__':
    try:
        # 填入从LinkedIn复制的有效Cookie值
        li_at_value = "你的有效li_at值"
        JSESSIONID_value = "你的有效JSESSIONID值"
        run(li_at_value, JSESSIONID_value)
    except Exception as e:
        print("发生错误:", str(e))

额外注意事项

  • Cookie有效性:确保li_at和JSESSIONID是从当前登录的LinkedIn账号中复制的最新值(可在Chrome开发者工具的Application -> Cookies中查看)。
  • 反爬机制:LinkedIn对自动化操作检测严格,建议添加随机延迟,避免高频请求触发限制。
  • 版本匹配:确保ChromeDriver与Chrome浏览器版本一致,webdriver-manager会自动适配,若仍有问题可手动指定对应版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:39:54