Python Selenium爬取WhatsApp Web多类元素仅获17条结果求助
实现三类目标元素全量爬取的方案
你当前仅匹配了_ccCW单个类的元素,同时匹配三类目标类即可获取全部对应数据,以下是两种可行实现方式:
方式一:分别获取三类元素后合并(兼容Selenium 3.x旧版本)
# 分别获取三类类名对应的元素 elements_ccCW = driver.find_elements_by_class_name('_ccCW') elements_FqYAR = driver.find_elements_by_class_name('FqYAR') elements_i0jNr = driver.find_elements_by_class_name('i0jNr') # 合并所有元素到同一个列表 all_target_elements = elements_ccCW + elements_FqYAR + elements_i0jNr # 遍历输出所有元素文本 for ele in all_target_elements: print(ele.text)
方式二:CSS选择器一次性匹配(Selenium 4.x推荐,性能更高)
Selenium 4.x已废弃find_elements_by_class_name这类写法,推荐使用By类定位元素,一次性匹配三类的写法如下:
首先需要导入对应依赖:
from selenium.webdriver.common.by import By
核心爬取代码:
# CSS选择器用逗号分隔多个匹配规则,一次性命中三类元素 all_target_elements = driver.find_elements(By.CSS_SELECTOR, "._ccCW, .FqYAR, .i0jNr") for ele in all_target_elements: print(ele.text)
注意事项
- WhatsApp Web采用懒加载机制,默认仅加载当前可视区域内的元素,若需要爬取全量数据,需要先滚动聊天列表加载所有内容后再执行元素获取操作,滚动逻辑参考:
import time # 替换为你实际确认的聊天列表容器的类名,可通过F12元素检查确认 chat_container = driver.find_element(By.CSS_SELECTOR, "._2vbn4") last_height = driver.execute_script("return arguments[0].scrollHeight", chat_container) while True: # 滚动到聊天列表底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", chat_container) time.sleep(2) new_height = driver.execute_script("return arguments[0].scrollHeight", chat_container) # 滚动后高度无变化说明已加载全部内容 if new_height == last_height: break last_height = new_height
内容的提问来源于stack exchange,提问作者Developer Lachi
相关产品推荐
相关产品推荐

