<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
無頭模式新增,可以讓selenium模擬登入,進入到後臺執行
這裡以登入開啟公司內網下載資料為例,因為涉及私密問題,所以有些地方我們進行覆蓋,還請諒解
先不新增無頭模式,進行登入,並且下載檔案
因為一般selenium使用的是之前版本的瀏覽器,所以會出現以下情況,需要進行安全認證,所以可以進行直接忽略認證書的錯誤
一般是在selenium的options進行新增
options.add_argument('ignore-certificate-errors')
可以看到上面有很多目錄點選過來的,要求下載所有的含有日報的excel,需進行小框選擇後,才會出現下載按鈕
下載一般是直接下載到瀏覽器預設的地址,這裡我們可以進行自主修改,還是在options裡進行設定,函數如下
# 設定預設地址 prefs = {'download.default_directory': r'D:desktoptest_download'} options.add_experimental_option('prefs', prefs)
完整程式碼如下
# 匯入所需要的庫 import time import json import warnings from selenium import webdriver from sqlalchemy import create_engine from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 執行時terminal裡面會出現好多警告,剔除警告 warnings.filterwarnings('ignore') class Download(): def __init__(self, url, year, path, chrome, username, password, elements): self.year = year self.url = url self.path = path self.chrome = chrome self.username = username self.password = password self.elements = elements # 瀏覽器設定 def web_sets(self): self.options = webdriver.ChromeOptions() # 因為我使用的是谷歌瀏覽器 self.c_service = Service(f'{self.chrome}') self.c_service.command_line_args() # 設定後端伺服器開始,因為會在後臺產生好多服務,為了後面的關閉 self.c_service.start() # 提供預設下載地址 self.prefs = {'download.default_directory': f'{self.path}'} self.options.add_experimental_option('prefs', self.prefs) # 設定忽略安全證書所帶來的錯誤 self.options.add_argument('ignore-certificate-errors') # 一些小的設定 self.options.add_experimental_option('excludeSwitches', ["enable-automation"]) self.options.add_argument('--np-sanbox') self.options.add_argument('--disable-dev-shm-usage') # 加屬性避免bug self.options.add_argument('disable-gpu') # 新增無頭模式 self.options.add_argument('headless') self.br = webdriver.Chrome(f'{self.chrome}', chrome_options=self.options) self.br.implicitly_wait(3) def loginPage(self): """ 因為我是將所有元素儲存在json檔案裡面,這樣就不需要因為find_element而佔用好多列 也為程式碼節省地方 這裡需要強調的時find_element(By.XPATH)是最新selenium的使用方法,之前的使用會報錯 """ self.br.get(self.url) time.sleep(4) self.br.find_element(By.XPATH, f'{self.elements[keys[2]]}').send_keys(self.username) time.sleep(2) self.br.find_element(By.XPATH, f'{self.elements[keys[3]]}').send_keys(self.password) time.sleep(2) self.br.find_element(By.XPATH, f'{self.elements[keys[4]]}').click() time.sleep(2) # 設定跳轉到最後頁面 def skipPage(self, url): self.br.get(url) time.sleep(2) # 下載檔案 def download_excel(self): # 獲取所有ul下面的li標籤個數 ul2 = self.br.find_element(By.XPATH, f'{self.elements[keys[6]]}') # 獲取li標籤數目 lis2 = ul2.find_elements(By.XPATH, 'li') time.sleep(1) # 迴圈li標籤 for j in range(len(lis2)): # 因為li的elements都是從1開始,python列表是從0開始,所以要+1 j+=1 # 獲取li標籤的text name = self.br.find_element(By.XPATH, f'{self.elements[keys[7]][1]}'%j).get_attribute('title') print(f'li標籤name: {name}') if '日報' in name: print(f'第二遍過濾name: {name}') li_test = self.br.find_element(By.XPATH, f'{self.elements[keys[8]]}'%j) self.br.execute_script('arguments[0].click();',li_test) time.sleep(0.5) self.br.find_element(By.XPATH, f'{self.elements[keys[9]]}').click() time.sleep(0.5) li_test2 = self.br.find_element(By.XPATH, f'{self.elements[keys[8]]}'%j) time.sleep(1) # 設定點選覆蓋,以防止報錯 # 因為一直要模擬點選選擇檔案,然後進行下載檔案,防止點選覆蓋 self.br.execute_script("arguments[0].click();", li_test2) time.sleep(8) time.sleep(10) time.sleep(12) # 退出瀏覽器,推出後臺服務 # c_service.stop()對應之前的c_service.stop() self.br.quit();self.c_service.stop()
JSON檔案
ul標籤的展示
li標籤下的title
在這裡順便講下如何獲取xpath的絕對路徑或者相對路徑
展示下ul標籤相對路徑和絕對路徑
xpath: //*[@id="main"]/div[2]/div/div[3]/div[1]/as-dataview/div[2]/ul full_xpath: /html/body/div[2]/div[1]/div[2]/div/div[1]/div[2]/div/div[3]/div[1]/as-dataview/div[2]/ul
下圖是沒有c_service.stop(),後臺執行服務,不能進行關閉
執行程式碼
if __name__ == '__main__': jsonFile = r'JsonFileelements.json' with open(jsonFile, 'r') as f: row_data = json.load(f) # 獲取所有json的鍵 keys = list(row_data.keys()) # 讀取賬號和密碼 filename = row_data[keys[0]] # 獲取賬號和密碼txt with open(filename, 'r') as f: data = f.read() data1 = data.split('n') url = 'url' # chromedriver.exe chrome = r'chromedriver.exe' username = data1[0] password = data1[1] path = row_data[keys[1]] year = time.gmtime().tm_year start = Download(url, year, path, chrome, username, password, row_data) start.web_sets() start.loginWeb() e = row_data[keys[5]] start.skipPage(e) start.download_excel() time.sleep(15)
為了展示出來 取消掉無頭模式 這樣可以看到瀏覽器進行下載
可以看到只有含有’日報’的資料被下載了,並且工作管理員裡面沒有剛才出現的Chrome32的服務
到此這篇關於python selenium引數詳解和實現案例的文章就介紹到這了,更多相關python selenium引數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45