Selenium无法定位自定义属性及LinkedIn爬虫链接提取问题
解决LinkedIn爬取时的两个Selenium问题
问题1:定位左侧导航栏“People”按钮失败
直接通过自定义属性data-target-section-id定位即可,推荐用CSS选择器(比XPATH更简洁高效),同时建议配合显式等待确保元素加载完成,避免因元素未就绪导致的定位失败。
代码示例:
方法1:CSS选择器
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待元素可点击后再操作 people_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-target-section-id="PTFmMNSPSz2LQRzwynhRBQ=="]')) ) people_btn.click()
方法2:XPATH
people_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@data-target-section-id="PTFmMNSPSz2LQRzwynhRBQ=="]')) ) people_btn.click()
你之前用By.Link_text("People")无效,大概率是因为按钮文本存在隐藏字符、空格,或是该元素并非标准a标签,而自定义属性是稳定的唯一标识,定位成功率更高。
问题2:循环提取用户链接异常
核心问题是XPATH路径写法错误:你用的//*[contains(@href, 'miniProfileUrn')]是从整个文档根节点开始查找,因此每次循环都会匹配页面上第一个符合条件的元素。需要改成相对路径,用.//表示从当前遍历的users元素范围内查找子节点。
修正后的代码:
all_users = driver.find_elements(By.XPATH, "//*[contains(@class, 'entity-result__title-line entity-result__title-line--2-lines')]") for user in all_users: print(user) # 用.//限定查找范围为当前user元素的子节点 get_link = user.find_element(By.XPATH, ".//*[contains(@href, 'miniProfileUrn')]") print(get_link.get_attribute('href'))
修改后,每次循环都会从当前用户元素下提取对应链接,即可解决重复获取第一个用户链接的问题。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

