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

Python Selenium无法定位点击LinkedIn搜索结果People按钮

LinkedIn搜索结果分类按钮定位失效解决方案

问题背景

开发Python Selenium自动化脚本实现LinkedIn自动化操作时,完成搜索关键词提交后,无法定位并点击「People(人员)」「Companies(公司)」等结果分类按钮,原有实现代码如下:

# Import libraries and packages for the project 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from time import sleep
from selenium.webdriver.chrome.service import Service
import csv

# Task 1: Login to Linkedin
# Task 1.1: Open Chrome and Access Linkedin login site
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe", options=options)
sleep(2)
driver.maximize_window()
driver.get('https://www.linkedin.com/login')
sleep(2)

# Task 1.2: Key in login credentials
email_field = driver.find_element(By.ID, 'username')
email_field.send_keys('XXXXXXXXX@.com')
sleep(3)

password_field = driver.find_element(By.NAME, 'session_password')
password_field.send_keys('XXXXXXX')
sleep(2)

# Task 1.2: Click the Login button
signin_field = driver.find_element(By.XPATH, '//*[@id="organic-div"]/form/div[3]/button')
signin_field.click()
sleep(3)


# Task 2: Search for the profile we want to crawl
# Task 2.1: Locate the search bar element
search_field = driver.find_element(By.XPATH, '//*[@id="global-nav-typeahead"]/input')
# Task 2.2: Input the search query to the search bar
search_query = 'Software Engineer'
search_field.send_keys(search_query)
# Task 2.3: Search
search_field.send_keys(Keys.RETURN)

失效原因

  • 原有定位逻辑使用从根节点遍历的绝对XPath,LinkedIn前端DOM节点为动态渲染,id属性、节点层级会随页面版本、加载状态动态变化,绝对路径稳定性极差
  • 搜索提交后页面为异步加载,固定时长的sleep()等待无法保证分类按钮已经渲染完成,提前执行定位必然触发元素不存在报错
  • 分类按钮本身带有稳定的文本、属性特征,不需要依赖冗长的层级路径定位

修复步骤

  • 引入Selenium显式等待模块,替换不可靠的固定等待,等目标元素加载到可点击状态后再执行操作
  • 用文本匹配的相对XPath定位分类按钮,不依赖动态变化的节点id和层级

修正后可运行代码

在原有搜索提交的代码后,补充以下逻辑即可实现分类按钮点击:

# 新增:导入显式等待相关模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 原有搜索提交逻辑
search_field.send_keys(Keys.RETURN)

# 等待搜索结果页加载完成,最长等待10秒
wait = WebDriverWait(driver, 10)

# 点击「People/人员」按钮
people_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "People")]')))
people_btn.click()

# 如果需要点击「Companies/公司」按钮,用以下逻辑即可
# companies_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Companies")]')))
# companies_btn.click()

注意事项

  • 如果你的LinkedIn界面语言是中文,把XPath里匹配的文本换成对应中文即可,找人员按钮就匹配"人员",找公司按钮就匹配"公司"
  • 不要全靠sleep卡时间,显式等待会在元素可点击的时候立刻往下执行,不会因为等待时间太短报错,也不会白等多余的时间
  • 如果点击时提示元素被遮挡,就在点击前加一行滚动逻辑把元素滚到可视区域:driver.execute_script("arguments[0].scrollIntoView();", people_btn)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:30:39