【问题标题】:Selenium scrolling internal scroll bar and scraping resultsSelenium 滚动内部滚动条和抓取结果
【发布时间】:2016-09-13 14:21:59
【问题描述】:

我正在尝试为我的项目抓取 this website 以填充可用的保险产品列表。

但是,该网站有一个内部滚动条,它只显示页面上的前 10 个项目,并且只有在您向下滚动该内部条时才会显示新元素。

我该怎么做

  • 使用 python Selenium 向下滚动该内部栏?似乎找不到太多关于这方面的信息。
  • 如何使用Selenium 检索Company Name, Product Name, Paymode, product features (if active) 并返回pandas Dataframe

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    有趣的是,您根本不需要滚动容器。所有结果实际上都已加载,但其中一部分是不可见的。您可以简单地找到所有具有result_content 类的li 元素并获得所需的数据。

    提取“产品名称”的示例工作代码:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    
    
    driver = webdriver.Chrome("/usr/local/bin/chromedriver")
    driver.maximize_window()
    driver.get("http://comparefirst.sg/wap/productsListEvent.action?prodGroup=whole&pageAction=prodlisting")
    
    wait = WebDriverWait(driver, 10)
    wait.until(EC.visibility_of_element_located((By.ID, "result_container")))
    results = driver.find_elements_by_css_selector("li.result_content")
    
    for result in results:
        prod_name = result.find_element_by_id('sProdName').get_attribute("innerText")
        print(prod_name)
    
    driver.close()
    

    打印:

    AIA Gen3 (II)
    AIA Guaranteed Protect Plus
    AIA Guaranteed Protect Plus
    ...
    DIRECT- TM Basic Whole Life
    DIRECT- TM Basic Whole Life (+ Critical Illness)
    TM Legacy
    TM Legacy (+ Critical Illness)
    TM Legacy LifeFlex
    TM Legacy LifeFlex (+ Critical Illness)
    TM Retirement GIO
    TM Retirement PaycheckLife (Single Life)
    

    请注意,我们必须使用.get_attribute("innerText") 而不是.text,因为后者只会在我们的大多数元素不可见时才返回可见文本。

    【讨论】:

    • 感谢您的快速响应!这似乎工作得很好。但是,公司的名称看起来在<h3 COMPANY NAME </h3> 标签内。知道我怎么能找回这个吗?另外,如果product features 图片是active,我该如何挑选这些信息?
    • @jakewong 您应该能够使用类似result.find_element_by_* 的方法在每个result 中找到其他字段。例如。获取h3 元素:result.find_element_by_tag_name("h3").get_attribute("innerText")
    • 哦,我不知道你能做到。谢谢。我会检查一下并玩弄它。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2021-06-20
    • 2018-11-08
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多