大岭山网站建设公司/软文小故事200字

大岭山网站建设公司,软文小故事200字,武汉信息seo,mvc网站开发 案例视频本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动(不容易遇到版本或者兼容性的问题) 驱动下载网址:链接: link 1、实战1 (1)安装 selenium 库 pip install selenium&#…

本质

python第三方库 selenium 控制 浏览器驱动
浏览器驱动控制浏览器

  • 推荐 edge 浏览器驱动(不容易遇到版本或者兼容性的问题)
  • 驱动下载网址:链接: link

1、实战1

(1)安装 selenium 库

pip install selenium

(2)将驱动文件exe放在py文件同级目录下

在这里插入图片描述

(3)初步体验驱动器控制浏览器

# 从selenium库中导入webdriver模块
from selenium import webdriver
# 从selenium.webdriver.common.by模块中导入By类,用于定位元素
from selenium.webdriver.common.by import By
# 从selenium.webdriver.common.keys模块中导入Keys类,用于模拟键盘按键操作
from selenium.webdriver.common.keys import Keys
import time# 若你想用Edge浏览器,使用下面这行代码,前提是msedgedriver.exe路径正确
driver = webdriver.Edge("./msedgedriver.exe")# get方法会一直等到页面被完全加载,然后才会继续程序
driver.get("http://www.baidu.com/")# id="kw" 是百度搜索输入框,输入字符串 "长城"
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("长城")# id="su" 是百度搜索按钮,click() 是模拟点击
driver.find_element(By.CSS_SELECTOR, "#su").click()# 为了便于观察搜索结果,等待 5 秒
time.sleep(5)
# 关闭浏览器
driver.quit()

(4)元素定位

1.获取单个元素——元素不存在会报错

# 通过 ID 定位元素
element_by_id = driver.find_element(By.ID, "inputOriginal")# 通过 CSS 选择器定位元素 id-#
element_by_css = driver.find_element(By.CSS_SELECTOR, "#inputOriginal")# 通过标签名定位元素
element_by_tag = driver.find_element(By.TAG_NAME, "div")# 通过 name 属性定位元素
element_by_name = driver.find_element(By.NAME, "username")# 通过链接文本定位元素
element_by_link_text = driver.find_element(By.LINK_TEXT, "下一页")

2.获取多个元素——返回列表(元素不存在返回空)

# 通过 ID 定位多个元素
elements_by_id = driver.find_elements(By.ID, "inputOriginal")# 通过 CSS 选择器定位多个元素
elements_by_css = driver.find_elements(By.CSS_SELECTOR, "#inputOriginal")# 通过标签名定位多个元素
elements_by_tag = driver.find_elements(By.TAG_NAME, "div")# 通过 name 属性定位多个元素
elements_by_name = driver.find_elements(By.NAME, "username")# 通过链接文本定位多个元素
elements_by_link_text = driver.find_elements(By.LINK_TEXT, "下一页")# 后续可对定位到的元素列表进行操作,例如遍历元素列表
for element in elements_by_id:print(element.text)

2、实战2:访问有道翻译,获取翻译后的内容

# 从selenium库中导入webdriver模块
from selenium import webdriver
# 从selenium.webdriver.common.by模块中导入By类,用于定位元素
from selenium.webdriver.common.by import By
# 从selenium.webdriver.common.keys模块中导入Keys类,用于模拟键盘按键操作
from selenium.webdriver.common.keys import Keys
import time# 若你想用Edge浏览器,使用下面这行代码,前提是msedgedriver.exe路径正确
driver = webdriver.Edge("./msedgedriver.exe")# 加载有道翻译页面
driver.get("https://fanyi.youdao.com/#/TextTranslate")# 等待页面加载
time.sleep(2)# 获取输入框
input_box = driver.find_element(By.ID, "js_fanyi_input")# 输入内容
input_box.send_keys("hello")# 等待翻译完成
time.sleep(2)# 获取翻译后的内容
transTarget = driver.find_element(By.ID, "js_fanyi_output_resultOutput")
print(transTarget.text)
# 为了便于观察搜索结果,等待 5 秒
time.sleep(5)
# 关闭浏览器
driver.quit()

3、实战3:爬取当当网站商品信息

