我已经在python中编写了一个与selenium结合使用的脚本,以便从网页中的某些图像中获取一些标题。问题是我要解析的内容位于该页面底部附近。所以,如果我尝试采用传统方式来抓取它,浏览失败。
所以,我在我的刮刀中使用了一个javascript代码让浏览器滚动到底部并且它有效。
然而,我并不认为这是一个很好的解决方案,可以跟上.scrollIntoView()
这么努力,但这也没有用。什么是达到目的的理想方式?
这是我的剧本:
from selenium import webdriver
import time
URL = "https://www.99acres.com/supertech-cape-town-sector-74-noida-npxid-r922?sid=UiB8IFFTIHwgUyB8IzMxIyAgfCAxIHwgNyM0MyMgfCA4MjEyIHwjNSMgIHwg"
driver = webdriver.Chrome()
driver.get(URL)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") #I don't wish to keep this line
time.sleep(3)
for item in driver.find_elements_by_css_selector("#carousel img"):
print(item.get_attribute("title"))
driver.quit()
答案 0 :(得分:1)
尝试使用下面的代码,该代码应该允许您滚动到所需的节点并抓取图像:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
banks = driver.find_element_by_id("xidBankSection")
driver.execute_script("arguments[0].scrollIntoView();", banks)
images = WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#carousel img")))
for image in images:
print(image.get_attribute("title"))
一些解释:最初这些图像在源代码中不存在,并且在滚动到BankSection内部后生成,因此您需要向下滚动到BankSection并等待直到生成图像
答案 1 :(得分:0)
您可以尝试以下代码行
recentList = driver.find_elements_by_css_selector("#carousel img"):
for list in recentList :
driver.execute_script("arguments[0].scrollIntoView();", list )
print(list.get_attribute("title"))