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

使用Selenium开发LinkedIn自动投递机器人时元素定位失败

问题:Selenium定位LinkedIn「Jobs」元素失败,报错NoSuchElementException

我正在使用Python的Selenium库开发LinkedIn自动投递机器人,登录后无法定位页面上的「Jobs」元素,已尝试增加等待时长但问题仍未解决。

相关代码

类初始化与登录代码

from unicodedata import name
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import json
from selenium.webdriver.common.by import By
from time import sleep
from sympy import Id           

class EasyApplyLinkedIn ():
    def __init__(self,data):            
        """param initialization"""
        self.email =data ["email"]
        self.password = data["password"]
        self.keywords = data["keywords"]
        self.location = data["location"] 
        self.driver = webdriver.Chrome(r'ApplicationBot\\driver_path\\chromedriver.exe')
        
    def loginLinkedIn (self):
        self.driver.get("""https://www.linkedin.com/loginsession_redirect=https%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fcompany%2Flogin&fromSignIn=true&trk=organization_guest_nav-header-signin""")

        ## Introduce email and password and hit enter 
        login_email =self.driver.find_element(By.NAME,'session_key')
        login_email.clear ()
        # basically use the sendkeys fxn to send our info to the page
        login_email.send_keys(self.email)   

        login_password =self.driver.find_element(By.NAME,'session_password')
        login_password.clear ()
        # basically use the sendkeys fxn to send our info to the page
        login_password.send_keys(self.password)
        login_password.send_keys(Keys.RETURN)

出现问题的job_search方法代码段

def job_search (self):
        ## clicking on the job button 
        self.driver.implicitly_wait(5)
        searchDriver = self.driver.find_element() 

        jobs_link  =searchDriver(By.LINK_TEXT,'Jobs')
        clicl_jobs_link= searchDriver.click
        sleep (1)
        
        job_box = searchDriver(By.XPATH,"//*[@id='global-nav']/div/nav/ul/li[7]/button/div/div/li-icon/svg/path")              
        searchDriver.clear()
        send_keyword = searchDriver.send_keys(self.keywords)
        sleep (1)

        ## specify location
        location_box = searchDriver(By.XPATH,"//input[starts-with(@id,'jobs-search-box-location']")                #find via xml path expression
        searchDriver.clear()
        send_location = searchDriver.send_keys(self.location)
        sleep (1)
        ## hitting enter
        searchDriver.send_keys(Keys.RETURN)

报错信息

[9080:29296:0720/161241.697:ERROR:device_event_log_impl.cc(214)]
[16:12:41.697] USB: usb_device_handle_win.cc:1048 Failed to read
descriptor from node connection: A device attached to the system
is not functioning. (0x1F)
[9080:29296:0720/161241.716:ERROR:device_event_log_impl.cc(214)]
[16:12:41.716] USB: usb_device_handle_win.cc:1048 Failed to read
descriptor from node connection: A device attached to the system
is not functioning. (0x1F)
Traceback (most recent call last):
File "e:\Job\ApplicationBot\main.py", line 79, in 
bot.job_search()
File "e:\Job\ApplicationBot\main.py", line 44, in job_search
searchDriver = self.driver.find_element()
File "C:\Users\lihua\AppData\Roaming\Python\Python39\site-
packages\selenium\webdriver\remote\webdriver.py", line 857, in
find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Users\lihua\AppData\Roaming\Python\Python39\site-
packages\selenium\webdriver\remote\webdriver.py", line 435, in
execute
self.error_handler.check_response(response)
File "C:\Users\lihua\AppData\Roaming\Python\Python39\site-
packages\selenium\webdriver\remote\errorhandler.py", line 247, in
check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no
such element: Unable to locate element: {"method":"css
selector","selector":"[id="None"]"}
(Session info: chrome=103.0.5060.114)
Stacktrace:
Backtrace:
Ordinal0 [0x005756B3+2184883]
Ordinal0 [0x0050E5F1+1762801]
Ordinal0 [0x00423DA8+802216]
Ordinal0 [0x00451B40+990016]
Ordinal0 [0x00451DDB+990683]
Ordinal0 [0x0047EC32+1174578]
Ordinal0 [0x0046CB54+1100628]
Ordinal0 [0x0047CF52+1167186]
Ordinal0 [0x0046C926+1100070]
Ordinal0 [0x00446EA0+945824]
Ordinal0 [0x00447D96+949654]
GetHandleVerifier [0x00814192+2704034]
GetHandleVerifier [0x0080687D+2648461]
GetHandleVerifier [0x0060119A+529066]
GetHandleVerifier [0x00600006+524566]
Ordinal0 [0x00514F2B+1789739]
Ordinal0 [0x00519978+1808760]
Ordinal0 [0x00519A65+1808997]
Ordinal0 [0x00522A01+1845761]
BaseThreadInitThunk [0x76CAFA29+25]
RtlGetAppContainerNamedObjectPath [0x77A87A9E+286]
RtlGetAppContainerNamedObjectPath [0x77A87A6E+238]

问题排查与修复方案

核心错误分析

  1. 无效的元素定位调用:searchDriver = self.driver.find_element() 这行代码未传入任何定位参数,Selenium默认使用CSS selector查找id="None"的元素,直接触发NoSuchElementException,这是报错的直接原因。
  2. 错误的API使用方式:后续代码将searchDriver(本应是WebElement对象)当成定位方法调用(如searchDriver(By.LINK_TEXT,'Jobs')),完全不符合Selenium调用规范。
  3. 定位器语法错误:
    • 位置搜索框的XPATH缺少闭合括号://input[starts-with(@id,'jobs-search-box-location'] 应改为 //input[starts-with(@id,'jobs-search-box-location')]
    • 使用固定索引li[7]定位Jobs元素不可靠,页面布局变化会导致定位失效。
  4. 等待策略不够可靠:仅用隐式等待和sleep,无法确保元素完全加载并可交互。

修复后的job_search方法

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def job_search(self):
    # 使用显式等待替代隐式等待,更可靠
    wait = WebDriverWait(self.driver, 10)

    # 等待并定位Jobs导航链接
    jobs_link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Jobs')))
    jobs_link.click()
    sleep(1)

    # 等待并定位职位关键词搜索框
    job_box = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@id='jobs-search-box-keyword-id']")))
    job_box.clear()
    job_box.send_keys(self.keywords)
    sleep(1)

    # 等待并定位位置搜索框,修复XPATH语法错误
    location_box = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[starts-with(@id,'jobs-search-box-location')]")))
    location_box.clear()
    location_box.send_keys(self.location)
    sleep(1)

    # 提交搜索
    location_box.send_keys(Keys.RETURN)

额外优化建议

  • 替换By.LINK_TEXT为更稳定的定位器,比如By.XPATH, "//a[@data-link-to='jobs']",避免因语言/页面文本变化导致定位失败。
  • 减少sleep的使用,尽量用显式等待覆盖所有元素交互场景,提升代码稳定性。
  • 注意LinkedIn的反爬机制,避免操作过于频繁,可适当增加随机等待时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:24:23