免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Selenium 常用代碼及 Tips

作者:東東

來源:https://blog.yasking.org

(一)判斷元素是否存在

  1. self.driver.find_element(By.ID, 'name').size != 0

(二)智能延時/等待指定節(jié)點加載

當(dāng)需要獲取的元素節(jié)點是由 JavaScript 動態(tài)生成時,需要讓獲取節(jié)點的代碼'等一等'再運行 通過 time.sleep(5)這種方式,當(dāng)需要等待網(wǎng)絡(luò)請求比較多時,會導(dǎo)致完成一次運行需要等待很久,如下是一些代碼及使用場景

每次點擊事件后都應(yīng)該添加智能延時代碼,它會等待時間為0~5秒

  1. from selenium import webdriver

  2. from selenium.webdriver.common.by import By

  3. driver = webdriver.Firefox()

  4. driver.get('http://www.example.com/')

  5. driver.find_element(By.ID, 'submit').click()

  6. driver.implicitly_wait(5)

一般來講,稍稍設(shè)置大一些的等待時間即可加載出相應(yīng)節(jié)點的數(shù)據(jù),有一種更為確定的方法,可以在指定的時間內(nèi)等待,直到我們需要的節(jié)點加載出來,相比于 implicitly_wait 它更加的精確,節(jié)省時間,因為它不必等待我們不關(guān)心的節(jié)點加載

  1. from selenium import webdriver

  2. from selenium.webdriver.common.by import By

  3. from selenium.webdriver.support.ui import WebDriverWait

  4. from selenium.webdriver.support import expected_conditions as EC

  5. driver = webdriver.Firefox()

  6. driver.get('http://www.example.com/')

  7. wait = WebDriverWait(self.driver, 10)

  8. wait.until(

  9.    EC.presence_of_element_located((By.ID, 'submit'))

  10. ).click()

如上的寫法是針對于獲取到節(jié)點就點擊的,如果一個登陸表單時動態(tài)加載的,并且里面的元素也是動態(tài)加載的,那么首先需要先獲取登陸表單,然后在表單的基礎(chǔ)上再選擇節(jié)點,示例代碼段如下

  1. # 等待登錄頁加載完成

  2. wait = WebDriverWait(driver, WAIT_TIME)

  3. formElement = wait.until(

  4.    EC.presence_of_element_located((By.CSS_SELECTOR, '.sign-in-form'))

  5. )

  6. # 填寫郵箱與密碼登陸

  7. emailElement = formElement.find_element(By.ID, 'email')

  8. emailElement.send_keys(username)

  9. passwordEmement = formElement.find_element(By.ID, 'password')

  10. passwordEmement.send_keys(password)

  11. # 點擊登陸

  12. formElement.find_element(By.CSS_SELECTOR, '[type='button']').click()

  13. driver.implicitly_wait(WAIT_TIME)

(三)元素個數(shù)(Elements Counts)

一些情況下,獲取元素下子節(jié)點的數(shù)量有助于幫助程序判斷節(jié)點的狀態(tài),簡化代碼,而且有時數(shù)量信息也是很重要的數(shù)據(jù)

  1. counts = self.driver.find_elements(By.CLASS_NAME, 'img')

  2. print len(counts)

為了這個問題,我Google了有一會,有說需要使用xpath才能返回列表的,有的是java的代碼,嘗試好久,最后我才在一個問題下邊猛然的發(fā)現(xiàn)我的方法少了一個 s,是 find_elements_by_xxx()而不是 find_element_by_xxx()

(四)處理iframe的情況

driver.switchtoframe(self, frame_reference) 這個方法已經(jīng)廢棄

新的函數(shù)如下:

  1. def frame_switch(css_selector):

  2.    driver.switch_to.frame(driver.find_element_by_css_selector(css_selector))

  3. def frame_switch(name):

  4.  driver.switch_to.frame(driver.find_element_by_name(name))

處理完iframe,回到之前的界面

  1. driver.switch_to.default_content()

(五)Firefox與Chrome的driver差異

當(dāng)寫完Login()函數(shù)后,加載其它函數(shù),比如或許用戶詳情頁的時候,F(xiàn)irefox Driver或自動帶上Cookies,Chrome Driver 不會自動加載Cookies,所以使用Chrome比Firefox需要多兩行代碼,手動加載Cookies

  1. # 登陸后獲取cookies

  2. cookies = driver.get_cookies()

  3. # 在加載新的頁面后倒入Cookies

  4. for cookie in cookies:

  5.    driver.add_cookie(cookie)

如果有些網(wǎng)站的Cookies有效期很長,那么可以將Cookies保存到文件

  1. # 保存Cookies到文件

  2. import pickle

  3. import selenium.webdriver

  4. driver = selenium.webdriver.Firefox()

  5. driver.get('http://www.google.com')

  6. pickle.dump( driver.get_cookies() , open('cookies.pkl','wb'))

  7. # 從文件加載Cookies

  8. import pickle

  9. import selenium.webdriver

  10. driver = selenium.webdriver.Firefox()

  11. driver.get('http://www.google.com')

  12. cookies = pickle.load(open('cookies.pkl', 'rb'))

  13. for cookie in cookies:

  14.    driver.add_cookie(cookie)

(六)滾動加載

有些數(shù)據(jù)一頁展示不完,當(dāng)側(cè)邊欄向下拉或者鼠標(biāo)滾動的時候才會繼續(xù)加載數(shù)據(jù),這種模式在瀑布流的圖片展示站點非常常見,不過也很好解決

  1. # 回到頂部

  2. js='var q=document.body.scrollTop=0'

  3. driver.execute_script(js)

  4. # 拉到底部

  5. js='var q=document.body.scrollTop=10000'

  6. driver.execute_script(js)

在網(wǎng)上搜索的時候有這樣的寫法 document.documentElement.scrollTop=10000,我在測試的時候發(fā)現(xiàn)body的寫法是工作的,這可能跟網(wǎng)站/瀏覽器 有一定關(guān)系,在測試的時候哪種能工作就用哪種吧


題圖:pexels,CC0 授權(quán)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
selenium:禁止加載圖片和cookies使用
Selenium2+python自動化75-非input文件上傳(SendKeys)
Selenium WebDriver 環(huán)境搭建和錯誤調(diào)試_chromedriver_win32必須下載否則無法測試chrome
Selenium2 python自動化29-js處理多窗口
【編程課堂】selenium 祖?zhèn)髋老x利器
Python爬蟲利器五之Selenium的用法 | 靜覓
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服