Selenium返回10页最优方案及LinkedIn翻页问题求助
LinkedIn爬虫问题解决方案
一、下一页按钮定位修复
你原代码里的下一页按钮定位有语法错误——把click()写在了element_to_be_clickable的参数里,这会导致等待逻辑失效。另外LinkedIn的元素类名定位用CSS选择器比XPATH更稳定,给你两种可靠的定位方案:
方案1:CSS选择器定位(推荐)
# 等待下一页按钮可点击 nxt_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.artdeco-pagination__button--next"))) # 确保按钮在可视区域(避免因滚动未到位导致点击失败) driver.execute_script("arguments[0].scrollIntoView();", nxt_button) # 点击按钮 nxt_button.click()
方案2:修正后的XPATH定位
如果坚持用XPATH,注意要精准匹配button元素,避免误匹配其他节点:
nxt_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'artdeco-pagination__button--next')]"))) nxt_button.click()
二、优化返回搜索页的方法(替代10次driver.back())
连续10次driver.back()不仅低效,还容易因为历史记录混乱导致页面状态异常,推荐两种更优方案:
方案1:新标签页打开用户档案(最优)
在新标签页处理用户档案,无需返回操作,直接关闭标签页切回搜索页:
# 先保存搜索页的窗口句柄 search_window = driver.current_window_handle for user in all_users: profile_link = user.get_attribute('href') # 新标签页打开用户档案 driver.execute_script("window.open(arguments[0]);", profile_link) # 切换到新标签页 driver.switch_to.window(driver.window_handles[-1]) # 处理用户档案逻辑 go_profile(profile_link, counter, driver) # 关闭当前标签页 driver.close() # 切回搜索页 driver.switch_to.window(search_window) counter += 1 # 处理完一页后直接操作下一页 scroll(driver) nxt_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.artdeco-pagination__button--next"))) nxt_button.click()
方案2:保存搜索页URL,直接跳转回去
如果不想用多标签,提前保存搜索页的URL,处理完所有用户后直接跳转回搜索页:
# 保存当前搜索页的URL search_url = driver.current_url for user in all_users: profile_link = user.get_attribute('href') driver.get(profile_link) go_profile(profile_link, counter, driver) counter += 1 # 直接跳转回搜索页,替代10次back driver.get(search_url) scroll(driver) nxt_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.artdeco-pagination__button--next"))) nxt_button.click()
另外补充:你原代码里all_users = driver.find_elements(By.XPATH,后面的XPATH不完整,建议用"//a[contains(@class, 'app-aware-link') and contains(@href, '/in/')]"来精准定位用户链接,确保能获取到每页10个用户。
内容的提问来源于stack exchange,提问作者Jesper Ezra
相关产品推荐
相关产品推荐

