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

Selenium Python脚本无法点击LinkedIn登录按钮的问题排查

Selenium脚本错误排查:谷歌搜索进入LinkedIn并点击登录

问题描述

我是Selenium新手,尝试使用Python编写脚本,通过谷歌搜索进入个人LinkedIn主页并点击登录按钮,但两种实现方式(一段参考ChatGPT编写,一段自行编写)均失败。以下是两段代码,请求帮忙排查代码中的错误:

参考ChatGPT的代码

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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

# Initialize the Chrome driver
driver = webdriver.Chrome()

try:
    # Maximize the browser window
    driver.maximize_window()

    # Open Google
    driver.get("https://www.google.com/")
    print("Opened Google.")

    # Locate the search bar and search for"my name Linkedin"
    element = driver.find_element(By.NAME, "q")
    element.clear()
    element.send_keys("my name Linkedin")
    element.send_keys(Keys.RETURN)
    print("Searched for 'my name Linkedin'.")

    # Wait for the search results to appear and click the LinkedIn link
    linkedin_link = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//a[contains(@href, 'linkedin.com')]"))
    )
    linkedin_link.click()
    print("Clicked on LinkedIn link.")

    # Wait for the LinkedIn page to load and click the sign-in button
    sign_in_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//a[contains(@class, 'sign-in-modal__outlet-btn cursor-pointer btn-md btn-primary')]"))
    )
    sign_in_button.click()
    print("Clicked on 'Sign in' button.")

    # Verify the sign-in page is loaded by checking for the sign-in page elements
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "username"))
    )
    print("Sign-in page loaded successfully.")

except Exception as e:
    print("An error occurred:", e)
finally:
    # Wait for a while to see the result before quitting
    time.sleep(40)
    driver.quit()

自行编写的基础代码

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.google.com/")
# to locate any element by its class name on the webpage
element = driver.find_element(By.CLASS_NAME,"gLFyf")
# to clear any already present text
element.clear() 
#search for something on the search bar of the google webpage
element.send_keys("my name Linkedin")
element.send_keys(Keys.RETURN)
element = driver.find_element(By.CLASS_NAME,"VuuXrf")
element.click()
element = driver.find_element(By.CLASS_NAME,"sign-in-modal__outlet-btn cursor-pointer btn-md btn-primary")
element.click()
# element                           
time.sleep(40)
driver.quit()

错误排查与修复建议

参考ChatGPT代码的问题

  • 登录按钮定位逻辑错误:contains(@class, 'sign-in-modal__outlet-btn cursor-pointer btn-md btn-primary')的写法不符合class属性匹配规则,多个空格分隔的类名是独立属性,不能直接用完整字符串匹配,且这类动态class易随页面更新失效。
  • 搜索结果匹配范围过宽://a[contains(@href, 'linkedin.com')]会匹配所有含LinkedIn的链接,第一个结果可能是官方首页而非个人主页,导致后续找不到目标按钮。

自行编写代码的问题

  • 多类名无法用By.CLASS_NAME定位:By.CLASS_NAME仅支持单个类名,传入多个空格分隔的类名会被当作完整类名,页面中不存在该元素。
  • 缺少等待机制:搜索结果加载需要时间,直接调用driver.find_element会因元素未加载报错。
  • 搜索结果元素定位错误:VuuXrf是搜索结果的容器类,点击容器无法触发链接跳转,需定位容器内的<a>标签。

修复后的示例代码

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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()

try:
    driver.maximize_window()
    driver.get("https://www.google.com/")

    # 定位谷歌搜索框并执行搜索
    search_box = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.NAME, "q"))
    )
    search_box.clear()
    search_box.send_keys("你的真实姓名 LinkedIn")
    search_box.send_keys(Keys.RETURN)

    # 精准定位个人LinkedIn主页链接
    linkedin_profile = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'linkedin.com/in/') and contains(text(), '你的真实姓名')]"))
    )
    linkedin_profile.click()

    # 切换到LinkedIn主页所在的新标签页
    driver.switch_to.window(driver.window_handles[-1])

    # 定位并点击登录按钮(用文本定位更稳定)
    sign_in_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//a[text()='登录']"))
    )
    sign_in_btn.click()

    # 验证登录页面加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "username"))
    )
    print("登录页面加载成功")

except Exception as e:
    print("错误信息:", e)
finally:
    time.sleep(10)
    driver.quit()

关键修复点说明

  • 精准匹配个人主页:用linkedin.com/in/识别个人主页链接,结合姓名文本过滤,避免点击错误页面。
  • 处理标签页切换:谷歌搜索结果的LinkedIn链接通常在新标签打开,需切换标签页继续操作。
  • 稳定的元素定位:用按钮文本"登录"替代易变的class,提升脚本兼容性。
  • 全流程显式等待:所有元素操作前加入等待,确保元素可交互,避免页面加载延迟导致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:54:52