我在python中编写了一个脚本来解析网页中的一些名字。该网页中可用的项目一次不会全部显示,而是需要滚动到底部以让网页发布更多项目,并在另一次滚动时再次发布更多内容,依此类推,直到所有项目都是可见。问题是项目不在正文中,这就是driver.execute_script("return document.body.scrollHeight;")
此命令不起作用的原因(IMO)。它位于左侧区域,就像一个滑动容器。如何到达该容器的底部并从该网页解析名称?除了控制延迟加载之外,我几乎写了所有代码。我附上一张图片,通过称之为滑动容器,让您了解我的意思。
该网页的链接:Link
这是我迄今为止所做的:
from selenium import webdriver; import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("replace_the_above_link")
check_height = driver.execute_script("return document.body.scrollHeight;")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
height = driver.execute_script("return document.body.scrollHeight;")
if height == check_height:
break
check_height = height
for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".select_list h2 a"))):
print(item.text)
driver.quit()
这是包含项目Click Here
的框的图像目前我的刮刀正在解析加载页面时可见的项目。
答案 0 :(得分:3)
下面的代码应该允许您通过尽可能多的时间滚动容器来生成XHR请求,然后抓取所需的数据:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.weedsta.com/dispensaries/in/california")
entries_count = len(wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "select_list"))))
while True:
driver.find_element_by_class_name("tel").send_keys(Keys.END)
try:
wait.until(lambda driver: entries_count < len(driver.find_elements_by_class_name("select_list")))
except:
break
for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".select_list h2 a"))):
print(item.text)
driver.quit()