【发布时间】:2017-02-15 16:47:21
【问题描述】:
我正在使用 python 和 Webdriver 从页面中抓取数据,该页面在用户向下滚动页面时动态加载内容(延迟加载)。我一共有 30 个数据元素,而没有先向下滚动就只显示了 15 个。
在多次滚动到页面底部直到每个元素都加载后,我正在定位我的元素,并通过以下方式获取它们的值:
# Get All Data Items
all_data = self.driver.find_elements_by_css_selector('div[some-attribute="some-attribute-value"]')
# Iterate Through Each Item, Get Value
data_value_list = []
for d in all_data:
# Get Value for Each Data item
data_value = d.find_element_by_css_selector('div[class="target-class"]').get_attribute('target-attribute')
#Save Data Value to List
data_value_list.append(data_value)
当我使用 ChromeDriver 执行上述代码时,同时将浏览器窗口留在我的屏幕上,我得到所有 30 个数据值来填充我的 data_value_list。当我使用 ChromeDriver 执行上述代码并最小化窗口时,我的列表 data_value_list 仅填充了最初的 15 个数据值。
使用 PhantomJS 时也会出现同样的问题,我的 data_value_list 仅限于页面上最初可见的数据值。
是否可以在最小化浏览器的同时加载这些类型的元素,最好是在使用 PhantomJS 的同时加载这些类型的元素?
注意:我正在使用操作链向下滚动,使用以下方法 .send_keys(Keys.PAGE_DOWN).perform() 计算次数。
【问题讨论】:
标签: python web-scraping webdriver phantomjs