基于selenium的动态网页Xpath测试工具

简介: 基于selenium的动态网页Xpath测试工具
最近在搞一些Xpath网页规则的编写,发现网上的Xpath测试工具很多,但都是基于静态页面的。暂时还没有发现基于动态页面的Xpath测试工具,为了后续的测试方便,于是就自己动手写了一个
from tkinter import *
import tkinter as tk
import re
from lxml import etree
from selenium import webdriver

# 创建chrome无头浏览器
driver = ""
try:
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(chrome_options=chrome_options)
except:
    fire_profile = webdriver.FirefoxOptions()
    fire_profile.add_argument('--disable-gpu')  # 设置无头模式
    fire_profile.add_argument('-headless')  # 设置无头模式
    driver = webdriver.Firefox(options=fire_profile)
# 动态网页源码字段
source = ""
# 辅助字段
old_url = ""


def result_to_string(result):
    """
    将匹配到的网页内容输出
    :param result: 已经匹配好的网页内容
    :return:
    """
    if isinstance(result, list):
        out_str = ""
        out_html = ""
        for one in result:
            if isinstance(one, str):
                out_str = out_str + one + "\n"
                out_html = out_html + one + "\n"
            else:
                out_str = out_str + one.text + "\n"
                out_html = out_html + etree.tostring(one, pretty_print=True, encoding="utf-8").decode("utf-8") + "\n"
        return out_str.replace(" ", "").strip("\n"), out_html.replace(" ", "").strip("\n")
    elif isinstance(result, str):
        return result.replace(" ", ""), result.replace(" ", "")
    else:
        return "", ""


def jiazai():
    """
    加载动态网页源码
    :return:
    """
    global old_url, source
    url = url_text.get()
    if not (str(url).startswith("http://") or str(url).startswith("https://")):
        source_text.delete(1.0, 'end')
        source_text.insert("insert", "请检查是否添加http或https前缀!!!")
        return None
    if not str(url).__contains__("."):
        source_text.delete(1.0, 'end')
        source_text.insert("insert", "请输入正确格式的网址!!!")
        return None
    if url != "" and (source_text.get(1.0, 1.1) == "" or old_url != url):
        source_text.delete(1.0, 'end')
        old_url = url
        try:
            driver.get(url)
            source = driver.page_source
            if source == '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>':
                source_text.insert("insert", "请输入真实的网址!!!")
            else:
                source_text.insert("insert", source)
        except Exception as e:
            source_text.insert("insert", "此网址无法解析,请输入其他的网址!!!")


def ceshi():
    """
    将匹配到的网页结果显示出来
    :return:
    """
    global source
    if source != "" and xpath_text.get() != "":
        html = etree.HTML(source)
        print(xpath_text.get())
        result = html.xpath(xpath_text.get())
        out_string, out_html = result_to_string(result)
        result_text.delete(1.0, "end")
        result_source_text.delete(1.0, "end")
        result_text.insert("insert", out_string)
        result_source_text.insert("insert", out_html)


window = tk.Tk()
window.title('动态网页XPATH验证工具    Designed by Mr.Li')
window.geometry('750x560')

# 框架列
url_frame = tk.Frame(window)
url_frame.pack()
xpath_frame = tk.Frame(window)
xpath_frame.pack()
result_frame = tk.Frame(window)
result_frame.pack()
html_frame = tk.Frame(window)
html_frame.pack()
source_frame = tk.Frame(window)
source_frame.pack()

# 待匹配网址输入列
url_label = tk.Label(url_frame, text='请输入网址:')
url_label.pack(side=LEFT)
url_text = tk.Entry(url_frame, show=None, width=45)
url_text.pack(side=LEFT)
button1var = StringVar()
button1var.set("加载网页")
url_button = tk.Button(url_frame, textvariable=button1var, width=10, command=jiazai)
url_button.pack(side=RIGHT)

# xpath规则输入列
xpath_label = tk.Label(xpath_frame, text='请输入规则:')
xpath_label.pack(side=LEFT)
xpath_text = tk.Entry(xpath_frame, show=None, width=45)
xpath_text.pack(side=LEFT)
xpath_button = tk.Button(xpath_frame, text="测试", width=10, command=ceshi)
xpath_button.pack(side=RIGHT)

# 结果列
result_label = tk.Label(result_frame, text='结果文字:')
result_label.pack(side=LEFT)
result_text = tk.Text(result_frame, show=None, height=9, width=80)
result_text.pack(side=LEFT)
result_source_label = tk.Label(html_frame, text='结果源码:')
result_source_label.pack(side=LEFT)
result_source_text = tk.Text(html_frame, show=None, height=9, width=80)
result_source_text.pack(side=LEFT)

# 源码列
source_label = tk.Label(source_frame, text='网页源码:')
source_label.pack(side=LEFT)
source_text = tk.Text(source_frame, height=17, width=80)
source_text.pack(side=LEFT)
window.mainloop()

下图为启动界面:
在这里插入图片描述
下图为运行结果:
在这里插入图片描述

目录
相关文章
|
13天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
30 4
|
2月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
133 5
|
6天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
50 19
Selenium IDE:Web自动化测试的得力助手
|
8天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
80 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
2月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
480 5
|
2月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
39 0
|
2月前
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
376 1
|
2月前
|
Web App开发 Java 测试技术
使用selenium+chromedriver+xpath爬取动态加载信息(一)
使用selenium+chromedriver+xpath爬取动态加载信息(一)
80 1