selenium元素定位问题

一、按钮点击

具体网页信息如下:

定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。

定位方法:

方法一:通过文本定位

复制代码
driver.find_element(By.XPATH, "//*[text()='高分一号']").click()
time.sleep(3)

如果是部分文字

复制代码
#部分文字

python:browser.find_element_by_xpath("//*[contains(text(),'一号')]").click()

方法二:使用JS脚步,通过类名来定位

因为一共有7个,写了个循环,

复制代码
    for i in range(7):
        name='info-item cursor'
        js="document.getElementsByClassName('info-item cursor')[{}].click();".format(i)
        driver.execute_script(js);

注意一些按钮点击后需要回到上一步再次点击。用相同的方法点击上一层按钮即可。

二、图片定位并下载保存

网页信息如下:

定位方法:

使用标签tag=img查找到元素,用requests库下载图片

driver=get_url(url)就是对获取网页这一功能做一个封装,形成一个单独的函数方便使用。

复制代码
def get_url(url):
    chrome_options = Options().add_argument("start-maximized")

    service = Service(
        executable_path=r"C:\Users\***\PycharmProjects\chromedriver\chromedriver-win64\chromedriver.exe")#chromedriver.exe的位置
    driver = webdriver.Chrome(service=service, options=chrome_options)

    driver.get(url)
    return driver

def img_extr1_ImageGP():#按标签tag来检索图片,并且保存
    url_str2 = 'https://www.bic.ac.cn/ImageGP/index.php/Home/Index/Lineplot.html'
    driver = get_url(url_str2)

    images = driver.find_elements(By.TAG_NAME, "img")#使用标签tag=img进行查找
    print(images)
    i=13
    for image in images:
        image_url = image.get_attribute("src")
        print(image_url)
        # 这里可以使用Python的requests库或其他下载工具来下载图片
        img_data = requests.get(image_url).content
        with open("./{}.jpg".format(i), 'wb') as fp:
            fp.write(img_data)
            i=i+1

    # 关闭浏览器
    driver.quit()

三、网页截图,分别保存和拼接

代码如下:

def test_screen_shot1(driver,img_id):#拼接图片

def test_screen_shot2(driver,image_id):#不拼接

函数使用的参数分别为:

driver=get_url(url)上方代码中有该函数。就是对获取网页这一功能做一个封装,形成一个单独的函数方便使用。

img_id是图片编号的起始序号

复制代码
def test_screen_shot1(driver,img_id):#拼接图片

    width = driver.execute_script("return document.documentElement.scrollWidth")

    page_height = driver.execute_script("return document.documentElement.scrollHeight")
    window_height = driver.get_window_size()['height']
    # 获取页面宽度及其宽度
    print(width, page_height, window_height)
    i = img_id
    driver.save_screenshot('{}.png'.format(i))

    if page_height > window_height:
        n = page_height // window_height  # 需要滚动的次数
        base_mat = np.atleast_2d(Image.open('{}.png'.format(i)))  # 打开截图并转为二维矩阵
        i=i+1
        for j in range(n):
            driver.execute_script(f'document.documentElement.scrollTop={window_height * (j + 1)};')
            time.sleep(.5)
            driver.save_screenshot(f'{j+i}.png')  # 保存截图
            mat = np.atleast_2d(Image.open(f'{j+i}.png'))  # 打开截图并转为二维矩阵
            base_mat = np.append(base_mat, mat, axis=0)  # 拼接图片的二维矩阵
        Image.fromarray(base_mat).save('{}.png'.format(n+img_id))

    # 截图并关掉浏览器
    # driver.get_screenshot_as_file('{}.png'.format(i))

def test_screen_shot2(driver,image_id):#不拼接
    driver.implicitly_wait(10)
    driver.set_page_load_timeout(6)


    # 获取网页高度
    body_height = driver.execute_script('return document.body.scrollHeight;')
    window_height = driver.execute_script('return window.innerHeight;')
    js = "window.scroll(0,arguments[0]*arguments[1])"
    print(body_height,window_height)
    i = 0
    driver.get_screenshot_as_file(f"{i+image_id}.png")
    while i * window_height < body_height:
        driver.execute_script(js, window_height, i)
        time.sleep(5)
        driver.get_screenshot_as_file(f"{i+image_id}.png")
        i += 1

附录(本博客使用的头文件):

复制代码
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from PIL import Image
import numpy as np
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import selenium.webdriver.support.ui as ui

import requests
相关推荐
老神在在0016 小时前
JSON Schema
测试工具·json
小杍随笔9 小时前
【FlyEnv v4.15.0 重磅更新!新增 FrankenPHP、CliProxyAPI、Numa、Rnacos 模块,开发效率再升级】
测试工具·开发环境管理工具
软件测试慧姐9 小时前
软件测试常见面试题汇总(2026版)
软件测试·测试工具·面试
weixin_419658311 天前
基于 Trae 和 Postman-MCP-Server 接口自动化测试
测试工具·postman
weixin_419658312 天前
Postman-MCP-Server 的构建以及在 Trae 中的配置方法
测试工具·postman
测试员周周2 天前
【AI测试系统】第6篇:需求扔进去,3 分钟出测试用例?AI测试系统的 RAG 知识增强实战
人工智能·python·功能测试·测试工具·测试用例
测试员周周2 天前
【AI测试功能2】AI功能测试的“不可确定性“难题与应对思路:从精确断言到统计判定的完整方案
大数据·人工智能·python·功能测试·测试工具·单元测试·测试用例
测试员周周3 天前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试
弹简特3 天前
【精通Postman接口测试】02-集合变量|环境变量|全局变量,批量运行原来这么简单(附图文+CLI实战)
测试工具·接口测试·postman
DevilSeagull4 天前
电脑上安装的服务会自动消失? 推荐项目: localhostSCmanager. 更好管理你的服务!
测试工具·安全·react·vite·localhost·hono·trpc