python爬虫脚本 ,uni-金沙1005

python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」从业c#开发多年,现在也经常用到python 做网络爬虫 ,用uni-app做手机前端。攒了一点经验。供其他多语言开发程序员借鉴吧。 python做爬虫和其他的方式做爬虫最大的区别应该在于. pyth

python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验

从业c#开发多年,现在也经常用到python 做网络爬虫 ,用uni-app做手机前端。攒了一点经验。供其他多语言开发程序员借鉴吧。

     python做爬虫和其他的方式做爬虫最大的区别应该在于. python 可以将浏览器内核寄宿到程序里。例如ie内核。火狐内核。google内核。然后可以模拟人对浏览器的操作。不是简单的发起http请求然后解析页面就结束。而是可以在页面上进行多次点击操作。程序还能一直监听发生变化后的页面元素。

 

from selenium import webdriver
from lxml import etree
from selenium.webdriver.common.by import by
from selenium.webdriver.common.keys import keys
webdriver 是python 将浏览器寄宿到程序的框架。并且可以模拟用户的操作。也提供基本的html解析方式
selenium 是更深一层 操作浏览器和 解析html元素的框架。有时候 同一段代码 webdriver 解析不出来 selenium 就是能解析出来。可能底层优化的更好吧 
etree 会将html 解析成对象。获取里面的属性。
三者结合使用或许效果更好。

   options = webdriver.firefoxoptions()
         fp = webdriver.firefoxprofile()
         #    fp.set_preference("browser.download.dir",common.getsection("downfile"))  
         fp.set_preference("browser.download.folderlist",2)  
         fp.set_preference("browser.download.manager.showwhenstarting",false)
         fp.set_preference("browser.helperapps.neverask.savetodisk","application/zip,application/octet-stream")
         driver = webdriver.firefox(firefox_profile=fp,options=options)
browser.download.dir 指的是下载路径
browser.download.manager.showwhenstarting 指的是下载是否弹出询问框
browser.helperapps.neverask.savetodisk 指的是下载的文件类型 ,如果爬页面还要获取网页下载的zip,或者jpg。这里都要用逗号加上文件的类型。
  driver.get("http://www.stbchina.cn/item.html#?itemid=" itemcode.strip())
           
driver.get 写入你要爬取的地址
如果顺利的话,你可以看到程序启动了火狐浏览器并跳到了对应的网址上
不想看到浏览器的话,插入一下代码
  options.add_argument("--headless")

浏览器会被隐藏

 很多时候我们需要等待页面加载元素完毕后才能解析不然后程序会直接异常,接下来推荐两个等待响应的方法
element = webdriverwait(driver, 10).until(
ec.presence_of_element_located((by.id, "you-id"))
)

这段代码会等待页面十秒钟。在十秒内将元素加载成功后才会继续往下执行代码

但是过了十秒以后。元素还没有加载成功。会走入异常

也可以简单粗暴的使用线程挂起的方式,python 程序停止响应几秒钟,但是并不影响寄宿的浏览器去加载页面元素

time.sleep(int(3))

在页面加载成功以后可以使用各种方式解析元素,或者操作页面

html = etree.html(driver.page_source) 

解析html页面元素通常使用xpath ,如果大家不想学习xpath表达式。浏览器提供简单粗暴的方法

listimg=html.xpath("//*[contains(@class,"formwork_img")]/img")

点击页面右键 检查, 会出现我们都熟悉的控制台,在elements里选择dom节点右键 copy , 然后在右侧的弹出框里选择 copy xpath。你会发现浏览器将写好的xpath语法写入了你的剪切板

获取元素的属性可以用 

itme.attrib["src"]

当变成树状结构以后基本就跟操作tree 差不多

操作页面的话可以用

script=driver.find_element_by_xpath("//a[contains(text(),"发票下载")]").get_attribute("onclick")

