当前位置: 首页 > news >正文

利用selenium调用豆包进行自动化问答以及信息提取

利用python 使用 selenium调用豆包进行自动化问答以及信息提取整理
使用方法:

  1. 打开网页之后有40秒等待时间 此时进行登录
  2. 登录之后随便输入一个问题进行问答,进入对话界面
  3. 自动执行对话测试
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas
import os.path
import pandas as pd
from shapely.geometry import Polygon
from shapely.wkt import dumps
import argparse
from tqdm import tqdm,trange
import re
# 创建解析器
parser = argparse.ArgumentParser(description="这是一个示例程序")
# 添加位置参数(必须提供)
parser.add_argument("-i","--input",default="duplicate.xlsx", type=str, help="输入文件路径")
# 读取Excel文件的默认工作表
# 解析参数
args = parser.parse_args()


# 创建Chrome浏览器的WebDriver实例
driver = webdriver.Chrome()

def initDriver():
    # try:
        # 打开网页
        # 打开网页
    driver.get('https://www.doubao.com/chat/1807899615328258')
    # 等待页面加载
    time.sleep(40)

    # # 找到输入框元素,这里使用的是ID定位方式 /html/body/div[1]/div[1]/div/div[3]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/textarea
    # input_box = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div/div[3]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div[2]/div[2]/div/div[2]/div[1]/textarea')
    # # input_box.click()
    # text = "hello world"
    # if input_box is not None:
    #     input_box.send_keys(text)
    # buttopn = driver.find_element(By.ID,"flow-end-msg-send")
    # if buttopn is not None:
    #     buttopn.click()
    # time.sleep(10)
    # input_bbox = driver.find_element(By.XPATH,"/html/body/div[1]/div[1]/div/div[3]/div[1]/div[1]/div/div/div[3]/div/div/div/div[3]/div[2]/div[1]/div/div[2]/div/textarea")
    # if input_bbox is not None:
    #     input_bbox.send_keys(text)
    # buttopn = driver.find_element(By.ID,"flow-end-msg-send")
    # if buttopn is not None:
    #     buttopn.click()
    # 在输入框中输入值
    # input_box.send_keys('Selenium教程')

    # 等待一段时间,方便查看结果
    # time.sleep(10)

def main():
    #打开浏览器
    initDriver()
    # 读取excel
    read_xlsx(args.input)

# 把面积最大 改成合并之后的范围最大
def getBoundBox(text):
    import re

    # 使用正则表达式匹配方括号内的经纬度范围
    pattern = r'\[([- \d.]+)[,,]([- \d.]+)[,,]([- \d.]+)[,,]([- \d.]+)\]'
    matches = re.findall(pattern, text)

    # 存储所有匹配到的范围
    all_ranges = []
    for match in matches:
        min_lon = float(match[0])
        min_lat = float(match[1])
        max_lon = float(match[2])
        max_lat = float(match[3])
        all_ranges.append((min_lon, min_lat, max_lon, max_lat))

    # 如果有多个匹配,找出最大的范围
    min_lat_best = 1e6
    min_lon_best = 1e6
    max_lat_best = -1e6
    max_lon_best = -1e6
    if all_ranges:
        if len(all_ranges) > 1:
            for min_lon, min_lat, max_lon, max_lat in all_ranges:
                if min_lon < min_lon_best:
                    min_lon_best = min_lon
                if min_lat < min_lat_best:
                    min_lat_best = min_lat
                if max_lat > max_lat_best:
                    max_lat_best = max_lat
                if max_lon > max_lon_best:
                    max_lon_best = max_lon
            return [min_lon_best,min_lat_best,max_lon_best,max_lat_best]
            # # 计算每个范围的面积(粗略估算,用经度差乘以纬度差)
            # areas = [(max_lon - min_lon) * (max_lat - min_lat) for min_lon, min_lat, max_lon, max_lat in all_ranges]
            # # 找出面积最大的范围的索引
            # max_area_index = areas.index(max(areas))
            # max_range = all_ranges[max_area_index]
        else:
            max_range = all_ranges[0]

        print(f"最大范围的经纬度为: {max_range}")
        return max_range
    else:
        print(f"未找到匹配的经纬度范围。 {text}")
        return None


def getWkt(minx,miny,maxx,maxy):
    # 创建一个几何多边形对象
    polygon = Polygon([(minx, miny), (minx, maxy), (maxx, maxy), (maxx, miny)])

    # 调用dumps方法,将几何对象转换为WKT字符串
    wkt_string = dumps(polygon)
    print(wkt_string)
    return wkt_string
