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

如何使用Selenium 4.8根据文本定位按钮(LinkedIn自动化场景)

解决LinkedIn联系人请求自动化的按钮定位问题

我用Python+Selenium自动化LinkedIn加好友功能,卡在了「添加联系人」环节——不知道怎么根据按钮的可见文本定位元素。试了好几种方法都没用,参考的教程也没给正确语法。

已尝试的无效代码

all_buttons = Select.select_by_visible_text('Suivre')
#all_buttons = driver.find_element(by=By.XPATH, value="//button[@text='Suivre']")
# driver.find_element(By.XPATH, '//button[text()="Some text"]')
# all_buttons = driver.find_elements_by_tag_name("button")

目标按钮的HTML代码

<button aria-label="Invitez XYZ à rejoindre votre réseau" id="ember369" class="artdeco-button artdeco-button--2 artdeco-button--secondary ember-view"><!---->
<span class="artdeco-button__text">
    Se connecter
</span></button>

<!---->
<!---->

当前完整代码(无法正常运行)

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
ser = Service(ChromeDriverManager().install())
browser = webdriver.Chrome(service=ser)
url='https://www.google.com'
browser.get(url)

driver =
webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://www.linkedin.com')
time.sleep(2)

#LOG IN 

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('MY EMAIL')
password.send_keys('MY PASSWORD')
time.sleep(2)


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

time.sleep(5)


# ADD CONTACTS

driver.get("https://www.linkedin.com/search/results/people/?sid=0tK")
time.sleep(5)


all_buttons = driver.find_element(By.XPATH, "//button[text()='Se connecter']")

connect_buttons = [btn for btn in all_buttons]

for btn in connect_buttons:
    btn.click()

问题分析与修正方案

1. 按钮文本的定位逻辑错误

目标按钮的可见文本Se connecter并不是直接在<button>标签内,而是嵌套在子标签<span class="artdeco-button__text">里。同时文本包含换行和空格,直接用text()匹配会失败,需要用normalize-space()处理空格。

正确的XPath定位方式:

# 匹配所有包含目标文本的按钮
all_buttons = driver.find_elements(By.XPATH, "//span[normalize-space(text())='Se connecter']/parent::button")

2. 错误使用API

  • Select类仅用于处理下拉选择框,不能用来定位普通按钮,完全不适用当前场景。
  • driver.find_elements_by_tag_name是旧版API,建议使用新版的driver.find_elements(By.TAG_NAME, "button")。

3. 代码其他冗余/错误点

  • 初始化了两个浏览器实例(browser和driver),完全多余,保留一个即可。
  • driver.find_element只会返回单个元素,遍历会报错,必须用driver.find_elements获取所有匹配元素。
  • 硬编码time.sleep()稳定性差,改用显式等待(WebDriverWait)能更可靠地等待元素加载完成。

修正后的完整代码

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

# 初始化单个浏览器实例
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
wait = WebDriverWait(driver, 10)

# 登录LinkedIn
driver.get('https://www.linkedin.com')

# 显式等待用户名输入框加载
username = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@name='session_key']")))
password = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@name='session_password']")))

username.send_keys('MY EMAIL')
password.send_keys('MY PASSWORD')

# 等待登录按钮并点击
submit_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']")))
submit_btn.click()

# 进入搜索结果页面
driver.get("https://www.linkedin.com/search/results/people/?sid=0tK")

# 等待所有"Se connecter"按钮加载完成
connect_buttons = wait.until(EC.presence_of_all_elements_located(
    (By.XPATH, "//span[normalize-space(text())='Se connecter']/parent::button")
))

# 遍历点击按钮(注意LinkedIn有频率限制,避免触发反爬)
for btn in connect_buttons:
    try:
        btn.click()
        time.sleep(2)  # 适当延迟避免过快操作
    except Exception as e:
        print(f"点击按钮失败: {e}")
        continue

内容的提问来源于stack exchange,提问作者A.Tshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:40:21