Python 自动化办公-玩转浏览器

【Python 爬虫】Playwright 多浏览器支持(Chromium/Firefox/WebKit) 手动修改navigator""")Win64;}) 阅读详情

日常工作中,我们不可能避免得使用浏览器来完成一些工作,Python 也有不少浏览器自动化的工具,我用过 selenium、splinter、playwright,最终还是选择了微软的 playwright,之所以选择它,是因为它可以自动安装浏览器,不需要手动下载浏览器的驱动程序,比如 chromedriver,这样写出来的自动化工具很容易移植到其他系统中运行。

Playwright 可通过单个 API 自动执行 Chromium,Firefox 和 WebKit浏览器,支持无头浏览器(headless),Linux、macOS、Windows 下均可以使用,Playwright提供的自动化技术是绿色的,功能强大,稳定且速度快。你可以充分发挥空间,想象它可以实现什么样的功能。

安装:
官方文档 playwright.dev/python/docs…

pip install playwright
playwright install

playwright install 将会安装 Chromium,Firefox 和 WebKit 浏览器的二进制文件,非常方便,需要 Python 3.7 及以上版本才行。

先来一段示例代码:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("http://playwright.dev")
    print(page.title())
    browser.close()

运行程序后,程序会自动打开浏览器,访问 playwright.dev,并打印网站的标题。

自动生成代码

Playwright 最吸引我的地方在于它可以自己记录你对浏览器的操作,并将这些操作生成可以执行的代码,这简直就是神器,大大提升了浏览器自动化的效率。生成代码只需要执行

python -m playwright codegen baidu.com

可以生成如下代码:

from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    # Open new page
    page = context.new_page()
    # Go to https://www.baidu.com/
    page.goto("https://www.baidu.com/")
    # Click input[name="wd"]
    page.click("input[name=\"wd\"]")
    # Fill input[name="wd"]
    page.fill("input[name=\"wd\"]", "playwright ")
    # Press CapsLock
    page.press("input[name=\"wd\"]", "CapsLock")
    # Fill input[name="wd"]
    page.fill("input[name=\"wd\"]", "playwright 教程")
    # Press Enter
    # with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=playwright%20%E6%95%99%E7%A8%8B&fenlei=256&rsv_pq=880cdb05002fe1ed&rsv_t=19abqiURFrqQT3i6%2F84nvsfVrJlI%2B1T6XbVpQkOap78JGssznOJ4%2FVasRzE&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=23&rsv_sug1=20&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=6608&rsv_sug4=11435&rsv_jmp=fail"):
    with page.expect_navigation():
        page.press("input[name=\"wd\"]", "Enter")
    # Click text=Playwright-python 教程_天下任我行-优快云博客
    # with page.expect_navigation(url="https://blog.youkuaiyun.com/lb245557472/article/details/111572119"):
    with page.expect_navigation():
        with page.expect_popup() as popup_info:
            page.click("text=Playwright-python 教程_天下任我行-优快云博客")
        page1 = popup_info.value
    # Click text=×
    page1.click("text=×")
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

如何与浏览器的元素进行交互
先熟悉一些概念

浏览器

浏览器就是指浏览器的一个实例,可以是 Chromium, Firefox 或 WebKit,Playwright 脚本通常从打开一个浏览器开始,以关闭浏览器作为结束,可以使用无头浏览器模式,也就是说虽然打开了浏览器,但是看不到浏览器启动和操作的过程,这是隐藏的。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    browser.close()

浏览器上下文

浏览器上下文是浏览器实例中孤立的匿名会话。浏览器上下文创建速度快且价格低廉。我们建议在自己的新浏览器上下文中运行每个测试场景,以便在测试之间隔离浏览器状态。浏览器上下文还可用于模拟涉及移动设备、权限、区域设置和配色方案的多页场景。

browser = playwright.chromium.launch()
context = browser.new_context()

页面和框架

浏览器上下文可以有多个页面。页面是指浏览器上下文中的单个选项卡或弹出窗口。它应该用于导航到 URL 并与页面内容交互。

page = context.new_page()

# 显式导航,类似于在浏览器中输入URL。
page.goto('http://example.com')
# 填写输入。
page.fill('#search', 'query')

# 点击链接隐式导航。
page.click('#submit')
# 期待一个新的网址。
print(page.url)

# 页面可以从脚本导航 - 剧作家将接取。
# window.location.href = 'https://example.com'

一个页面可以附加一个或多个 Frame 对象。每个页面都有一个主框架,假设页面级交互(如点击)在主框架中运行。

一个页面可以有附加的附加框架和 iframe HTML 标签。可以访问这些 iframe:

# Get frame using the frame's name attribute
frame = page.frame('frame-login')

# Get frame using frame's URL
frame = page.frame(url=r'.*domain.*')

# Get frame using any other selector
frame_element_handle = page.query_selector('.frame-class')
frame = frame_element_handle.content_frame()

# Interact with the frame
frame.fill('#username-input', 'John')

选择器

选择器就是选取 html 页面内元素的工具。

Playwright 可以使用 CSS 选择器、XPath 选择器、id 等 HTML 属性、data-test-id 甚至文本内容搜索元素。

您可以显式指定您正在使用的选择器引擎,或让 Playwright 检测到它。

Playwright 的选择器是非常直观好用的,在这里了解更多关于选择器和选择器引擎的信息。

实现视频网站的自动播放
以下是简单的打开视频网站,并通过刷新浏览器达到感知视频播放完毕的代码实现。

from playwright.sync_api import sync_playwright
import re, sys
import progressbar
from log import logger
from urllib.parse import urlparse

import time
from config import chromium, browser_path


current_milli_time = lambda: int(round(time.time() * 1000))


class AutoLearning(object):
    @staticmethod
    def get_total_seconds(time_str):
        hour, minute, seconds = 0, 0, 0
        time = [int(i) for i in time_str.split(":")]
        if len(time) == 2:
            minute, seconds = time
        elif len(time) == 1:
            seconds = time[0]
        elif len(time) == 3:
            hour, minute, seconds = time
        else:
            pass
        return hour * 60 * 60 + minute * 60 + seconds

    def __init__(self, username, passwd, base_url, key=None):
        self.username = username
        self.passwd = passwd
        urlparseObj = urlparse(base_url)
        self.base_url = f"{urlparseObj.scheme}://{urlparseObj.hostname}"
        self.hostname = urlparseObj.hostname
        self.sync_playwright = sync_playwright()
        self.playwright = self.sync_playwright.start()
        if chromium:
            self.browser = self.playwright.chromium.launch(executable_path=browser_path, headless=False)
        else:
            self.browser = self.playwright.firefox.launch(executable_path=browser_path,headless=False)
        self.context = self.browser.new_context()
        self.current_page = self.context.new_page()
        self.cookies = {}
        self.corp_code = "default"
        self.map_url = f"{self.base_url}/els/html/index.parser.do?id=0007"

        self.headers = {
            "Host": self.hostname,
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
            "Origin": self.base_url,
        }

        self.eln_session_id = ""

    def __del__(self):
        self.context.close()
        self.browser.close()
        self.sync_playwright.__exit__()

    def login(self):
        logger.info(self.base_url)
        self.current_page.goto(url=self.base_url)
        page = self.current_page
        # self.context.set_default_timeout(6000)
        try:
            # Click [placeholder="请输入用户名"]
            page.click('[name="loginName"]')

            # Fill [placeholder="请输入用户名"]
            page.fill('[name="loginName"]', self.username)

            # Click [placeholder="请输入密码"]
            page.click('[name="password"]')

            # Fill [placeholder="请输入密码"]
            page.fill('[name="password"]', self.passwd)

            # Click text=登录
            page.click("input.login_Btn")
            print("如有验证码,请在浏览器上手动登陆")
            # Click text=继续登录
            # if page.is_visible("text=继续登录", timeout=15000):
            page.click("text=继续登录")

        except Exception:
            print("请在浏览器上手动登陆")
            time.sleep(3)

        while True:
            try:
                if (
                        page.is_visible("text='课程中心'", timeout=3000)
                        or page.is_visible("text='个人中心'", timeout=3000)
                        or page.is_visible("text='学习中心'", timeout=3000)
                ):
                    logger.info("登陆成功")
                    self.current_page = page
                    break
            except Exception:
                print("请在浏览器上手动登陆")
            time.sleep(5)


    def learn_course_from_learn_map(self, which_one_to_learn=1, skip_num=0):

        logger.info("learn_course_from_learn_map begin.")
        self.current_page.goto(self.map_url)
        self.current_page.wait_for_selector(
            f":nth-match(div.track-list-tit,{which_one_to_learn})"
        )
        item = self.current_page.query_selector(
            f":nth-match(div.track-list-tit,{which_one_to_learn})"
        )
        link = self.current_page.query_selector(
            f":nth-match(a.track-list-linktoName,{which_one_to_learn})"
        )
        item_title = item.inner_text()
        link_title = link.inner_text()
        if "学习进度:100%" in item_title:
            logger.info(f"{link_title} 已经学习完成,退出")
            return

        logger.info(f"开始学习 {item_title}")
        link.click()

        self.current_page.wait_for_selector("a.innercan.goCourseByStudy")
        courses = self.current_page.query_selector_all("a.innercan.goCourseByStudy")

        for course in courses[skip_num:]:
            time.sleep(2)
            with self.current_page.expect_popup() as popup_info:
                course.click()
            new_page = popup_info.value
            new_page.wait_for_load_state(timeout=60000)
            time.sleep(1)
            h3 = new_page.query_selector("h3.cs-test-title")
            if h3:
                logger.info("本课程视频已播放完毕,无需播放")
                if h3.inner_text() == "课程评估":
                    self.evaluation(new_page)
                new_page.close()
                continue

            course_item = {
                "courseId": course.get_attribute("id"),
                "courseName": course.get_attribute("title"),
            }

            logger.info(
                f"正在播放 {course_item['courseName']},courseId = {course_item['courseId']}"
            )

            if new_page.is_visible("iframe.url-course-content"):
                self.play_single_course2(new_page)

            if new_page.is_visible("text='确定'",timeout = 3000):
                new_page.click("text='确定'")

            if new_page.is_visible("a:has-text('下一步')"):
                new_page.click("a:has-text('下一步')")
                self.evaluation(new_page)
            new_page.close()
        logger.info("学习地图任务已完成")







    def play_single_course2(self, page):
        """
        一分屏、二分屏播放
        """

        page.wait_for_selector("time.cl-time")
        page.wait_for_selector("id=studiedTime")
        time.sleep(5)
        total_time_ele = page.query_selector("time.cl-time")
        total_minutes = int(0 if total_time_ele.inner_text() == '' else total_time_ele.inner_text())
        alread_time_ele = page.query_selector("id=studiedTime")
        alread_minutes = int(0 if alread_time_ele.inner_text() == '' else alread_time_ele.inner_text())

        chapters = page.query_selector_all("a.scormItem-no.cl-catalog-link.cl-catalog-link-sub.item-no")
        if len(chapters) > 0:
            logger.info(f"本次需要播放 {len(chapters)} 节")
            chapters[0].click()
            logger.info(f"正在播放 {chapters[0].get_attribute('title')} 总共需要时间 {total_minutes} 分钟")

        bar = None
        if sys.platform == "win32":
            bar = progressbar.bar.ProgressBar(max_value=total_minutes)
        else:
            bar = progressbar.ProgressBar(max_value=total_minutes)

        bar.update(alread_minutes)
        wait_count = 0
        while True:
            time.sleep(60)
            wait_count += 1
            if wait_count >= 7:
                page.reload()
                wait_count = 0
            if wait_count % 3 == 0:
                chapters = page.query_selector_all("a.scormItem-no.cl-catalog-link.cl-catalog-link-sub.item-no")
                if len(chapters) > 0:
                    logger.info(f"本次需要播放 {len(chapters)} 节")
                    chapters[0].click()
                    logger.info(f"正在播放 {chapters[0].get_attribute('title')} 总共需要时间 {total_minutes} 分钟")

            page.wait_for_selector("id=studiedTime")
            alread_time_ele = page.query_selector("id=studiedTime")
            alread_minutes = int(0 if alread_time_ele.inner_text() == '' else alread_time_ele.inner_text())
            if page.is_visible("a:has-text('下一步')"):
                break
            bar.update(alread_minutes)
        time.sleep(1)
        bar.update(total_minutes)
        logger.info(f"本页视频已播放完成")



if __name__ == "__main__":
    auto = AutoLearning(username='****', passwd='*', base_url='http://*****.net')
    auto.login()
    auto.learn_course_from_learn_map(which_one_to_learn=1, skip_num=0)
    time.sleep(100)

推荐阅读

睡在我上铺的室友用python,一个月挣了我一学期的生活费

Scrapy第十五篇:后起之秀-Playwright Playwright 是微软在 2020 年初开源的新一代自动化测试工具,它的功能类似于 Selenium、Pyppeteer 等,它的功能非常强大,使用便捷简单,缺点是更新较快,市面上相关文档又少。 阅读详情

相关推荐

使用Playwright实现异步Chromium浏览器自动化

Chromium是开源浏览器项目,Playwright是一个强大的浏览器自动化库,支持包括Chromium在内的多个浏览器。通过Playwright,我们可以轻松地在无头模式下(即无图形界面)启动Chromium浏览器,以实现自动化测试、网页数据抓取等工作。

fgayif的博客 1548

Playwright的启动参数详情

这是Python Playwright框架中的一个方法,用于启动一个持久化的浏览器上下文。

喜上的博客 7374

Python自动化办公

一个完整的Python自动化办公框架的目录结构和详细的解释。该框架将结合多种工具和技术,涵盖从数据处理到任务调度、自动化邮件发送、网页抓取等常见办公自动化任务。

测试开发漫漫成长路的博客 1019

playwright使用

在Python中使用PlayWright进行Web应用程序的自动化测试、抓取和其他任务。这些示例包括打开网页、截取屏幕截图、填写表单、等待元素加载以及获取文本内容等。

Frank_Yee的博客 2127

Python自动化办公知识点整理汇总

知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音。 自动化办公无非是excel、ppt、word、邮件、文件处理、数据分析处理、爬虫这些,这次就来理一理python自动化办公的那些知识点。 python基础 excel自动化 ppt自动化 word自动化 邮件处理 文件批量处理

BYGFJ的博客 1662

Python自动化办公--Pandas玩转Excel【一】

相关文章: python处理Excel实现自动化办公教学(含实战)【一】 python处理Excel实现自动化办公教学(含实战)【二】 python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】 python入门之后须掌握的知识点(模块化编程、时间模块)【一】 python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】 1.基础温故【Pandas】 1.1 创建文件 import pandas as

丨汀、的博客 2885

当 Python 遇到 ChatGPT —— 自动化办公落地

多年来,以Excel、Word和PPT为核心的微软Office软件一直是办公应用的主要软件,当工作要求不断提高及用户需要更高的效率时,内置于Office中的VBA一直是普通办公人员的第一选择。同时,也注意到原本主要用于科研领域的新兴编程语言Python,因为最近几年增加了一些面向办公应用的模块,可以在许多办公场景中大显身手,处理Office文件也越来越得心应手。

程序边界 1万+

(HAL)stm32f407+freertos通过usb驱动移远4G模块-EC600U

文章记录了stm32cubemx+stm32f407+freertos+usb host实现移远4G模块EC600U的usb驱动的调试过程,usb host cdc库的使用和遇到的问题及解决办法。

gongrulin的博客 3901

精心整理了40个Python办公自动化真实案例,一口一个,高效办公!

01导读大家好,我是早起。自从去年4月发布第一篇Python办公自动化系列文章以来,目前已经马不停蹄的更新了近四十个真实办公场景案例,全网累计阅读超20W+,内容涵盖Python操作Wor...

早起Python 4万+

使用 ANSYS 实现铸造、凝固和熔炼的高级解决方案

凭借其强大的有限元分析 (FEA) 和计算流体动力学 (CFD) 功能,ANSYS 可以准确预测模具内的热和流体流动行为。总之,ANSYS 是铸件凝固和熔化领域的关键工具。其全面的仿真功能、工艺优化功能、材料特性分析和用户友好的界面使其成为旨在创新和改进制造工艺的工程师不可或缺的工具。通过利用 ANSYS,各行各业可以在铸造业务中实现更高的质量、效率和成本效益,从而为先进的制造解决方案铺平道路。ANSYS是一款领先的工程仿真软件,提供强大的功能来建模和优化这些复杂的热过程,从而显著提高生产效率和质量。

jkh920184196的博客 2109

【电子元件篇】MOSFET场效应管作用、选型和测量指南-超简单解读

场效应管是一种电压控制型半导体器件,相比三极管具有输入阻抗高、噪声小、功耗低等优势。主要分为结型和绝缘栅型两大类,后者又可分为耗尽型和增强型MOS管。场效应管通过栅极电压控制漏极电流,具有转移特性和输出特性两大静态特性,以及快速的开关特性。其关键参数包括饱和漏源电流、夹断电压、跨导等,应用场景涵盖信号放大、恒流源、阻抗变换等领域。使用时需根据电路需求选择合适类型,如结型管适合一般放大,功率MOSFET适合高压大电流场合。检测时可用万用表电阻档初步判断好坏和放大能力。

2301_81299416的博客 2543

Python自动化办公社区 · 资源汇总

日常更新,建议收藏。

weixin_42321517的博客 2万+

基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化

本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。

huanghm88的专栏 130

python自动化_最全Python自动化办公总结

点击蓝字关注我,有干货领取!知乎上有人提问:用python进行办公自动化都需要学习什么知识呢?这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音。自动化办公无非是excel、ppt、word、邮件、文件处理、数据分析处理、爬虫这些,这次就来理一理python自动化办公的那些知识点。pyth...

weixin_39822728的博客 2016

【模型实战】MiMo-VL-7B讲解与实战

维度成绩MMMU70.6(图像理解最难测试之一)VideoMME70.8(视频理解标杆)59.4(超越78B参数模型)56.1(超过专用GUI模型)Elo评分开源VLM排名第一(7B~72B)社区热度过去一个月下载超1,600次(RL+SFT)📌一句话概括MiMo-VL 是目前性能最强、推理最稳、体验最佳、生态最全的7B级开源视觉语言模型。

m0_47867638的博客 1201

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1375

用Python实现办公自动化

有时候,我们需要创建自定义的文档或报告来分享给他人。Python的docx库可以帮助我们创建Microsoft Word文档,并自动填充内容。# 创建一个新的Word文档对象# 添加标题doc.add_heading("自动化办公实现快速文章生成", level=1)# 添加段落内容doc.add_paragraph("使用Python编写自动化脚本,能够大大提高办公效率。")

努力是为了站在万人之中,成为别人的光 1万+

c#仿热血江湖

Int32_1 = (int) table.Rows[i]["FLD_初级附魂"],Int32_2 = (int) table.Rows[i]["FLD_中级附魂"],Int32_3 = (int) table.Rows[i]["FLD_是否绑定"],Int32_0 = (int) table.Rows[i]["FLD_进化"],Form1.smethod_1(2, "加载百宝阁物品----没有百宝阁数据");Form1.smethod_1(2, "加载物品商店----没有物品数据");

weixin_42132177的博客 143

这20个Python自动化办公工具,赶紧用起来

星标下公众号,获取更多优质教程大家好,我是老表在当今快速发展的办公环境中,Python作为一种高效的编程语言,广泛应用于自动化办公,很多财务多会Python吧?本文将介绍20个实用的Python库,帮助你轻松实现数据处理、文档生成和任务调度等自动化任务,提高工作效率。1. Pandas介绍Pandas是一个强大的数据处理和分析库,特别适合处理表格数据。它提供了灵活的数据结构如DataFrame,使...

简说Python的博客 2838

YOLOv11改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 855

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python自动化办公源代码,python自动化办公教程

Python是一种高级编程语言,它具有简单易学、代码可读性高、功能强大等特点,因此在自动化办公方面有着广泛的应用。本文将介绍Python自动化办公的基本原理和常用的代码示例。

2301_81900494的博客 1143

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python实现办公自动化

Python办公自动化主要是批量化、自动化、定制化解决数据问题,目前主要分为三大块:自动化office、自动化机器人、自动化数据服务。1、自动化office,包括对excel、word、ppt、email、pdf等常用办公场景的操作,python都有对应的工具库,可以很方便的调用。提供一些常见的核心库供大家参考使用。excel:xlwings、xlrd、xlwt、openpyxlword:Python-docxppt:pptxemail:smtplib(SMTP服务)、email(解析处理)、yagmail

qq_39528534的博客 9544

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python中自动化办公 【笔记】

00读取csv文件 import csv def readCsv(path): infolist = [] with open (path,"r") as f: allFileInfo = csv.reader(f) print(allFileInfo) for row in allFileInfo: i...

Allen . Liu 6564

Python自动化办公入门指南(一):开启高效办公新纪元

Pyhton自动化办公,工作效率提升,get新技能

m0_61802257的博客 2155
上一篇: 人工智能学习路线,限时送一份
下一篇: 女友乱用Git,差点把我代码删了。。。
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2841原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值