利用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()
### 调用豆包视觉大模型API的Python方法 为了调用豆包视觉大模型API,首先需要安装必要的SDK配置好认证方式。可以采用火山引擎IAM授权或通过API Key授权两种方式进行身份验证。 #### 安装依赖库 在开始之前,需确保已安装`volcengine-python-sdk`这个软件开发工具包来简化与API交互的过程[^3]: ```bash pip install volcengine-python-sdk ``` #### 配置认证信息 对于API Key授权来说,可以通过设置环境变量的方式来管理敏感数据,从而提高安全性。下面展示了如何读取这些环境变量以及初始化客户端实例[^2]: ```python import os from openai import OpenAI # 获取API密钥使用的模型名称 api_key = os.getenv("VISION_API_KEY") model_id = os.getenv("VISION_MODEL_ID") base_url = "https://vision.volces.com/api/v1" client = OpenAI(base_url=base_url, api_key=api_key) ``` 请注意这里假设已经设置了名为`VISION_API_KEY``VISION_MODEL_ID`的环境变量用于存储对应的API key 模型ID。 #### 发送请求给视觉大模型 一旦完成了上述准备工作之后就可以向特定端点发送POST请求来进行图像识别或其他类型的处理操作了。以下是一个简单的例子,它会尝试解析一张图片的内容将结果打印出来: ```python response = client.vision.analyze_image( model=model_id, image="path/to/your/image.jpg", ) print(response.choices[0].message.content) ``` 这段代码中的`analyze_image()`函数是用来模拟实际存在的接口;具体的参数可能依据实际情况有所不同,请参照最新的官方文档获取最准确的信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值