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

LinkedIn爬虫问题:Selenium切换搜索页后元素未刷新如何解决?

问题

我正在爬取LinkedIn上的多个用户资料,需要遍历搜索结果的多页内容。我的代码如下:

for search in search_list:
    driver.get(search)
    time.sleep(30)
    names_searched = []

    time.sleep(10)

    for pages in range(5,16):
        time.sleep(30)
        driver.refresh()
        all_users = driver.find_elements(By.XPATH, "//div[@class='search-results-container']//a[contains(@href,'miniProfileUrn')][contains(@class,'scale-down')]")

        for user in all_users:
            profile_links = user.get_attribute('href')
            names_searched.append(profile_links)
        go_profile(names_searched, counter, driver)
        scroll(driver)
        curr_page = '{}{}{}'.format(search, page_counter, pages)
        driver.get(curr_page)
    counter += 1

代码可正常运行,无过时元素错误或找不到元素的问题,但切换到搜索结果第2页及之后页面时,all_users并未获取到当前页的真实资料,仍使用初始页面的资料。我尝试通过添加sleep等待页面加载、调用driver.refresh()刷新页面,但问题依旧。请问我忽略了什么?

解决方案
  • 分页URL拼接逻辑错误:LinkedIn的搜索分页是通过URL中的page参数控制的,你当前用字符串拼接的方式完全不符合LinkedIn的URL结构,导致实际没有跳转到目标分页,页面始终停留在初始页,自然只会获取到初始页的资料。
  • 未重置存储列表:names_searched在分页循环外初始化,每次分页都会累加之前的链接,若页面未正确跳转,就会重复添加初始页内容,加剧数据重复问题。
  • 多余的刷新操作:driver.refresh()会重新加载当前URL,如果你跳转分页的URL本身就错误,刷新后还是停留在初始页,这步操作完全没必要。

修正步骤:

  1. 正确生成分页URL:使用URL解析工具修改page参数,避免手动拼接出错:
from urllib.parse import urlparse, parse_qs, urlencode, urlunparse

def generate_page_url(base_url, page_num):
    parsed_url = urlparse(base_url)
    query_params = parse_qs(parsed_url.query)
    query_params['page'] = [str(page_num)]
    new_query = urlencode(query_params, doseq=True)
    return urlunparse(parsed_url._replace(query=new_query))

在循环中调用该函数生成目标分页URL:

curr_page = generate_page_url(search, pages)
driver.get(curr_page)
  1. 每次分页重置列表:将names_searched = []移到分页循环内部,确保每次只存储当前页的资料链接:
for pages in range(5,16):
    names_searched = []
    # 移除driver.refresh()
    # 用显式等待替代固定sleep,确保页面加载完成
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "//div[@class='search-results-container']"))
    )
    all_users = driver.find_elements(By.XPATH, "//div[@class='search-results-container']//a[contains(@href,'miniProfileUrn')][contains(@class,'scale-down')]")
    # 后续处理逻辑...
  1. 替换固定sleep为显式等待:固定时长的sleep无法适配网络波动,显式等待能在元素加载完成后立即执行后续操作,既提升效率又避免加载不充分的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:15:18