一、背景介绍
工作中有个需求是需要对某个页面进行监控,但由于要监控页面数据是异步加载的,因此很难从状态码和返回结果层面进行校验。于是乎想到了通过判断页面元素是否存在且显示内容是否正确来达到此目标。调研了一下发现selenium可以实现对这种动态数据加载页面的抓取
二、数据异步加载页面的监控方式
备注:我采用的是方法一文章来源:https://www.toymoban.com/news/detail-702486.html
- 方法一:使用selenium对异步加载后的页面元素进行抓取
- 方法二:使用requests库直接对异步加载的接口进行请求
二、环境准备
注意:浏览器版本与对应驱动版本必须一致文章来源地址https://www.toymoban.com/news/detail-702486.html
- Chrome浏览器版本:Chromium 77.0.3844.0
- chromedriver版本:77.0.3844.0
- selenium版本:4.9.1
- Python3
三、具体代码
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 webdriver_manager.chrome import ChromeDriverManager
url = "http://mock.test.com"
chrome_options = webdriver.ChromeOptions() # 貌似从selenium 4.6以上就不用明确指定驱动版本啦
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument("--headless")
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
driver.get(url) # 本行用于访问指定的地址
# 等待指定元素出现,最多等待10秒
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="xxx"]/div[1]/h2'))
)
title = driver.find_element(By.XPATH, '//*[@id="xxx"]/div[1]/h2').text
productname = driver.find_element(By.XPATH, '//*[@id="xxx"]/div[2]/div[1]/ul/li/span[1]').text
print("title:", title)
print("product name:", productname)
assert title == "是标题啊"
assert productname == "是名字呀"
# 关闭浏览器
driver.quit()
到了这里,关于使用selenium实现对页面元素的抓取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!