python?selenium參數(shù)詳解和實(shí)現(xiàn)案例
無頭模式添加,可以讓selenium模擬登錄,進(jìn)入到后臺運(yùn)行
這里以登錄打開公司內(nèi)網(wǎng)下載數(shù)據(jù)為例,因?yàn)樯婕八矫軉栴},所以有些地方我們進(jìn)行覆蓋,還請諒解
先不添加無頭模式,進(jìn)行登錄,并且下載文件
因?yàn)橐话鉺elenium使用的是之前版本的瀏覽器,所以會出現(xiàn)以下情況,需要進(jìn)行安全認(rèn)證,所以可以進(jìn)行直接忽略認(rèn)證書的錯誤

一般是在selenium的options進(jìn)行添加
options.add_argument('ignore-certificate-errors')

可以看到上面有很多目錄點(diǎn)擊過來的,要求下載所有的含有日報(bào)的excel,需進(jìn)行小框選擇后,才會出現(xiàn)下載按鈕

下載一般是直接下載到瀏覽器默認(rèn)的地址,這里我們可以進(jìn)行自主修改,還是在options里進(jìn)行配置,函數(shù)如下
# 設(shè)置默認(rèn)地址
prefs = {'download.default_directory': r'D:\desktop\test_download'}
options.add_experimental_option('prefs', prefs)完整代碼如下
# 導(dǎo)入所需要的庫
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
# 運(yùn)行時terminal里面會出現(xiàn)好多警告,剔除警告
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
# 瀏覽器設(shè)置
def web_sets(self):
self.options = webdriver.ChromeOptions()
# 因?yàn)槲沂褂玫氖枪雀铻g覽器
self.c_service = Service(f'{self.chrome}')
self.c_service.command_line_args()
# 設(shè)置后端服務(wù)器開始,因?yàn)闀诤笈_產(chǎn)生好多服務(wù),為了后面的關(guān)閉
self.c_service.start()
# 提供默認(rèn)下載地址
self.prefs = {'download.default_directory': f'{self.path}'}
self.options.add_experimental_option('prefs', self.prefs)
# 設(shè)置忽略安全證書所帶來的錯誤
self.options.add_argument('ignore-certificate-errors')
# 一些小的設(shè)置
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):
"""
因?yàn)槲沂菍⑺性乇4嬖趈son文件里面,這樣就不需要因?yàn)閒ind_element而占用好多列
也為代碼節(jié)省地方
這里需要強(qiáng)調(diào)的時find_element(By.XPATH)是最新selenium的使用方法,之前的使用會報(bào)錯
"""
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)
# 設(shè)置跳轉(zhuǎn)到最后頁面
def skipPage(self, url):
self.br.get(url)
time.sleep(2)
# 下載文件
def download_excel(self):
# 獲取所有ul下面的li標(biāo)簽個數(shù)
ul2 = self.br.find_element(By.XPATH, f'{self.elements[keys[6]]}')
# 獲取li標(biāo)簽數(shù)目
lis2 = ul2.find_elements(By.XPATH, 'li')
time.sleep(1)
# 循環(huán)li標(biāo)簽
for j in range(len(lis2)):
# 因?yàn)閘i的elements都是從1開始,python列表是從0開始,所以要+1
j+=1
# 獲取li標(biāo)簽的text
name = self.br.find_element(By.XPATH, f'{self.elements[keys[7]][1]}'%j).get_attribute('title')
print(f'li標(biāo)簽name: {name}')
if '日報(bào)' 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)
# 設(shè)置點(diǎn)擊覆蓋,以防止報(bào)錯
# 因?yàn)橐恢币M點(diǎn)擊選擇文件,然后進(jìn)行下載文件,防止點(diǎn)擊覆蓋
self.br.execute_script("arguments[0].click();", li_test2)
time.sleep(8)
time.sleep(10)
time.sleep(12)
# 退出瀏覽器,推出后臺服務(wù)
# c_service.stop()對應(yīng)之前的c_service.stop()
self.br.quit();self.c_service.stop()
JSON文件

ul標(biāo)簽的展示

li標(biāo)簽下的title

在這里順便講下如何獲取xpath的絕對路徑或者相對路徑


展示下ul標(biāo)簽相對路徑和絕對路徑
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(),后臺運(yùn)行服務(wù),不能進(jìn)行關(guān)閉

運(yùn)行代碼
if __name__ == '__main__':
jsonFile = r'JsonFile\elements.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)為了展示出來 取消掉無頭模式 這樣可以看到瀏覽器進(jìn)行下載


可以看到只有含有’日報(bào)’的數(shù)據(jù)被下載了,并且任務(wù)管理器里面沒有剛才出現(xiàn)的Chrome32的服務(wù)

到此這篇關(guān)于python selenium參數(shù)詳解和實(shí)現(xiàn)案例的文章就介紹到這了,更多相關(guān)python selenium參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pycharm激活方法及詳細(xì)教程(詳細(xì)且實(shí)用)
這篇文章主要介紹了Pycharm激活方法及詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-05-05
Python基礎(chǔ)教程之tcp socket編程詳解及簡單實(shí)例
這篇文章主要介紹了Python基礎(chǔ)教程之tcp socket編程詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02
Python 實(shí)現(xiàn)毫秒級淘寶搶購腳本的示例代碼
本篇文章主要介紹了Python 通過selenium實(shí)現(xiàn)毫秒級自動搶購的示例代碼,通過掃碼登錄即可自動完成一系列操作,搶購時間精確至毫秒,可搶加購物車等待時間結(jié)算的,感興趣的小伙伴們可以參考一下2019-09-09
使用anaconda的pip安裝第三方python包的操作步驟
今天小編就為大家分享一篇使用anaconda的pip安裝第三方python包的操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Django 實(shí)現(xiàn)jwt認(rèn)證的示例
這篇文章主要介紹了Django 實(shí)現(xiàn)jwt 認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用django,感興趣的朋友可以了解下2021-04-04
Pytorch數(shù)據(jù)類型與轉(zhuǎn)換(torch.tensor,torch.FloatTensor)
這篇文章主要介紹了Pytorch數(shù)據(jù)類型轉(zhuǎn)換(torch.tensor,torch.FloatTensor),之前遇到轉(zhuǎn)為tensor轉(zhuǎn)化為浮點(diǎn)型的問題,今天整理下,我只講幾個我常用的,對Pytorch數(shù)據(jù)類型轉(zhuǎn)換相關(guān)知識感興趣的朋友一起看看吧2023-02-02

