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

使用Selenium自动化LinkedIn时关闭聊天窗口失败的技术求助

问题

首次使用Selenium实现LinkedIn自动发送消息功能,卡在关闭聊天窗口环节,无法定位关闭触发元素,执行代码时抛出JavascriptException错误,错误信息为javascript error: arguments[0].click is not a function。

相关代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://linkedin.com")

time.sleep(2)

username = driver.find_element(by=By.XPATH, value="//input[@name='session_key']")
password = driver.find_element(by=By.XPATH, value="//input[@name='session_password']")

username.send_keys("hr@unitedmerchant.com")
password.send_keys("UMSUpos2022")

time.sleep(2)

submit = driver.find_element(by=By.XPATH, value="//button[@type='submit']").click()
time.sleep(2)

import random

n_pages = 3

for n in range(1, n_pages + 1):

    driver.get("https://www.linkedin.com/search/results/people/?network=%5B%22F%22%5D&origin=FACETED_SEARCH&page=" + str(n))
    time.sleep(2)

    all_buttons = driver.find_elements(By.TAG_NAME, 'button')
    message_buttons = [btn for btn in all_buttons if btn.text == "Message"]

    for i in range(2, 3):
        #click on "Message" button
        driver.execute_script("arguments[0].click();", message_buttons[i])
        time.sleep(2)

        #activate main div
        main_div = driver.find_element(by=By.XPATH, value="//div[starts-with(@class, 'msg-form__msg-content-container')]")
        driver.execute_script("arguments[0].click();", main_div)

        #type message
        paragraphs = driver.find_elements(By.TAG_NAME, 'p')
        
        all_span = driver.find_elements(By.TAG_NAME, 'span')
        all_span = [s for s in all_span if s.get_attribute("aria-hidden") == "true"]

        idx = [*range(3,23,2)]
        greetings = ["Hello", "Hi", "Hey"]
        all_names = []
        
        for j in idx:
            name = all_span[j].text.split(" ")[0]
            all_names.append(name)
             
        greetings_idx = random.randint(0, len(greetings)-1)
        message = greetings[greetings_idx] + " " + all_names[i] + ", Sorry, I didn't mean to bother you, I'm just tesing a Linkedin capabilities... My apologies!:) This is not Bluu, this message is automated."
        
        paragraphs[-5].send_keys(message)
        time.sleep(2)

        #send message
        submit = driver.find_element(by=By.XPATH, value="//button[@type='submit']").click()
        time.sleep(2)

        #close div
        close_button = driver.find_elements(By.CLASS_NAME, 'msg-overlay-bubble-header__control')
        driver.execute_script("arguments[0].click();", close_button)
        time.sleep(2)

错误栈:

---------------------------------------------------------------------------
JavascriptException                       Traceback (most recent call last)
Input In [19], in <cell line: 5>()
     46 #close div
     47 close_button = driver.find_elements(By.CLASS_NAME, 'msg-overlay-bubble-header__control')
---> 48 driver.execute_script("arguments[0].click();", close_button)
     49 time.sleep(2)

JavascriptException: Message: javascript error: arguments[0].click is not a function
  (Session info: chrome=105.0.5195.128)
解决方案

问题原因

你使用driver.find_elements()获取关闭按钮,这个方法返回的是元素列表,而非单个元素。当把列表传入execute_script时,arguments[0]是数组类型,数组没有.click()方法,因此触发报错。

修复方法

1. 修正元素获取方式

将find_elements改为find_element,获取单个关闭按钮元素:

close_button = driver.find_element(By.CLASS_NAME, 'msg-overlay-bubble-header__control')

2. 更精准的定位(推荐)

LinkedIn聊天窗口的关闭按钮带有明确的aria-label属性,用XPATH定位可避免匹配到同class的其他元素:

# 等待元素加载完成再操作,替代time.sleep提升稳定性
close_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Close chat']"))
)

3. 替换点击方式

直接使用Selenium原生的.click()方法,比execute_script更稳定可靠:

close_button.click()

修复后的完整关闭代码段

# 等待关闭按钮可点击后点击
close_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Close chat']"))
)
close_button.click()
time.sleep(2)

额外建议

  • 尽量用WebDriverWait替代time.sleep(),根据页面实际加载状态等待,提升代码稳定性。
  • LinkedIn反爬机制严格,频繁自动化操作可能触发账号限制,建议添加合理延迟,避免短时间内批量操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:20:31