(1)内容获取

在这里插入图片描述

(2)窗口操作

在这里插入图片描述

(3)实战

# 从selenium库中导入webdriver模块
from selenium import webdriver
# 从selenium.webdriver.common.by模块中导入By类,用于定位元素
from selenium.webdriver.common.by import By
# 从selenium.webdriver.common.keys模块中导入Keys类,用于模拟键盘按键操作
from selenium.webdriver.common.keys import Keys
import time# 若你想用Edge浏览器,使用下面这行代码,前提是msedgedriver.exe路径正确
driver = webdriver.Edge("./msedgedriver.exe")# 加载当当网
driver.get("https://www.dangdang.com/")# 等待页面加载
time.sleep(2)# 获取输入框
key = driver.find_element(By.ID, "key_S")
key.send_keys("科幻")# 获取搜索框,点击搜索
search = driver.find_element(By.CSS_SELECTOR, "#form_search_new .button")
search.click()# 等待搜索结果页面加载
time.sleep(3)# 获取商品标题及价格,循环 5 页
for i in range(5):shoplist = driver.find_elements(By.CSS_SELECTOR, ".bigimg li") # bigimg 下的所有 li标签for li in shoplist:try:title = li.find_element(By.CSS_SELECTOR, "a").get_attribute("title")print(title)except Exception as e:print(f"获取商品标题时出错: {e}")try:price = li.find_element(By.CSS_SELECTOR, ".search_now_price").textprint(price)except Exception as e:print(f"获取商品价格时出错: {e}")# 获取下一页按钮try:next_page = driver.find_element(By.LINK_TEXT, "下一页")next_page.click()# 等待下一页加载time.sleep(3)except Exception as e:print(f"点击下一页时出错: {e}")break# 关闭浏览器
driver.close()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)css选择器基本规则

在这里插入图片描述

(5)等待——显式/隐式

1.隐式:全局,只要找元素,没出来就等max_time(自定义)

driver = webdriver.Edge("./msedgedriver.exe")
driver.implicitly_wait(30)

2.显式:特定条件下的等待:webDriverWait+until+(判断条件)

# 程序每 0.5 秒检查,是否满足:标题包含 “百度一下” 这个条件,
# 检查是否满足条件的最长时间为:15 秒,超过 15 秒仍未满足条件则抛出异常
try:WebDriverWait(driver, 15, 0.5).until(EC.title_contains("百度一下"))print("页面标题包含 '百度一下'")
except Exception as e:print(f"等待页面标题时出现异常: {e}")# 假设要定位的元素 CSS 选择器为 ".example-element",需根据实际情况修改
element_selector = ".example-element"# 程序每 0.5 秒检查,是否满足:某定位的元素出现,
# 检查是否满足条件的最长时间为:15 秒,超过 15 秒仍未满足条件则抛出异常
try:WebDriverWait(driver, 15, 0.5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, element_selector)))print(f"元素 {element_selector} 已可见")
except Exception as e:print(f"等待元素可见时出现异常: {e}")# 关闭浏览器
driver.quit()

4、实战4:鼠标及键盘操作(动作链)

在这里插入图片描述
在这里插入图片描述

driver.get("https://www.baidu.com/")
more=driver.find_element(By.LINK_TEXT,"更多")
link_element = driver.find_element(By.CSS_SELECTOR, 'a[name="tj_fanyi"]')
baike = link_element.get_attribute('href')
#将鼠标移动到更多按钮
ActionChains(driver).move_to_element(more).move_to_element(link_element).click().perform()

其他:滚动条,窗口截图

在这里插入图片描述
在这里插入图片描述

5、实战5:爬取知乎数据(应对反爬、滑动验证)

在这里插入图片描述

(1)方法一——opencv轮廓检测,由面积和周长确定起始和终止位置