找到某一个a标签。文本为发票下载。发送点击事件。但是我更推荐使用js脚本。

  driver.execute_script("$("#sqrqq").val("" strtime "")")
                                       driver.execute_script("$("#sqrqz").val("" endtime "")")
                             
                                       driver.execute_script("searchxzqq()")

 

就像大家用js操作前端一样。比发送点击事件更加靠谱。因为经常点击事件没有响应。

uni-app 最近
使用场景有涉及到复选框做购物车,但是我在金沙1005官网搜了一遍复选框的案例。我似乎看到官方回答,目前还不支持双向绑定,于是我自己做了一个

 


 


class="agreement_radio" @change="checkboxchange">

 


checkbox-group 可以作为顶级父节点,类似body, 绑定点击事件
根节点包含循环的数据体。

 


  像这杨什么都可以包进去,它只是一个顶级父节点而已。每一个复选框包含一组数据。

  uni-app 目前的版本,哪怕你value 绑定了数据。checked 绑定了数据。在最后提交整个数组的时候,其实依旧不会改变绑定数组的checked.所以需要我们手动绑定。

   再每次选中和取消复选框的时候触发事件 checkboxchange ,e.detail.value 是选中的数组的value.被取消选中和没有选中的复选框是不会传递值的。而且不会改变绑定的数据。这多多少少有点不合适。在目前的版本。

所以当绑定数组和复选框改变事件的数据可以产生交集的时候。使用多重循环改变绑定数组的值。就可以双向绑定复选框和绑定数组了。



//整个购物车单条数据的选中和取消选中 checkboxchange: function(e) { // console.log(this.cart) var items = this.cart, values = e.detail.value; for (let b = 0; b < this.cart.length; b ) { for (let c = 0; c < this.cart[b].length; c ) { let continuearr = values.filter(item => { return item == this.cart[b][c].value; }) if (continuearr.length > 0) { this.cart[b][c].checked = true; } else { this.cart[b][c].checked = false; } //console.log("选中的值:" continuearr) } } //console.log( this.cart) }

目前net core 已经升级到了 net 5 。以后既不是framework 框架也不是net core框架。其实底层也有core的影子。
但是肯定不在通用老版的net工作流框架了
于是百般无奈下自己琢磨了一套工作流思想和底层结构

一套后台可配置工作流

 


 

以及 app前台审批

 


 

核心还是数据库的四张表

 


[workflowtemplate]表如下,其实没什么用,只是为了在后台管理时可以区分每个工作流叫什么。


 python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」

 

 guid 类似主键

 name 是这条工作流的名称 

 type 是工作流的类型,比如 1=审批工作流 ,2=招标工作流

  departmentid 是这个工作流挂在员工的部门id。这个部门的人员发起的审批工作流直接走此工作流的审批链

python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」

 

 

 

[workflowtemplatenode] 是此条工作流的审批链
name表示这条审批链下此节点叫什么,
templateid 绑定到 workflowtemplate的唯一表示主键下。
userlist 存放此次审批节点的审批人集合。
templatetype 审批节点的类型已经弃用了,当初定的是为1 需要此审批节点下全部人员通过,为0只要有一个人审批通过便算此审批节点通过。
number 指的是此审批链下的第几个节点。为0是第一个审批节点,为1为2 以此类推。

工作流审批链就到此为止了,接下来是用户发起场景以及关联工作流

 

   比如order 表是用户发起申领物品的主表,

   reson 是用户申领的事由 

  orderid 是此申领表的唯一主键

  user_sid 是用户唯一主键

  其他不相关的申领详情表就略过了。。。。

  当用户发起申请的时候,除了order用户申领表,还有工作流任务关联表

    python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」

 

    这下用户发起的请求,关联的工作流以及审批链就串联起来了。

     userid 是谁发起的,

     orderid 关联那个申领单,

     nodeid已弃用,

     gudi是当前用户关联工作流唯一主键

     workid是关联的工作流

     接下来是每一级审批链每一个审批人的相关信息

     python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」

 

 

       userid 是当前任务的审批人

       taskid 是用户关联工作流表 唯一主键,也就是上一张表的主键,

       desc 是备注,

       attachment 是附件,

       status 是审批状态,

       nodeid 是 用户关联工作流表 次级审批的节点唯一主键 。用于判断这个人审批哪一环节。以及状态信息。

 

python爬虫脚本 ,uni-app复选框做出双向绑定 ,net5工作流建模 。的一点经验「建议收藏」

 

 

 

 

      串联起来就是 先生成 workflowtemplate 工作流模块流程,

      然后workflowtemplatenode绑定此模块的次级审批人物

      接着 workflow_node 关联用户,申领信息,绑定工作流,

      最后 workflow_task 绑定 在哪个工作流,在工作流的那个节点。 每一级审批人员的审批信息。

      接口里关联用户,申领行为,发起审批。以及每一级审批的通过拒绝。以及扭转到下一级审批就不讲了,毕竟每个公司的业务不一致。这四张核心主表。就可以完成整个工作流的扭转。

 

   

 

 







js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/24208.html

(0)

相关推荐

  • python selenium中级篇之8-python中的继承的使用 本文开始介绍一个面向对象设计领域里,很常见的一种思想,继承。继承有很多好处,常听到的一句话就是,子类能够直接使用父类的方法,这样就可以减少子类代码量。其实,在自动化测试框架设计过程中,是很有必要把继承加入到你的测试脚本中去。接下来我们,简单写一个python文件,来演示下继承的基本使用。 1. 在t …

  • python pycharm terminal 控制台命名 及 pip 安装包[通俗易懂]一、terminal命令行指定项目文件夹tree:文件夹path列表dir:项目的目录文件夹pythonmanage.pystart.appmyapp:生成myapp文件夹pythonmanage.pyrunserver:启动服务器,在浏览器中输入http://127.0.0.1:8000/可以在浏览器中查看网页ctrl c退出pythonmana…

  • python hash函数_hasattr我最近读过一些tweet和关于hasattr 的python文档,它说:hasattr(对象,名称)参数是一个对象和一个字符串。如果字符串是对象属性之一的名称,则结果为true,如果不是则为false。(这是通过调用getattr(object,name)并查看它是否引发attributeerror来实现的。)在这种情况下,用一个非常简单的python代码进

  • ?python游戏开发,pygame模块,python实现接水果和金币小游戏?「建议收藏」前言 利用python制作一个接水果和金币的小游戏,让我们愉快地开始吧~ 效果图 开发工具 python版本:3.6.4 相关模块: pygame模块; 以及一些python自带的模块。 环境搭建 安

  • python产生随机字符串_python删除列表中字符串python生成随机数、随机字符、随机字符串本文是基于windows10系统环境,实现python生成随机数、随机字符、随机字符串:windows10pycharm2018.3.5forwindows(exe)python3.6.8windowsx86executableinstaller(1)生成随机数随机整数importrandom…

  • 编写一个进制转换程序python_进制转换python编程1、十进制转换成任意进制的代码方法非常简单,就是利用辗转相除法,保存商和余数,直到商为0为止,再将余数反转。deff(n,x):#n为待转换的十进制数,x为机制,取值为2-16a,b=’0123456789abcdef’,[]whiletrue:s=n//x#商y=n%x#余数b.append(y)ifnots:breakn=s

    2022年10月20日
  • python3.7解决报错:’nonetype’ object has no attribute ‘decode’的办法「建议收藏」 本人在练习《python编程从入门到实践》中的使用api项目时,在获取api的过程中出现了报错importrequestsimportpygalfrompygal.styleimportlightcolorizedstyleaslcs,lightenstyleasls#makeanapicall,andstoretheresponse.ur…

  • python存储数据_python将数据存入数据库今天的内容是: python 操作mysql说到数据库,可能有些朋友没有学过mysql数据库语句语法,不过没关系,python中操作数据库储存数

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图