电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python中Selenium庫(kù)使用教程詳解

瀏覽:12日期:2022-07-16 14:54:56

selenium介紹

selenium最初是一個(gè)自動(dòng)化測(cè)試工具,而爬蟲(chóng)中使用它主要是為了解決requests無(wú)法直接執(zhí)行JavaScript代碼的問(wèn)題 selenium本質(zhì)是通過(guò)驅(qū)動(dòng)瀏覽器,完全模擬瀏覽器的操作,比如跳轉(zhuǎn)、輸入、點(diǎn)擊、下拉等,來(lái)拿到網(wǎng)頁(yè)渲染之后的結(jié)果,可支持多種瀏覽器

中文參考文檔

官網(wǎng)

環(huán)境安裝

下載安裝selenium

pip install selenium -i https://mirrors.aliyun.com/pypi/simple/

谷歌瀏覽器驅(qū)動(dòng)程序下載地址:

http://chromedriver.storage.googleapis.com/index.html

使用示例

from selenium import webdriverfrom time import sleep# 實(shí)例化一款瀏覽器bor = webdriver.Chrome(executable_path=’chromedriver.exe’)# 對(duì)指定的url發(fā)起請(qǐng)求bor.get(’https://www.jd.com/’)sleep(1)# 進(jìn)行標(biāo)簽定位search_input = bor.find_element_by_id(’key’)# 向搜索框中錄入關(guān)鍵詞search_input.send_keys('mac pro')# 點(diǎn)擊搜索按鈕btn = bor.find_element_by_xpath(’//*[@id='search']/div/div[2]/button’)btn.click()sleep(2)# 執(zhí)行js,讓滾輪向下滾動(dòng)bor.execute_script(’window.scrollTo(0, document.body.scrollHeight)’)sleep(2)page_text = bor.page_sourceprint(page_text)bor.quit()

瀏覽器創(chuàng)建

Selenium支持非常多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機(jī)端的瀏覽器。另外,也支持無(wú)界面瀏覽器PhantomJS。

from selenium import webdriver browser = webdriver.Chrome()browser = webdriver.Firefox()browser = webdriver.Edge()browser = webdriver.PhantomJS()browser = webdriver.Safari()

元素定位

webdriver 提供了一系列的元素定位方法,常用的有以下幾種:

定位一個(gè)元素 定位多個(gè)元素 含義 find_element_by_id find_elements_by_id 通過(guò)元素id定位 find_element_by_name find_elements_by_name 通過(guò)元素name定位 find_element_by_xpath find_elements_by_xpath 通過(guò)xpath表達(dá)式定位 find_element_by_link_text find_elements_by_link_tex 通過(guò)完整超鏈接定位 find_element_by_partial_link_text find_elements_by_partial_link_text 通過(guò)部分鏈接定位 find_element_by_tag_name find_elements_by_tag_name 通過(guò)標(biāo)簽定位 find_element_by_class_name find_elements_by_class_name 通過(guò)類(lèi)名進(jìn)行定位 find_elements_by_css_selector find_elements_by_css_selector 通過(guò)css選擇器進(jìn)行定位

注意:

1、find_element_by_xxx找的是第一個(gè)符合條件的標(biāo)簽,find_elements_by_xxx找的是所有符合條件的標(biāo)簽。

2、根據(jù)ID、CSS選擇器和XPath獲取,它們返回的結(jié)果完全一致。

3、另外,Selenium還提供了通用方法find_element(),它需要傳入兩個(gè)參數(shù):查找方式By和值。實(shí)際上,它就是find_element_by_id()這種方法的通用函數(shù)版本,比如find_element_by_id(id)就等價(jià)于find_element(By.ID, id),二者得到的結(jié)果完全一致。

實(shí)例演示

假如有一個(gè)web頁(yè)面,通過(guò)前端工具查看到一個(gè)元素的屬性是這樣的。

<html> <head> <body link='#0000cc'> <a href='http://www.hdgsjgj.cn/' rel='external nofollow' onmousedown='return c({’fm’:’tab’,’tab’:’logo’})'> <form name='f' action='/s'> <span ></span> <input name='wd' value='' maxlength='255' autocomplete='off'>

通過(guò)id定位:

dr.find_element_by_id('kw')

通過(guò)name定位:

dr.find_element_by_name('wd')

通過(guò)class name定位:

dr.find_element_by_class_name('s_ipt')

通過(guò)tag name定位:

dr.find_element_by_tag_name('input')

通過(guò)xpath定位,xpath定位有N種寫(xiě)法,這里列幾個(gè)常用寫(xiě)法:

