selenium 如何设置限制滚动页面,而报废Instagram?

6ljaweal  于 2023-01-20  发布在  其他
关注(0)|答案(2)|浏览(150)
scrolldown=driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var scrolldown=document.body.scrollHeight;return scrolldown;")
match=False
while(match==False):
    last_count = scrolldown
    time.sleep(3)
    scrolldown = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var scrolldown=document.body.scrollHeight;return scrolldown;")
    if last_count==scrolldown:
        match=True

我想用Selenium从Instagram个人资料中抓取数据,但我不知道如何设置页面滚动的限制。由于上面的代码,页面一直滚动,直到我不知道它什么时候停止。我只想滚动该帐户的帖子,直到找到我要找的。

5m1hhzi4

5m1hhzi41#

正如您提到的,"滚动查看该帐户的帖子,直到找到我要查找的帖子" 假定特定元素应该在以下项中具有唯一属性:

    • 身份证 *
    • 类别名称 *
    • 咏叹调标签 *
    • 内部文本 *

也可以通过HTML DOM的属性组合在HTML DOM中唯一标识。一旦能够构造唯一标识元素的locator strategy,就可以轻松使用scrollIntoView()方法,如下所示:

element = driver.find_element(By.XPATH, "//unique_xpath_locator")
driver.execute_script("return arguments[0].scrollIntoView();", element)
jmo0nnb3

jmo0nnb32#

最好和最安全的滚动方式可能是使用

element = driver.find_element(...)
driver.execute_script('arguments[0].scrollIntoView({block: "center", behavior: "smooth"});', element)

这个命令平滑地滚动,element垂直地位于页面的中心,所以在你的情况下,我建议滚动到最早加载的帖子(它应该位于屏幕的底部),这样新的帖子就会被加载,重复这个过程,直到你找到你要找的帖子。你可以用下面的代码来实现

while 1:
    loaded_posts = driver.find_elements(By.CSS_SELECTOR, 'article > div > div > div > div')
    # scroll to last loaded post
    driver.execute_script('arguments[0].scrollIntoView({block: "center", behavior: "smooth"});', loaded_posts[-1])
    post_found = ...
    if post_found:
        break

相关问题