# 从selenium库中导入webdriver模块
from selenium import webdriver
# 从selenium.webdriver.common.by模块中导入By类,用于定位元素
from selenium.webdriver.common.by import By
# 从selenium.webdriver.common.keys模块中导入Keys类,用于模拟键盘按键操作
from selenium.webdriver import ActionChains
# 导入显式等待类
from selenium.webdriver.support.wait import WebDriverWait
# 导入等待条件类
from selenium.webdriver.support import expected_conditions as EC
# 保存图片
from urllib import request
# 计算机图像识别
import cv2
# 反爬应对
import random
# 反爬应对
import time
# ------------------------------------------
# 1、创建 driver
driver = webdriver.Edge("./msedgedriver.exe")
driver.get("https://www.zhihu.com/")
driver.maximize_window()
# 2、输入用户名、密码(一系列鼠标点击动作)
dl = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-tabs > div:nth-child(2)")
ActionChains(driver).move_to_element(dl).click().perform()
dh = driver.find_element(By.CSS_SELECTOR,"#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-account > div > label > input")
dh.send_keys("15735188768")
mm = driver.find_element(By.CSS_SELECTOR,"#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-password > div > label > input")
mm.send_keys('wy062600')
login = driver.find_element(By.CSS_SELECTOR,"#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > button")
ActionChains(driver).move_to_element(login).click().perform()
# 3、显式等待直到滑动窗口的出现
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg")))
pic = driver.find_element(By.CSS_SELECTOR,'body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg > img.yidun_bg-img')
imgsrc = pic.get_attribute("src")
# 4、获取图片并保存
request.urlretrieve(imgsrc,'img.png')
# 5、定义函数,获取轮廓位置
def get_pos(imageSrc):image = cv2.imread(imageSrc) # 利用cv2读取图片blurred = cv2.GaussianBlur(image, (5, 5), 0, 0)canny = cv2.Canny(blurred, 0, 100)contours, hierarchy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)print(len(contours))for contour in contours:x, y, w, h = cv2.boundingRect(contour)area = cv2.contourArea(contour)zhouchang = cv2.arcLength(contour, True)if 5025 < area < 7225 and 300 < zhouchang < 380:x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.imwrite("111.jpg", image)return xreturn 0dis = get_pos('img.png')
smallImage = driver.find_element(By.CSS_SELECTOR,'body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg > img.yidun_jigsaw')dis = int(dis * 340 / 672 - smallImage.location['x'])
driver.implicitly_wait(2000)
ActionChains(driver).click_and_hold(smallImage).perform()  # 按下按钮
i = 0
moved = 0
while moved < dis:x = random.randint(3, 10)moved += xActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()print("第{}次移动后, 位置为{}".format(i, smallImage.location['x']))i += 1
ActionChains(driver).release().perform()
time.sleep(20000)# 关闭浏览器
driver.close()

canny = cv2.Canny(blurred, 低阈值, 高阈值)

在这里插入图片描述

(2)方法二——opencv灰度检测确定起始和终止位置

def calculate_slide_distance(full_image, slider_image):"""计算滑块需要滑动的距离:param full_image: 完整背景图:param slider_image: 滑块图:return: 滑动距离"""if full_image is None or slider_image is None:print("图片数据为空,无法计算滑动距离")return 0# 灰度化gray_full = cv2.cvtColor(full_image, cv2.COLOR_BGR2GRAY)gray_slider = cv2.cvtColor(slider_image, cv2.COLOR_BGR2GRAY)# 边缘检测edges_full = cv2.Canny(gray_full, 50, 150)edges_slider = cv2.Canny(gray_slider, 50, 150)# 模板匹配,这里使用TM_CCOEFF_NORMED方法result = cv2.matchTemplate(edges_full, edges_slider, cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)print(f"匹配的相似度值: {max_val}")  # 打印匹配的相似度值distance = max_loc[0]print(f"计算得到的滑块滑动距离: {distance}")  # 打印计算得到的距离return distance# 计算滑动距离
full_image = cv2.imread('img.png')
slider_image = cv2.imread('img2.png')
distance = calculate_slide_distance(full_image, slider_image)