dr.find_element_by_xpath('//*[@]')dr.find_element_by_xpath('//*[@name=’wd’]')dr.find_element_by_xpath('//input[@]')dr.find_element_by_xpath('/html/body/form/span/input')dr.find_element_by_xpath('//span[@]/input')dr.find_element_by_xpath('//form[@]/span/input')dr.find_element_by_xpath('//input[@ and @name=’wd’]')

通過(guò)css定位,css定位有N種寫(xiě)法,這里列幾個(gè)常用寫(xiě)法:

dr.find_element_by_css_selector('#kw')dr.find_element_by_css_selector('[name=wd]')dr.find_element_by_css_selector('.s_ipt')dr.find_element_by_css_selector('html > body > form > span > input')dr.find_element_by_css_selector('span.soutu-btn> input#kw')dr.find_element_by_css_selector('form#form > span > input')

假如頁(yè)面上有如下一組文本鏈接

<a rel='external nofollow' name='tj_trnews'>新聞</a><a rel='external nofollow' name='tj_trhao123'>hao123</a>

通過(guò)link text定位:

dr.find_element_by_link_text('新聞')dr.find_element_by_link_text('hao123')

通過(guò)partial link text定位:

dr.find_element_by_partial_link_text('新')dr.find_element_by_partial_link_text('hao')dr.find_element_by_partial_link_text('123')

控制瀏覽器

常用的控制瀏覽器操作的一些方法

方法 說(shuō)明 set_window_size() 設(shè)置瀏覽器的大小 back() 控制瀏覽器后退 forward() 控制瀏覽器前進(jìn) refresh() 刷新當(dāng)前頁(yè)面 clear() 清除文本 send_keys (value) 模擬按鍵輸入 click() 單擊元素 submit() 用于提交表單 get_attribute(name) 獲取元素屬性值 is_displayed() 設(shè)置該元素是否用戶(hù)可見(jiàn) size 返回元素的尺寸 text 獲取元素的文本

📝 示例

from selenium import webdriverfrom time import sleep#1.創(chuàng)建Chrome瀏覽器對(duì)象,這會(huì)在電腦上在打開(kāi)一個(gè)瀏覽器窗口browser = webdriver.Chrome(executable_path= 'chromedriver.exe')#2.通過(guò)瀏覽器向服務(wù)器發(fā)送URL請(qǐng)求browser.get('https://www.baidu.com/')sleep(3)#3.刷新瀏覽器browser.refresh()#4.設(shè)置瀏覽器的大小browser.set_window_size(1400,800)#5.設(shè)置鏈接內(nèi)容element=browser.find_element_by_link_text('新聞')element.click()

調(diào)用JavaScript代碼

雖然WebDriver提供了操作瀏覽器的前進(jìn)和后退方法,但對(duì)于瀏覽器滾動(dòng)條并沒(méi)有提供相應(yīng)的操作方法。在這種情況下,就可以借助JavaScript來(lái)控制瀏覽器的滾動(dòng)條。WebDriver提供了execute_script()方法來(lái)執(zhí)行JavaScript代碼。

用于調(diào)整瀏覽器滾動(dòng)條位置的JavaScript代碼如下:

<!-- window.scrollTo(左邊距,上邊距); -->window.scrollTo(0,450);

from selenium import webdriverfrom time import sleep# 1.訪(fǎng)問(wèn)百度drive = webdriver.Chrome(executable_path=’chromedriver.exe’)drive.get(’https://www.baidu.com’)# 2.搜索drive.find_element_by_id(’kw’).send_keys(’python’)drive.find_element_by_id(’su’).click()# 3.休眠2s,獲取服務(wù)器的響應(yīng)內(nèi)容sleep(2)# 4.通過(guò)javascript設(shè)置瀏覽器窗口的滾動(dòng)條位置drive.execute_script(’window.scrollTo(0, 500)’)# drive.execute_script(’window.scrollTo(0, document.body.scrollHeight)’) #滑到最底部sleep(2)drive.close()

獲取頁(yè)面源碼數(shù)據(jù)

通過(guò)page_source屬性可以獲取網(wǎng)頁(yè)的源代碼,接著就可以使用解析庫(kù)(如正則表達(dá)式、Beautiful Soup、pyquery等)來(lái)提取信息了。

📝 示例

from selenium import webdriverfrom time import sleep# 1.訪(fǎng)問(wèn)百度drive = webdriver.Chrome(executable_path=’chromedriver.exe’)drive.get(’https://www.baidu.com’)# 2.搜索drive.find_element_by_id(’kw’).send_keys(’python’)drive.find_element_by_id(’su’).click()# 3.休眠2s,獲取服務(wù)器的響應(yīng)內(nèi)容sleep(2)# 4.獲取頁(yè)面源碼數(shù)據(jù)text = drive.page_sourceprint(text)drive.close()

