主頁 > 後端開發 > Python爬蟲腳本 ,Uni-APP復選框做出雙向系結 ,Net5作業流建模 。的一點經驗

Python爬蟲腳本 ,Uni-APP復選框做出雙向系結 ,Net5作業流建模 。的一點經驗

2021-10-30 06:13:17 後端開發

從業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 最近
使用場景有涉及到復選框做購物車,但是我在官網搜了一遍復選框的案例,我似乎看到官方回答,目前還不支持雙向系結,于是我自己做了一個

 


 



<checkbox-group 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]表如下,其實沒什么用,只是為了在后臺管理時可以區分每個作業流叫什么,


 

 

 Guid 類似主鍵

 Name 是這條作業流的名稱 

 Type 是作業流的型別,比如 1=審批作業流 ,2=招標作業流

  DepartmentId 是這個作業流掛在員工的部門Id,這個部門的人員發起的審批作業流直接走此作業流的審批鏈

 

 

 

[WorkFlowTemplateNode] 是此條作業流的審批鏈
Name表示這條審批鏈下此節點叫什么,
TempLateId 系結到 WorkFlowTemplate的唯一表示主鍵下,
userList 存放此次審批節點的審批人集合,
TemplateType 審批節點的型別已經棄用了,當初定的是為1 需要此審批節點下全部人員通過,為0只要有一個人審批通過便算此審批節點通過,
Number 指的是此審批鏈下的第幾個節點,為0是第一個審批節點,為1為2 以此類推,

作業流審批鏈就到此為止了,接下來是用戶發起場景以及關聯作業流

 

   比如Order 表是用戶發起申領物品的主表,

   Reson 是用戶申領的事由 

  OrderId 是此申領表的唯一主鍵

  User_Sid 是用戶唯一主鍵

  其他不相關的申領詳情表就略過了,,,,

  當用戶發起申請的時候,除了Order用戶申領表,還有作業流任務關聯表

    

 

    這下用戶發起的請求,關聯的作業流以及審批鏈就串聯起來了,

     UserId 是誰發起的,

     OrderId 關聯那個申領單,

     NodeId已棄用,

     Gudi是當前用戶關聯作業流唯一主鍵

     WorkId是關聯的作業流

     接下來是每一級審批鏈每一個審批人的相關資訊

     

 

 

       userId 是當前任務的審批人

       TaskId 是用戶關聯作業流表 唯一主鍵,也就是上一張表的主鍵,

       Desc 是備注,

       attachment 是附件,

       status 是審批狀態,

       NodeId 是 用戶關聯作業流表 次級審批的節點唯一主鍵 ,用于判斷這個人審批哪一環節,以及狀態資訊,

 

 

 

 

 

      串聯起來就是 先生成 WorkFlowTemplate 作業流模塊流程,

      然后WorkFlowTemplateNode系結此模塊的次級審批人物

      接著 WorkFlow_Node 關聯用戶,申領資訊,系結作業流,

      最后 WorkFlow_Task 系結 在哪個作業流,在作業流的那個節點, 每一級審批人員的審批資訊,

      介面里關聯用戶,申領行為,發起審批,以及每一級審批的通過拒絕,以及扭轉到下一級審批就不講了,畢竟每個公司的業務不一致,這四張核心主表,就可以完成整個作業流的扭轉,

 

   

 

 







轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341700.html

標籤:Python

上一篇:Python:晚上把附近的足浴店都給爬了一遍,好兄弟真不錯

下一篇:利用Python演算法畫出美麗動人的妹子影像

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more