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

Selenium结合Scrapy无法完整加载VMware页面的问题求助

VMware爬取问题解决方案

问题1:确保所有“Read More”元素加载完成

  • 替换等待条件:将EC.presence_of_element_located改为EC.presence_of_all_elements_located,该条件会等待所有匹配元素都出现在DOM中,示例代码:
    wait = WebDriverWait(self.driver, 120, poll_frequency=5)
    read_more_elements = wait.until(EC.presence_of_all_elements_located((By.PARTIAL_LINK_TEXT, "Read More")))
    
  • 校验元素数量:如果明确知道目标元素数量是20,可在等待后添加校验逻辑,确保数量达标:
    while len(read_more_elements) < 20:
        time.sleep(2)
        read_more_elements = self.driver.find_elements(By.PARTIAL_LINK_TEXT, "Read More")
    
  • 滚动加载处理:若元素是滚动触发加载,需循环滚动页面触发内容加载:
    while len(read_more_elements) < 20:
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(3)
        read_more_elements = self.driver.find_elements(By.PARTIAL_LINK_TEXT, "Read More")
    

问题2:onclick属性消失及点击无效的解决

  • 原因:页面采用了动态事件绑定(如React/Vue框架的事件委托机制),onclick属性并非直接写入静态HTML,而是通过JavaScript动态绑定到元素上,因此page_source中无法看到该属性。
  • 解决办法:
    1. 直接调用元素点击方法:无需依赖onclick属性,直接用Selenium提供的点击方式,推荐用JS点击避免元素遮挡或不可交互问题:
      for elem in read_more_elements:
          self.driver.execute_script("arguments[0].click();", elem)
          time.sleep(1)  # 等待内容展开
      
    2. 检查iframe:若元素嵌套在iframe内,需先切换到iframe再操作:
      iframe = self.driver.find_element(By.CSS_SELECTOR, "iframe")
      self.driver.switch_to.frame(iframe)
      # 执行元素查找和点击操作
      self.driver.switch_to.default_content()  # 操作完成后切回主文档
      
    3. 反爬规避:部分官方网站会检测自动化工具,可尝试添加浏览器头部信息优化:
      from selenium.webdriver.firefox.options import Options
      options = Options()
      options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
      self.driver = webdriver.Firefox(options=options)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:40:41