(3)最终结果

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from urllib import request
import cv2
import random
import time
import csv
import os# 1、创建 driver
driver = webdriver.Edge("./msedgedriver.exe")
driver.get("https://www.zhihu.com/")
driver.maximize_window()# 2、输入用户名、密码(一系列鼠标点击动作)
dl = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-tabs > div:nth-child(2)")
ActionChains(driver).move_to_element(dl).click().perform()
dh = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-account > div > label > input")
dh.send_keys("15735188768")
mm = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > div.SignFlow-password > div > label > input")
mm.send_keys('wy062600')
login = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > div > div > div > div.signQr-rightContainer > div > div.SignContainer-content > div > div:nth-child(1) > form > button")
ActionChains(driver).move_to_element(login).click().perform()# 3、显式等待直到滑动窗口的出现
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg")))
pic = driver.find_element(By.CSS_SELECTOR, 'body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg > img.yidun_bg-img')
imgsrc = pic.get_attribute("src") # 获取链接
request.urlretrieve(imgsrc,'img1.png')# 下载图片
pic2 = driver.find_element(By.CSS_SELECTOR,'body > div.yidun_popup--light.yidun_popup.yidun_popup--size-small > div.yidun_modal__wrap > div > div > div.yidun_modal__body > div > div.yidun_panel > div > div.yidun_bgimg > img.yidun_jigsaw')
imgsrc2 = pic2.get_attribute("src")
request.urlretrieve(imgsrc2,'img2.png')
# ----------------------------------------------------------
# 4.1、法一:灰度检测
def calculate_slide_distance(full_image, slider_image):"""计算滑块需要滑动的距离:param full_image: 完整背景图:param slider_image: 滑块图:return: 滑动距离"""if full_image is None or slider_image is None:print("图片数据为空,无法计算滑动距离")return 0# 灰度化gray_full = cv2.cvtColor(full_image, cv2.COLOR_BGR2GRAY)gray_slider = cv2.cvtColor(slider_image, cv2.COLOR_BGR2GRAY)# 边缘检测edges_full = cv2.Canny(gray_full, 50, 150)edges_slider = cv2.Canny(gray_slider, 50, 150)# 模板匹配,这里使用TM_CCOEFF_NORMED方法result = cv2.matchTemplate(edges_full, edges_slider, cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)print(f"匹配的相似度值: {max_val}")  # 打印匹配的相似度值distance = max_loc[0]print(f"计算得到的滑块滑动距离: {distance}")  # 打印计算得到的距离return distance
# 4.1.1、计算滑动距离
full_image = cv2.imread('img1.png')
slider_image = cv2.imread('img2.png')
distance = calculate_slide_distance(full_image, slider_image)
# --------------------------------------
# 4.2、法2:轮廓边界
def get_pos(imageSrc):image = cv2.imread(imageSrc) # 利用cv2读取图片blurred = cv2.GaussianBlur(image, (5, 5), 0, 0)canny = cv2.Canny(blurred, 0, 100)contours, hierarchy = cv2.findContours(canny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)print(len(contours))for contour in contours:x, y, w, h = cv2.boundingRect(contour)area = cv2.contourArea(contour)zhouchang = cv2.arcLength(contour, True)if 5025 < area < 7225 and 300 < zhouchang < 380:x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.imwrite("111.jpg", image)return xreturn 0
# 4.2.1 法2需要计算距离   
dis = get_pos('img.png')
dis = int(dis * 340 / 672 - pic2.location['x'])
driver.implicitly_wait(2000)
ActionChains(driver).click_and_hold(pic2).perform()  # 按下按钮
# 4.2.2 反爬操作:
i = 0
moved = 0
while moved < dis:x = random.randint(3, 10)moved += xActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()print("第{}次移动后, 位置为{}".format(i, pic2.location['x']))i += 1
ActionChains(driver).release().perform()# 5、等待页面加载完成
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".AppHeader-inner css-11p8nt5")))# 6、定义 CSV 文件路径
csv_file_path = "zhihu_data3.csv"# 7、写入 CSV 文件
def write_to_csv(data):with open(csv_file_path, mode="a", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(data)# 8、写入 CSV 表头
if not os.path.exists(csv_file_path):with open(csv_file_path, mode="w", newline="", encoding="utf-8") as file:writer = csv.writer(file)writer.writerow(["author_name", "title", "item_id", "has_image", "upvote_num"])
# 9、滚动加载更多内容
def scroll_to_load_more(max_scrolls=10):scroll_count = 0last_height = driver.execute_script("return document.body.scrollHeight")while scroll_count < max_scrolls:# 滚动到底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)  # 等待新内容加载# 计算新的页面高度new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:  # 如果没有新内容加载,退出循环breaklast_height = new_heightscroll_count += 1scroll_to_load_more(max_scrolls=30)
# 10、提取数据
articles = driver.find_elements(By.CSS_SELECTOR, ".ContentItem.ArticleItem, .ContentItem.AnswerItem")
for article in articles:try:# 提取 authorNameauthor_name = article.get_attribute("data-zop")if author_name:author_name = eval(author_name).get("authorName", "未知作者")else:author_name = "未知作者"# 提取 titletitle_element = article.find_element(By.CSS_SELECTOR, "h2.ContentItem-title a")title = title_element.text# 提取 itemIditem_id = article.get_attribute("data-zop")if item_id:item_id = eval(item_id).get("itemId", "未知ID")else:item_id = "未知ID"# 提取 has_imagehas_image = False  # 默认值try:image_element = article.find_element(By.CSS_SELECTOR, ".RichContent-inner img")if image_element:has_image = Trueexcept:pass# 提取 upvote_numupvote_num = 0try:upvote_element = article.find_element(By.CSS_SELECTOR, ".VoteButton--up")upvote_num = int(upvote_element.text.replace("赞同", "").strip())except:pass# 打印提取的数据print(f"作者: {author_name}")print(f"标题: {title}")print(f"文章ID: {item_id}")print(f"是否有图片: {has_image}")print(f"点赞数: {upvote_num}")print("-" * 50)# 写入 CSV 文件data = [author_name, title, item_id, has_image, upvote_num]write_to_csv(data)except Exception as e:print(f"提取数据时出错: {e}")
time.sleep(2000)
# 关闭浏览器
driver.quit()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…

神聖的綫性代數速成例題13. 非齊次方程組解的性質、非齊次方程組解的討論

綫性空間的維數&#xff1a; 若綫性空間中存在一組綫性無關的矢量&#xff0c;使得中的任意矢量 都可以由綫性表示&#xff0c;則稱為綫性空間的維數&#xff0c;記作&#xff0c;稱為的一組基。 基與座標變換&#xff1a; 設和是維綫性空間的兩組基&#xff0c;且&#xff0c;…

Kafka集成Debezium监听postgresql变更

下载postgres的插件&#xff1a;https://debezium.io/documentation/reference/2.7/install.html 2.7版本支持postgresql12数据库。 debezium-connector-postgres-2.7.4.Final-plugin.tar.gz 上传插件并解压 mkdir /usr/local/kafka/kafka_2.12-2.2.1/connector cd /usr/local…

『uniapp』简单文本复制文字 富文本内容复制文字(详细图文注释)

目录 text组件错误代码示例成功代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 text组件 官方文档可知app端用selectable可实现文本选中进而可复制,也就是说text标签内部的文本就可以复制了 https://uniapp.dclou…

算法模型从入门到起飞系列——背包问题(探索最大价值的掘金之旅)

文章目录 前言一、背包问题溯源&#xff08;动态规划&#xff09;1.1 动态规划的概念1.2 动态规划的基本步骤1.3 动态规划的实际应用 二、背包问题2.1 背包问题衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包图解2.2.3 0-1背包代码刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…

Python实现爬虫:天气数据抓取(+折线图)

一、基本架构 1、URL管理器&#xff1a;爬虫的调度中枢 核心职责 功能说明URL去重防止重复抓取URL优先级管理控制抓取顺序&#xff08;广度优先/深度优先&#xff09;断点续爬支持持久化存储抓取状态分布式协同多节点共享URL队列 2、网页下载器&#xff1a;数据获取的引擎 功…

LangChain 基础

一、LangChain 模块和体系 LangChain 是一个用于开发由大型语言模型&#xff08;LLMs&#xff09;驱动的应用程序的框架。 官方文档&#xff1a;https://python.langchain.com/docs/introduction/ LangChain 简化了LLM应用程序生命周期的每个阶段&#xff1a; 开发&#xf…

Parsing error: Unexpected token, expected “,“

今天在使用Trae AI 编程工具开发大文件切片上传功能&#xff0c;使用的是VUE3,TS技术栈&#xff0c;开发完成运行时&#xff0c;编译报错&#xff08;Parsing error: Unexpected token, expected ","&#xff09;&#xff0c;让AI自行修复此问题多次后还是没有解决&a…

农用车一键启动工作原理

移动管家农用车一键启动的工作原理与普通汽车类似&#xff0c;主要依赖于无线射频识别技术&#xff08;RFID&#xff09;。以下是具体的工作步骤和原理&#xff1a; 智能钥匙识别&#xff1a; 车主携带智能钥匙靠近车辆时&#xff0c;钥匙通过发射射频信号与车辆进行交互。车辆…

Cursor从小白到专家

文章目录 1&#xff1a;简单开发一个贪吃蛇游戏规则设置提示词 cursor开发小工具开发整体步骤创建.cursorrules输入提示词composer模式chat模式 执行cursor accept all发布到线上进行分享 cursor开发一个浏览器插件创建.cursorrulescursor rules范例集工具 输入提示词执行curso…

MAC+PHY 的硬件连接

文章目录 以太网的 MAC 与 PHY简介硬件拓扑CPU集成MAC与PHYCPU集成MAC&#xff0c;PHY采用独立芯片CPU不集成MAC与PHY&#xff0c;MAC与PHY采用集成芯片 在 OSI 分层中的位置MACPHYMAC 与 PHY 数据交互参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均…

仿函数 VS 函数指针实现回调

前提&#xff1a; 本博客对比 函数指针实现回调 和 仿函数 &#xff0c;突出仿函数的优势。 目的&#xff1a; 一个类要能够灵活的调用两个函数&#xff0c;essfc 和 greaterfc&#xff0c;分别用于比较两个整数的大小&#xff1a; ①&#xff1a;lessfc&#xff1a;判断 x …

CH32V208蓝牙内部带运放32位RISC-V工业级微控制器

开发板 CH32V208CBU6立创格式的开发板上述链接可下载&#xff0c;官方文件进行了转换&#xff0c;使用前请仔细核对。 CH32V208CBU6原理图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图&#xff0c;上述图片为芯片部分。已进行DRC。 概述 CH32V208C…

整理和总结微信小程序的高频知识点

前言 近期萌生了一些想法&#xff0c;感觉可以做一个小程序作为产出。 但小程序做得比较少&#xff0c;因此边做边复习。整理和总结了一些高频知识点和大家一起分享。 一、模板和组件 1.1模板&#xff08;Template&#xff09; 优势 简单灵活&#xff1a;模板定义和使用都较…

1996-2023年各省公路里程数据(无缺失)

1996-2023年各省公路里程数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;公路里程&#xff08;万公里&#xff09; 4、范围&#xff1a;31省 5、指标解释&#xff1a;公路里程指报告期末…

Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.7~2.9)