def read_xlsx(path):
    #读取已有数据
    alreay_names=set()
    # df_csv =pd.read_csv("miss10ju_dealmrh.csv")
    # df_names = list(df_csv[:,0])
    if os.path.exists("missditu_dealmrh.csv"):
        with open("missditu_dealmrh.csv","r",encoding="utf-8") as f:
            for line in list(f.readlines()):
                line_str = str(line).split(";")
                alreay_names.add(line_str[0])
                ccc=0
            pass

    file_path = path
    df = pd.read_excel(file_path, sheet_name='Sheet2').values
    row_nums, col_nums = df.shape
    df = df[:,[12,12]]
    with open("missditu_dealmrh.csv","a",encoding="utf-8") as f:
        f.write("name;extent;center;wkt\n")
        for i in trange(row_nums):
            name = str(df[i][0])                    #机场名字
            country = str(df[i][1])                 # 国家
            country = "美国"
            extent=""
            if name == "nan":
                extent=""
                f.write(";;;\n")
            else:
                if name in alreay_names:
                    print(f"alreay exists continue!")
                    continue
                # extent = None
                # while(extent is None): /html/body/div[1]/div[1]/div/div[3]/div[1]/div[1]/div/div/div[3]/div/div/div/div[3]/div[2]/div[1]/div/div[2]/div/textarea
                prompt = f"{country} {name} 获取目标的十进制经纬度范围 以十进制经纬度 [最小经度,最小纬度,最大经度,最大纬度]格式 返回:"
                input_bbox = driver.find_element(By.XPATH,"/html/body/div[1]/div[1]/div/div[3]/div[1]/div[1]/div/div/div[3]/div/div/div/div[3]/div[2]/div[1]/div/div[2]/div/textarea")
                if input_bbox is not None:
                    input_bbox.send_keys(prompt)
                buttopn = driver.find_element(By.ID,"flow-end-msg-send")
                if buttopn is not None:
                    buttopn.click()
                # 在输入框中输入值
                # input_box.send_keys('Selenium教程')

                # 等待一段时间,方便查看结果
                time.sleep(30)

                elements = driver.find_elements(By.CLASS_NAME,'container-ncFTrL')
                eelement = elements[-1].text
                content = eelement

                extent = getBoundBox(eelement)
                wktstr = getWkt(*extent)
                center = [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]
                # 输出到文件
                extentStr = ",".join([str(_) for _ in extent])
                centerStr = ",".join([str(_) for _ in center])
                ccc=0

                f.write(f"{name};{extentStr};{centerStr};{wktstr}\n")
                print(f"success")

                #查找 经纬度范围
                f.flush()

                ccc=0

                ccc=0
    print(f"success!")


if __name__=='__main__':
    main()

相关文章:

  • 在wsl2中安装ubuntu
  • 前端 - npm - - npm安装依赖时 -d -s -g的区别
  • DBeaver安装教程+连接TDengine数据库
  • Yashan DB 对象管理
  • Spring事务失效的十大场景及解决方案详解
  • 虚拟dom的diff中的双端比较算法
  • 【DuodooTEKr】 基于Python+OCR+DeepSeek的英国购物小票识别系统开发实战
  • 解析动态窗口法:机器人避障的智能 “导航仪”
  • 02C#基本结构篇(D3_内部类-代码块-数据类型-变量-常量-字面量-运算符-流程控制语句)
  • search搜索框功能完善
  • Gartner技术成熟度曲线_笔记
  • MySQL 索引技术指南
  • 基于Python+Vue开发的电影订票管理系统源码+运行步骤
  • RK3568平台(音频篇)AD82584F功放
  • Web三件套学习笔记
  • Python Openpyxl给Excel增加条件规则
  • 刷题记录(LeetCode 79 单词搜索)
  • 消息队列RabbitMQ
  • 共享经济时代下,鲲鹏共享科技如何逆袭改命?
  • 【eNSP实战】配置交换机端口安全
  • 高端网站建设优化/百度我的订单
  • 动漫网站怎么做的/网络平台推广运营有哪些平台
  • 手机网站建设需要多少钱/seo搜索引擎优化业务
  • 巴中网站建设天仁云/昆明seo优化
  • 襄阳做网站/seo关键词排名优化联系方式
  • 内蒙古城乡住房建设厅网站/百度一下你就知道下