硒无法在Instagram上获取所有元素

时间:2019-11-02 16:46:09

标签: python selenium xpath selenium-chromedriver

我正在使用Python硒创建脚本来抓取instagram用户帖子。如果用户有62条帖子,我希望获得全部62条帖子。

我试图向下滚动,直到所有帖子都加载完毕,并使用xpath及其工作获取元素/帖子。但只有29个元素/职位,而不是全部62个元素/职位。

    driver.get("https://instagram.com/celmirashop/")

    #scroll until all post loaded
    scroll()
    wait = WebDriverWait(driver, 15)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.eLAPa")))

    time.sleep(30)

    #getting list cards of posts
    list_cards = driver.find_elements_by_xpath("//*[@class='v1Nh3 kIKUG  _bz0w']")
    print(len(list_cards))

如果用户有62条帖子,我想获得62条(全部)帖子的元素

2 个答案:

答案 0 :(得分:0)

他们以难以抓取的方式设计应用程序。元素是延迟加载的,因此当您滚动时,某些元素也可能会消失。

我会说使用xpath泛型,并且像//a//img一样不变,因为它们会将类名再次更改为随机名称。

此外,由于您已经有了滚动方法,因此请从头开始。记录所有元素并滚动一些,然后再次登录并刮取更多。循环播放,直到找到页面元素的末尾,例如//footer

答案 1 :(得分:0)

当滚动instagram时,将显示新的12张图像,但是instagram将删除12张通过的图像。通过滚动(每次向下滚动)时保存12张图片,我找到了解决方案。所以在instagram删除传递的12张图片之前,我已经将该图片保存在variabel

driver.get("https://instagram.com/celmirashop/")


semua_url_lengkap = []
semua_url_post = []
nomor=1
for i in range(50):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    print(nomor)
    nomor+=1
    #mendapatkan list tiap cards update status
    article = driver.find_element_by_tag_name("article")
    list_cards = article.find_elements_by_tag_name("a")

    for item in list_cards:

        url_lengkap=item.get_attribute("href")
        semua_url_lengkap.append(url_lengkap)

        segmen = url_lengkap.rsplit('/', 2)
        semua_url_post.append(segmen[1])


print(len(semua_url_post))
print(semua_url_post)