如何在剪贴instagram时设置限制滚动页面?


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个人资料中抓取数据,但我不知道如何设置滚动页面的限制。由于上面的代码,页面一直滚动,直到我不知道它什么时候停止。我只是想滚动通过该帐户的帖子,直到我找到一个我正在寻找。

正如您提到的"滚动该帐户的帖子,直到我找到我正在寻找的">大概特定的元素应该有一个唯一的属性:

  • id
  • classname
  • aria-label
  • innerText实现

或可以在HTML DOM中通过其属性的组合唯一标识。一旦您能够构建唯一标识元素的定位器策略,您就可以轻松地使用scrollIntoView()方法,如下所示:

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

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

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

最新更新