Selenium模塊是利用程序直接操控瀏覽器,,就像模擬用戶與頁(yè)面交互一樣,,你只需把程序設(shè)定好就可以讓他自己執(zhí)行一系列操作像打開網(wǎng)頁(yè),填寫內(nèi)容,提交表單,下載文件等操作,。但其運(yùn)行時(shí)間較慢,。這里我們以FireFox瀏覽器作為我們將要去控制的瀏覽器,,那么我們需要在電腦中提前下載安裝好FireFox瀏覽器,同時(shí)要下載一個(gè)可以讓程序控制它的驅(qū)動(dòng),,驅(qū)動(dòng)下載鏈接為Releases ·
mozilla/geckodriver · GitHub,,可以根據(jù)自己電腦的版本來(lái)下載對(duì)應(yīng)的驅(qū)動(dòng)。下載好后將其解壓到自己指定的文件夾中,,selenium模塊可以通過(guò)在cmd中 'pip install selenium’進(jìn)行安裝,。以上準(zhǔn)備完成后就可以執(zhí)行接下來(lái)的操作了,我們先簡(jiǎn)單的試一下: #導(dǎo)入相關(guān)模塊 from selenium import webdriver from selenium.webdriver.chrome.service import Service #將驅(qū)動(dòng)所在路徑放入service中 drive = Service('D:\\軟件\\geckodriver.exe') #啟動(dòng)火狐瀏覽器 browser = webdriver.Firefox(service=drive) #將鏈接指向https://xueshu.baidu.com/ browser.get('https://xueshu.baidu.com/')
這樣我們就成功利用程序自動(dòng)打開了網(wǎng)頁(yè),!下面我們模擬鼠標(biāo)點(diǎn)擊頁(yè)面,,我們?cè)诎俣葘W(xué)術(shù)的右面可以看到各個(gè)功能,接下來(lái)我們想進(jìn)入學(xué)術(shù)分析這一欄目中,,應(yīng)該如何操作呢,?首先我們需要獲取到學(xué)術(shù)分析所在的位置,并轉(zhuǎn)到它所代表的鏈接,,這需要我們知道如何在頁(yè)面中尋找元素,。WebDriver中尋找元素通常使用的是find_elements(by=By.*),其中包括以下幾種查找方式: 比如這里我們可以根據(jù)(LINK_TEXT)“學(xué)術(shù)分析”所在的位置找到其鏈接,,進(jìn)而進(jìn)行模擬點(diǎn)擊的操作,,使其跳轉(zhuǎn)到“學(xué)術(shù)分析”頁(yè)面:from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.action_chains import ActionChains #導(dǎo)入By from selenium.webdriver.common.by import By drive = Service('D:\\軟件\\geckodriver.exe') browser = webdriver.Firefox(service=drive) browser.get('https://xueshu.baidu.com/') link = browser.find_element(by=By.LINK_TEXT,value='學(xué)術(shù)分析') link.click() 按道理來(lái)說(shuō),這樣就能成功轉(zhuǎn)到學(xué)術(shù)分析所指的頁(yè)面,,然而現(xiàn)在只停在打開的時(shí)候的頁(yè)面外加一堆看不到的錯(cuò)誤提示,。在進(jìn)行短暫的思考過(guò)后,發(fā)現(xiàn)其剛打開頁(yè)面的時(shí)候首先會(huì)出現(xiàn)一個(gè)頁(yè)面提示(如首頁(yè)圖所示),,需要先點(diǎn)擊一下頁(yè)面(任意位置即可),,才能進(jìn)行后續(xù)操作,那么我們也可以利用程序模擬鼠標(biāo)隨意點(diǎn)擊下頁(yè)面再進(jìn)行后續(xù)操作就可以了呀?。?/span>from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.action_chains import ActionChains #導(dǎo)入By from selenium.webdriver.common.by import By drive = Service('D:\\軟件\\geckodriver.exe') browser = webdriver.Firefox(service=drive) browser.get('https://xueshu.baidu.com/') #隨意點(diǎn)擊頁(yè)面,,位置為頁(yè)面橫坐標(biāo)500,縱坐標(biāo)100處 ActionChains(browser).move_by_offset(500, 100).click().perform() link = browser.find_element(by=By.LINK_TEXT,value='學(xué)術(shù)分析') link.click()
我們還可以找到網(wǎng)頁(yè)中的輸入文本部分,,通常是<input>或<textarea>元素,通過(guò)調(diào)用send_keys()方法將文本傳進(jìn)去,,再使用submit()方法提交表單,,等同于點(diǎn)擊表單所在的提交按鈕,比如這里我們想搜索有關(guān)'medical’的文獻(xiàn),,即可找到百度學(xué)術(shù)檢索框的位置: 然后將’medical’傳入進(jìn)去并提交:from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By drive = Service('D:\\軟件\\geckodriver.exe') browser = webdriver.Firefox(service=drive) browser.get('https://xueshu.baidu.com/') ipt = browser.find_element(by=By.ID,value='kw') ipt.send_keys('medical') ipt.submit()
如果我們想要的內(nèi)容不在光標(biāo)當(dāng)前所在的頁(yè)面位置,,我們可以通過(guò)滾動(dòng)到該頁(yè)面的底部進(jìn)行獲取。這里我們利用的是<html>標(biāo)簽,,以及Keys的END變量,。<html>標(biāo)簽通常是在HTML文件的開頭和結(jié)尾處,,因此我們利用它來(lái)滾動(dòng)頁(yè)面:from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys drive = Service('D:\\軟件\\geckodriver.exe') browser = webdriver.Firefox(service=drive) browser.get('https://xueshu.baidu.com/') #隨意點(diǎn)擊頁(yè)面,位置為頁(yè)面橫坐標(biāo)500,,縱坐標(biāo)100處 ActionChains(browser).move_by_offset(500, 100).click().perform() roll = browser.find_element(by=By.TAG_NAME,value='html') roll.send_keys(Keys.END)
我們還可以模擬點(diǎn)擊瀏覽器按鈕比如前進(jìn)browser.forward(),,后退browser.back(),刷新browser.refresh(),,關(guān)閉窗口browser.quit():from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By drive = Service('D:\\軟件\\geckodriver.exe') browser = webdriver.Firefox(service=drive) browser.get('https://xueshu.baidu.com/') browser.refresh() selenium還能做的遠(yuǎn)不止這些,,比如模擬登錄,修改cookie等等以上即為本次全部?jī)?nèi)容,,寫文不易,,如果您覺得我們的推送對(duì)您很有幫助,您可以通過(guò)贊賞來(lái)給予我們超大鼓勵(lì),!跪謝~[1]Python編程快速上手:讓繁瑣工作自動(dòng)化/(美)斯維加特(Al Sweigart)著,;王海鵬譯. -- 北京:人民郵電出版社,2016.7[2]Selenium Documentation
— Selenium 4.4 documentationhttps://www.v/selenium/docs/api/py/api.html “統(tǒng)計(jì)分析與數(shù)據(jù)挖掘”是一個(gè)分享以原創(chuàng)為主的數(shù)據(jù)挖掘,、統(tǒng)計(jì)軟件操作,、生信分析、機(jī)器學(xué)習(xí)等內(nèi)容的文章,、教程和學(xué)習(xí)視頻的公眾號(hào),。創(chuàng)建的原目的是為了敦促學(xué)生學(xué)習(xí)相關(guān)知識(shí)和進(jìn)行寫作訓(xùn)練。如果您喜歡我們的推送內(nèi)容,,歡迎點(diǎn)贊,、轉(zhuǎn)發(fā)、在看,,您的支持將是我們深入學(xué)習(xí)的動(dòng)力!
|