@ -37,15 +37,16 @@ class DeepseekSpider(AbstractAiSeoSpider):
search_btn = self . browser_page . locator ( " span:text( ' 联网搜索 ' ) " ) . locator ( ' .. ' )
search_btn = self . browser_page . locator ( " span:text( ' 联网搜索 ' ) " ) . locator ( ' .. ' )
if await search_btn . is_visible ( ) :
if await search_btn . is_visible ( ) :
await search_btn . click ( )
await search_btn . click ( )
self . think = True
if self . think :
if self . think :
# 开启深度思考
think_btn = self . browser_page . locator ( " span:text( ' 深度思考 (R1) ' ) " ) . locator ( ' .. ' )
# 开启深度思考
think_btn = self . browser_page . locator ( " span:text( ' 深度思考 ' ) " ) . locator ( ' .. ' )
if await think_btn . is_visible ( ) :
if await think_btn . is_visible ( ) :
styles = css_to_dict ( await think_btn . get_attribute ( ' style ' ) )
if styles . get ( ' --ds-button-color ' ) == ' #fff ' :
await think_btn . click ( )
await asyncio . sleep ( 1 )
chat_input_element = self . browser_page . locator ( " //textarea[@id= ' chat-input ' ] " )
# styles = css_to_dict(await think_btn.get_attribute('style') )
# if styles.get('--ds-button-color') == '#fff' :
await think_btn . click ( )
await asyncio . sleep ( 1 )
chat_input_element = self . browser_page . locator ( " //textarea[@placeholder= ' 给 DeepSeek 发送消息 ' ] " )
await chat_input_element . click ( )
await chat_input_element . click ( )
# 输入提问词
# 输入提问词
await self . browser_page . keyboard . type ( self . prompt )
await self . browser_page . keyboard . type ( self . prompt )
@ -72,7 +73,8 @@ class DeepseekSpider(AbstractAiSeoSpider):
await think_element . nth ( - 1 ) . click ( )
await think_element . nth ( - 1 ) . click ( )
await asyncio . sleep ( 2 )
await asyncio . sleep ( 2 )
# 获取回答元素
# 获取回答元素
answer = self . browser_page . locator ( " //div[@class= ' ds-markdown ds-markdown--block ' ] " ) . nth ( - 1 )
# answer = self.browser_page.locator("//div[@class='ds-markdown ds-markdown--block']").nth(-1)
answer = self . browser_page . locator ( " //div[contains(@class, ' ds-message ' )] " ) . nth ( - 1 )
box = await answer . bounding_box ( )
box = await answer . bounding_box ( )
# 设置视口大小
# 设置视口大小
await self . browser_page . set_viewport_size ( {
await self . browser_page . set_viewport_size ( {
@ -130,9 +132,11 @@ class DeepseekSpider(AbstractAiSeoSpider):
body = stream . decode ( ' utf-8 ' )
body = stream . decode ( ' utf-8 ' )
datas = body . split ( " \n \n " )
datas = body . split ( " \n \n " )
for data_str in datas :
for data_str in datas :
# 返回数据为空 跳过
if not data_str :
if not data_str :
continue
continue
data_str = data_str . replace ( ' data: ' , ' ' )
data_str = data_str . replace ( ' data: ' , ' ' )
# 服务器繁忙 跳过
try :
try :
data = json . loads ( data_str )
data = json . loads ( data_str )
if glom ( data , ' v.0.v ' , default = ' ' ) == ' TIMEOUT ' :
if glom ( data , ' v.0.v ' , default = ' ' ) == ' TIMEOUT ' :
@ -145,27 +149,27 @@ class DeepseekSpider(AbstractAiSeoSpider):
logger . debug ( f " 获取到联网搜索结果 " )
logger . debug ( f " 获取到联网搜索结果 " )
search_result_list = data . get ( ' v ' , [ ] )
search_result_list = data . get ( ' v ' , [ ] )
search_result_lists . extend ( search_result_list )
search_result_lists . extend ( search_result_list )
# # 保存搜索结果
# ai_search_result_list = [ ]
# for search_result in search_result_list :
# url = search_result.get('url', '' )
# title = search_result.get('title', '' )
# body = search_result.get('snippet', '' )
# publish_time = search_result.get('published_at', '' )
# host_name = search_result.get('site_name', '未知' )
# ai_result = AiSearchResult(url=url, title=title, body=body, publish_time=publish_time, host_name=host_name )
# if ai_result.title and ai_result.url :
# ai_search_result_list.append(ai_result )
# logger.debug(f"ai参考资料: [{host_name}]{title}({url})" )
# if ai_search_result_list :
# self.ai_answer.search_result = ai_search_result_list
# self.search_result_count = len(self.ai_answer.search_result )
# 保存搜索结果
ai_search_result_list = [ ]
for search_result in search_result_list :
url = search_result . get ( ' url ' , ' ' )
title = search_result . get ( ' title ' , ' ' )
body = search_result . get ( ' snippet ' , ' ' )
publish_time = search_result . get ( ' published_at ' , ' ' )
host_name = search_result . get ( ' site_name ' , ' 未知 ' )
ai_result = AiSearchResult ( url = url , title = title , body = body , publish_time = publish_time , host_name = host_name )
if ai_result . title and ai_result . url :
ai_search_result_list . append ( ai_result )
logger . debug ( f " ai参考资料: [{host_name}]{title}({url}) " )
if ai_search_result_list :
self . ai_answer . search_result = ai_search_result_list
self . search_result_count = len ( self . ai_answer . search_result )
continue
continue
# 是否开始返回深度思考数据
# 是否开始返回深度思考数据
if data . get ( ' p ' , ' ' ) == ' response/thinking_ content ' :
if data . get ( ' p ' , ' ' ) == ' response/fragments/1/ content ' :
start_thinking = True
start_thinking = True
if data . get ( ' p ' , ' ' ) == ' response/thinking_ elapsed_secs ' :
if data . get ( ' p ' , ' ' ) == ' response/fragments/1/ elapsed_secs ' :
start_thinking = False
start_thinking = False
if start_thinking :
if start_thinking :
# 获取深度思考回复
# 获取深度思考回复
@ -177,7 +181,7 @@ class DeepseekSpider(AbstractAiSeoSpider):
value = glom ( data , target , default = " " )
value = glom ( data , target , default = " " )
thinking_text = thinking_text + str ( value )
thinking_text = thinking_text + str ( value )
# 是否开始返回回复数据
# 是否开始返回回复数据
if data . get ( ' p ' , ' ' ) == ' response/content ' :
if data . get ( ' p ' , ' ' ) == ' response/fragments/2/ content ' :
start_content = True
start_content = True
if start_content :
if start_content :
# 获取ai回复
# 获取ai回复