1. NAN 介质访问控制层&#xff08;MAC&#xff09; NAN MAC负责通过参与 NAN同步信标帧&#xff08;NAN Synchronization Beacon frame&#xff09;的传输&#xff0c;获取并维护设备所在的NAN集群的同步。作为同步功能的一部分&#xff0c;NAN MAC运行 TSF 定时器。NAN MAC还…

《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成

No26: CI/CD 流水线&#xff1a;GitHub Actions 与 Jenkins 集成 摘要 持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是现代软件开发中不可或缺的实践&#xff0c;能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…

HR人员和组织信息同步AD域服务器实战方法JAVA

HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言&#xff1…

修改服务器windows远程桌面默认端口号

修改服务器windows远程桌面默认端口号 在Windows服务器上修改远程桌面协议&#xff08;RDP&#xff09;的默认端口&#xff08;3389&#xff09;可以增强服务器的安全性&#xff0c;减少被恶意扫描和攻击的风险。以下是修改远程端口的详细步骤&#xff1a; 按 Win R 打开运行…

MuJoCo 仿真 Panda 机械臂!末端位置实时追踪 + 可视化(含缩放交互)

视频讲解&#xff1a; MuJoCo 仿真 Panda 机械臂&#xff01;末端位置实时追踪 可视化&#xff08;含缩放交互&#xff09; 仓库地址&#xff1a;GitHub - LitchiCheng/mujoco-learning 本期介绍下&#xff0c;mujoco_py这个库很老了&#xff0c;最新的版本可以通过mujoco的p…