我正在尝试使用 Selenium 抓取 Instagram 照片。该脚本正在努力获取所有类型帖子(单张、视频、轮播)的第一张图像,但是当我尝试获取轮播帖子的任何后续图像的 src 时,它总是返回第一张图像的 src。没有错误,只是没有得到想要的输出。问题在于 new_image_element 变量,我提供了更多上下文代码。我只使用过 Selenium,这是 BeautifulSoup 方便的地方还是有不同的解决方案?任何帮助或见解将不胜感激!
image_element= post_element.find_element(By.XPATH, ".//div[@class='_aagv']/img")
image_src= image_element.get_attribute('src')
next_picture=WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='Next']")))
driver.execute_script("arguments[0].click();", next_picture)
new_image_element= post_element.find_element(By.XPATH, ".//div[@class='_aagv']/img")
new_image_src= new_image_element.get_attribute('src')
我尝试使用 WebDriverWait 直到元素存在,同时使用 driver 和 post_element,希望它会等到新图像出现才能获取 src,或者至少可能在到达第四张幻灯片时给我第二个图像 src左右,但它仍然检索到第一个图像 src。我尝试了
driver.find_element(By.XPATH, ".//div[@class='_aagv']/img")
,但这返回了页面第一篇文章的图像 src,而不是我所在的文章。
使用上述所有内容,我还尝试实现一个 while 语句,该语句继续搜索新图像 src,同时新图像 src 仍然与原始图像 src 匹配,以及一个范围为 10 的 for 循环,运行 new_image_element 和 new_image_src 变量并在图像 src 最终更改时中断。我认为脚本只是没有足够的时间来找到新的 src,但 while 和 for 循环都没有抓取不同的图像 src。
Instagram 轮播只是将元素添加到 DOM 并将其显示给您,但第一张图像仍然位于 DOM 中的第一位。它可以是这样的:
<div id="postElement">
<div id="1" style="visibility: hidden" />
<div id="2" style="visibility: visible" />
<div id="3" style="visibility: hidden" />
</div>
因此您会看到不同的内容,但您的查询将继续返回第一张图像。您需要修改查询以查找其他属性(例如我的示例中的可见性)