cookie操作

有時(shí)候我們需要驗(yàn)證瀏覽器中cookie是否正確,因?yàn)榛谡鎸?shí)cookie的測(cè)試是無(wú)法通過(guò)白盒和集成測(cè)試進(jìn)行的。WebDriver提供了操作Cookie的相關(guān)方法,可以讀取、添加和刪除cookie信息。

WebDriver操作cookie的方法:

方法 說(shuō)明 get_cookies() 獲得所有cookie信息 get_cookie(name) 返回字典的key為“name”的cookie信息 add_cookie(cookie_dict) 添加cookie?!癱ookie_dict”指字典對(duì)象,必須有name 和value 值 delete_cookie(name,optionsString) 刪除cookie信息?!皀ame”是要?jiǎng)h除的cookie的名稱(chēng),“optionsString”是該cookie的選項(xiàng),目前支持的選項(xiàng)包括“路徑”,“域” delete_all_cookies() 刪除所有cookie信息

📝 示例

from selenium import webdriverdrive = webdriver.Chrome(executable_path=’chromedriver.exe’)drive.get(’https://www.cnblogs.com/’)# 1.打印cookie信息print(drive.get_cookies())# 2.添加cookie信息dic = {’name’:’name’, ’value’:’python’}drive.add_cookie(dic)print(drive.get_cookies())# 3.遍歷打印cookie信息for cookie in drive.get_cookies(): print(f'{cookie[’name’]}---f{cookie[’value’]}n')drive.close()

谷歌無(wú)頭瀏覽器

PhantomJs已停止維護(hù)更新,這里使用谷歌的無(wú)頭瀏覽器,是一款無(wú)界面的谷歌瀏覽器。很多時(shí)候我們爬取數(shù)據(jù),并不想打開(kāi)一個(gè)瀏覽器窗口進(jìn)行操作,我們只需要獲取數(shù)據(jù)或者拿到cookie然后進(jìn)行操作。

📝 示例

from selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 1.創(chuàng)建一個(gè)參數(shù)對(duì)象,用來(lái)控制chrome以無(wú)界面模式打開(kāi)chrome_options = Options()chrome_options.add_argument(’--headless’)chrome_options.add_argument(’--disable-gpu’)# 2.創(chuàng)建瀏覽器對(duì)象drive = webdriver.Chrome(executable_path=’chromedriver.exe’, chrome_options=chrome_options)# 3.發(fā)起請(qǐng)求獲取數(shù)據(jù)drive.get(’https://www.cnblogs.com/’)page_text = drive.page_sourceprint(page_text)drive.close()

selenium規(guī)避被檢測(cè)識(shí)別

現(xiàn)在不少大網(wǎng)站有對(duì)selenium采取了監(jiān)測(cè)機(jī)制。比如正常情況下我們用瀏覽器訪(fǎng)問(wèn)淘寶等網(wǎng)站的 window.navigator.webdriver的值為 undefined。而使用selenium訪(fǎng)問(wèn)則該值為true。那么如何解決這個(gè)問(wèn)題呢?

只需要設(shè)置Chromedriver的啟動(dòng)參數(shù)即可解決問(wèn)題。在啟動(dòng)Chromedriver之前,為Chrome開(kāi)啟實(shí)驗(yàn)性功能參數(shù)excludeSwitches,它的值為[’enable-automation’],完整代碼如下:

📝 示例

from selenium import webdriverfrom selenium.webdriver import ChromeOptions# 1.實(shí)例化一個(gè)ChromeOptions對(duì)象option = ChromeOptions()option.add_experimental_option(’excludeSwitches’, [’enable-automation’])# 2.將ChromeOptions實(shí)例化的對(duì)象option作為參數(shù)傳給Crhome對(duì)象driver = webdriver.Chrome(executable_path=’chromedriver.exe’, options=option)# 3.發(fā)起請(qǐng)求driver.get(’https://www.taobao.com/’)

到此這篇關(guān)于Python中Selenium庫(kù)使用教程詳解的文章就介紹到這了,更多相關(guān)Python Selenium庫(kù)使用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 首页_欧瑞传动官方网站--主营变频器、伺服系统、新能源、软起动器、PLC、HMI | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 日本东丽膜_反渗透膜_RO膜价格_超滤膜_纳滤膜-北京东丽阳光官网 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 长城人品牌官网| 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 头条搜索极速版下载安装免费新版,头条搜索极速版邀请码怎么填写? - 欧远全 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 |