2. 根據(jù)標(biāo)簽頁句柄列表索引下標(biāo)進(jìn)行切換
driver.switch_to.window(current_windows[0])
- 參考代碼示例:
import time
from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(“https://www.baidu.com/”)
?
time.sleep(1)
driver.find_element_by_id(‘kw’).send_keys(‘python’)
time.sleep(1)
driver.find_element_by_id(‘su’).click()
time.sleep(1)
?
通過執(zhí)行js來新開一個(gè)標(biāo)簽頁
js = ‘window.open(“https://www.sogou.com”);’
driver.execute_script(js)
time.sleep(1)
?
1. 獲取當(dāng)前所有的窗口
windows = driver.window_handles
?
time.sleep(2)
2. 根據(jù)窗口索引進(jìn)行切換
driver.switch_to.window(windows[0])
time.sleep(2)
driver.switch_to.window(windows[1])
?
time.sleep(6)
driver.quit()
2. switch_to切換frame標(biāo)簽
iframe是html中常用的一種技術(shù),即一個(gè)頁面中嵌套了另一個(gè)網(wǎng)頁,selenium默認(rèn)是訪問不了frame中的內(nèi)容的,對應(yīng)的解決思路是
driver.switch_to.frame(frame_element)
。接下來我們通過qq郵箱模擬登陸來學(xué)習(xí)這個(gè)知識點(diǎn)
- 參考代碼:
import time
from selenium import webdriver
?
driver = webdriver.Chrome()
?
url = ‘https://mail.qq.com/cgi-bin/loginpage’
driver.get(url)
time.sleep(2)
?
login_frame = driver.find_element_by_id(‘login_frame’) # 根據(jù)id定位 frame元素
driver.switch_to.frame(login_frame) # 轉(zhuǎn)向到該frame中
?
driver.find_element_by_xpath(‘//*[@id=“u”]’).send_keys(‘1596930226@qq.com’)
time.sleep(2)
?
driver.find_element_by_xpath(‘//*[@id=“p”]’).send_keys(‘hahamimashicuode’)
time.sleep(2)
?
driver.find_element_by_xpath(‘//*[@id=“l(fā)ogin_button”]’).click()
time.sleep(2)
?
“”“操作frame外邊的元素需要切換出去”“”
windows = driver.window_handles
driver.switch_to.window(windows[0])
?
content = driver.find_element_by_class_name(‘login_pictures_title’).text
print(content)
?
driver.quit()
-
總結(jié):
-
切換到定位的frame標(biāo)簽嵌套的頁面中
-
driver.switch_to.frame(通過find_element_by函數(shù)定位的frame、iframe標(biāo)簽對象)
-
利用切換標(biāo)簽頁的方式切出frame標(biāo)簽
windows = driver.window_handles
driver.switch_to.window(windows[0])
3. selenium對cookie的處理
selenium能夠幫助我們處理頁面中的cookie,比如獲取、刪除,接下來我們就學(xué)習(xí)這部分知識
獲取cookie
driver.get_cookies()
返回列表,其中包含的是完整的cookie信息!不光有name、value,還有domain等cookie其他維度的信息。所以如果想要把獲取的cookie信息和requests模塊配合使用的話,需要轉(zhuǎn)換為name、value作為鍵值對的cookie字典
# 獲取當(dāng)前標(biāo)簽頁的全部cookie信息
print(driver.get_cookies())
把cookie轉(zhuǎn)化為字典
cookies_dict = {cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}
刪除cookie
#刪除一條cookie
driver.delete_cookie(“CookieName”)
?
刪除所有的cookie
driver.delete_all_cookies()
4. selenium控制瀏覽器執(zhí)行js代碼
selenium可以讓瀏覽器執(zhí)行我們規(guī)定的js代碼,運(yùn)行下列代碼查看運(yùn)行效果
import time
from selenium import webdriver
?
driver = webdriver.Chrome()
driver.get(“http://www.itcast.cn/”)
time.sleep(1)
?
js = ‘window.scrollTo(0,document.body.scrollHeight)’ # js語句
driver.execute_script(js) # 執(zhí)行js的方法
?
time.sleep(5)
driver.quit()
- 執(zhí)行js的方法:
driver.execute_script(js)
5. 頁面等待
頁面在加載的過程中需要花費(fèi)時(shí)間等待網(wǎng)站服務(wù)器的響應(yīng),在這個(gè)過程中標(biāo)簽元素有可能還沒有加載出來,是不可見的,如何處理這種情況呢?
-
頁面等待分類
-
強(qiáng)制等待介紹
-
顯式等待介紹
-
隱式等待介紹
-
手動實(shí)現(xiàn)頁面等待
頁面等待的分類
首先我們就來了解以下selenium頁面等待的分類
-
強(qiáng)制等待
-
隱式等待
-
顯式等待
強(qiáng)制等待(了解)
-
其實(shí)就是time.sleep()
-
缺點(diǎn)時(shí)不智能,設(shè)置的時(shí)間太短,元素還沒有加載出來;設(shè)置的時(shí)間太長,則會浪費(fèi)時(shí)間
隱式等待
-
隱式等待針對的是元素定位,隱式等待設(shè)置了一個(gè)時(shí)間,在一段時(shí)間內(nèi)判斷元素是否定位成功,如果完成了,就進(jìn)行下一步
-
在設(shè)置的時(shí)間內(nèi)沒有定位成功,則會報(bào)超時(shí)加載
-
示例代碼
from selenium import webdriver
?
driver = webdriver.Chrome()
?
driver.implicitly_wait(10) # 隱式等待,最長等20秒
?
driver.get(‘https://www.baidu.com’)
?
driver.find_element_by_xpath()
?
顯式等待(了解)
-
每經(jīng)過多少秒就查看一次等待條件是否達(dá)成,如果達(dá)成就停止等待,繼續(xù)執(zhí)行后續(xù)代碼
-
如果沒有達(dá)成就繼續(xù)等待直到超過規(guī)定的時(shí)間后,報(bào)超時(shí)異常
-
示例代碼
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get(‘https://www.baidu.com’)
顯式等待
WebDriverWait(driver, 20, 0.5).until(
EC.presence_of_element_located((By.LINK_TEXT, ‘好123’)))
參數(shù)20表示最長等待20秒
參數(shù)0.5表示0.5秒檢查一次規(guī)定的標(biāo)簽是否存在
EC.presence_of_element_located((By.LINK_TEXT, ‘好123’)) 表示通過鏈接文本內(nèi)容定位標(biāo)簽
每0.5秒一次檢查,通過鏈接文本內(nèi)容定位標(biāo)簽是否存在,如果存在就向下繼續(xù)執(zhí)行;如果不存在,直到20秒上限就拋出異常
print(driver.find_element_by_link_text(‘好123’).get_attribute(‘href’))
driver.quit()
手動實(shí)現(xiàn)頁面等待
在了解了隱式等待和顯式等待以及強(qiáng)制等待后,我們發(fā)現(xiàn)并沒有一種通用的方法來解決頁面等待的問題,比如“頁面需要滑動才能觸發(fā)ajax異步加載”的場景,那么接下來我們就以淘寶網(wǎng)首頁為例,手動實(shí)現(xiàn)頁面等待
-
原理:
-
利用強(qiáng)制等待和顯式等待的思路來手動實(shí)現(xiàn)
-
不停的判斷或有次數(shù)限制的判斷某一個(gè)標(biāo)簽對象是否加載完畢(是否存在)
-
實(shí)現(xiàn)代碼如下:
import time
from selenium import webdriver
driver = webdriver.Chrome(‘/home/worker/Desktop/driver/chromedriver’)
driver.get(‘https://www.taobao.com/’)
time.sleep(1)
i = 0
while True:
for i in range(10):
i += 1
try:
time.sleep(3)
element = driver.find_element_by_xpath(‘//div[@class=“shop-inner”]/h3[1]/a’)
print(element.get_attribute(‘href’))
break
except:
js = ‘window.scrollTo(0, {})’.format(i*500) # js語句
driver.execute_script(js) # 執(zhí)行js的方法
driver.quit()
6. selenium開啟無界面模式
絕大多數(shù)服務(wù)器是沒有界面的,selenium控制谷歌瀏覽器也是存在無界面模式的,這一小節(jié)我們就來學(xué)習(xí)如何開啟無界面模式(又稱之為無頭模式)
-
開啟無界面模式的方法
-
實(shí)例化配置對象
-
options = webdriver.ChromeOptions()
-
配置對象添加開啟無界面模式的命令
-
options.add_argument("--headless")
-
配置對象添加禁用gpu的命令
-
options.add_argument("--disable-gpu")
-
實(shí)例化帶有配置對象的driver對象
-
driver = webdriver.Chrome(chrome_options=options)
-
注意:macos中chrome瀏覽器59+版本,Linux中57+版本才能使用無界面模式!
-
參考代碼如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 創(chuàng)建一個(gè)配置對象
options.add_argument(“–headless”) # 開啟無界面模式
options.add_argument(“–disable-gpu”) # 禁用gpu
options.set_headles() # 無界面模式的另外一種開啟方式
driver = webdriver.Chrome(chrome_options=options) # 實(shí)例化帶有配置的driver對象
driver.get(‘http://www.itcast.cn’)
print(driver.title)
driver.quit()
7. selenium使用代理ip
selenium控制瀏覽器也是可以使用代理ip的!
-
使用代理ip的方法
-
實(shí)例化配置對象
-
options = webdriver.ChromeOptions()
-
配置對象添加使用代理ip的命令
-
options.add_argument('--proxy-server=http://202.20.16.82:9527')
-
實(shí)例化帶有配置對象的driver對象
-
driver = webdriver.Chrome('./chromedriver', chrome_options=options)
-
參考代碼如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 創(chuàng)建一個(gè)配置對象
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長或者是報(bào)班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Python開發(fā)知識點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024c (備注Python)
如果你也是看準(zhǔn)了Python,想自學(xué)Python,在這里為大家準(zhǔn)備了豐厚的免費(fèi)學(xué)習(xí)大禮包,帶大家一起學(xué)習(xí),給大家剖析Python兼職、就業(yè)行情前景的這些事兒。
一、Python所有方向的學(xué)習(xí)路線
Python所有方向路線就是把Python常用的技術(shù)點(diǎn)做整理,形成各個(gè)領(lǐng)域的知識點(diǎn)匯總,它的用處就在于,你可以按照上面的知識點(diǎn)去找對應(yīng)的學(xué)習(xí)資源,保證自己學(xué)得較為全面。
二、學(xué)習(xí)軟件
工欲善其必先利其器。學(xué)習(xí)Python常用的開發(fā)軟件都在這里了,給大家節(jié)省了很多時(shí)間。
三、全套PDF電子書
書籍的好處就在于權(quán)威和體系健全,剛開始學(xué)習(xí)的時(shí)候你可以只看視頻或者聽某個(gè)人講課,但等你學(xué)完之后,你覺得你掌握了,這時(shí)候建議還是得去看一下書籍,看權(quán)威技術(shù)書籍也是每個(gè)程序員必經(jīng)之路。
四、入門學(xué)習(xí)視頻
我們在看視頻學(xué)習(xí)的時(shí)候,不能光動眼動腦不動手,比較科學(xué)的學(xué)習(xí)方法是在理解之后運(yùn)用它們,這時(shí)候練手項(xiàng)目就很適合了。
四、實(shí)戰(zhàn)案例
光學(xué)理論是沒用的,要學(xué)會跟著一起敲,要動手實(shí)操,才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去,這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來學(xué)習(xí)。
五、面試資料
我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
成為一個(gè)Python程序員專家或許需要花費(fèi)數(shù)年時(shí)間,但是打下堅(jiān)實(shí)的基礎(chǔ)只要幾周就可以,如果你按照我提供的學(xué)習(xí)路線以及資料有意識地去實(shí)踐,你就有很大可能成功!
最后祝你好運(yùn)?。。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-854321.html
一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!
csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)
四、實(shí)戰(zhàn)案例
光學(xué)理論是沒用的,要學(xué)會跟著一起敲,要動手實(shí)操,才能將自己的所學(xué)運(yùn)用到實(shí)際當(dāng)中去,這時(shí)候可以搞點(diǎn)實(shí)戰(zhàn)案例來學(xué)習(xí)。
五、面試資料
我們學(xué)習(xí)Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有阿里大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
成為一個(gè)Python程序員專家或許需要花費(fèi)數(shù)年時(shí)間,但是打下堅(jiān)實(shí)的基礎(chǔ)只要幾周就可以,如果你按照我提供的學(xué)習(xí)路線以及資料有意識地去實(shí)踐,你就有很大可能成功!
最后祝你好運(yùn)?。?!
一個(gè)人可以走的很快,但一群人才能走的更遠(yuǎn)。不論你是正從事IT行業(yè)的老鳥或是對IT行業(yè)感興趣的新人,都?xì)g迎掃碼加入我們的的圈子(技術(shù)交流、學(xué)習(xí)資源、職場吐槽、大廠內(nèi)推、面試輔導(dǎo)),讓我們一起學(xué)習(xí)成長!
[外鏈圖片轉(zhuǎn)存中…(img-aYtM9aHQ-1712700674319)]文章來源地址http://www.zghlxwxcb.cn/news/detail-854321.html
到了這里,關(guān)于Python中selenium的玩法,小朋友看了都說學(xué)會了(1),字節(jié)跳動測試開發(fā)工程師面試題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!