網(wǎng)站首頁改版模板網(wǎng)站好還是自助建站好
三、Selenium
1.初識(shí)Selenium
1.1什么是Selenium?
Selenium是一個(gè)瀏覽器自動(dòng)化測試框架,是一款用于Web應(yīng)用程序測試的工具??蚣艿讓邮褂肑avaScript模擬真實(shí)用戶對(duì)瀏覽器進(jìn)行操作。測試腳本執(zhí)行時(shí),瀏覽器自動(dòng)按照腳本代碼做出點(diǎn)擊,輸入,打開,驗(yàn)證等操作,就像真實(shí)用戶所做的一樣,從終端用戶的角度測試應(yīng)用程序。使瀏覽器兼容性測試自動(dòng)化成為可能,盡管在不同的瀏覽器上依然有細(xì)微的差別。使用簡單,可使用Java,Python等多種語言編寫用例腳本。
1.2 Selenium的準(zhǔn)備
以Chrome為例:
首先在pycharm中安裝selenium軟件包,版本不要太高,不然會(huì)閃退,測試是3.5版本。(補(bǔ):后續(xù)更新到selenium3.10運(yùn)行無影響)
然后http://chromedriver.storage.googleapis.com/index.html網(wǎng)站中找到對(duì)應(yīng)版本的chromedriver下載win32就可以了,解壓之后復(fù)制粘貼到項(xiàng)目文件夾的一級(jí)目錄下。
準(zhǔn)備工作完成。
2. Selenium的使用
2.1為什么要使用Selenium
先看下面一段代碼
import urllib.requesturl = 'https://www.jd.com'response = urllib.requst.urlopen(url)content = response.read().decode('utf-8')print(content)
在控制臺(tái)搜索J_seckill(京東秒殺模塊的id),無匹配字段,原因是:模擬瀏覽器獲取不了京東秒殺的內(nèi)容,因?yàn)榫W(wǎng)站檢測到了是模擬瀏覽器,所以需要用selenium。
2.2 Selenium的基本使用
selenium的使用會(huì)調(diào)用chrome,所以當(dāng)彈出頁面后需要在設(shè)置中將默認(rèn)搜索引擎改成百度。
獲取京東網(wǎng)站中的京東秒殺源碼
# 導(dǎo)入selenium
from selenium import webdriver# 創(chuàng)建瀏覽器對(duì)象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)# 訪問網(wǎng)站
url = 'https://www.jd.com'browser.get(url)# page_source獲取網(wǎng)頁源碼
content = browser.page_source
print(content)
在控制臺(tái)搜索J_seckill可以看到京東秒殺模塊。
2.3 Selenium的元素定位
from selenium import webdriverurl = 'https://www.jd.com'path = 'chromedriver.exe'
browser = webdriver.Chrome(path)# 元素定位
# 根據(jù)id找到對(duì)象
id = browser.find_element_by_id('su')
print(id)
# 根據(jù)標(biāo)簽屬性的屬性值
name = browser.find_element_by_name('wd')
print(name)
# 根據(jù)xpath語句來獲取對(duì)象
xpath = browser.find_element_by_xpath('//input[@id="su"]')
print(xpath)
# 根據(jù)標(biāo)簽的名字獲取對(duì)象
button = browser.find_element_by_tag_name('input')
print(button)
# 使用bs4的語法獲取對(duì)象
bs = browser.find_element_by_css_selector('#su')
print(bs)
# a標(biāo)簽
text = browser.find_element_by_link_text('新聞')
print(text)
2.4 Selenium獲取元素信息
以百度首頁為例
from selenium import webdriverpath = 'chromedriver.exe'
browser = webdriver.Chrome(path)url = 'http://www.baidu.com'
browser.get(url) # 訪問網(wǎng)站# 根據(jù)id內(nèi)容獲取標(biāo)簽對(duì)象
input = browser.find_element_by_id('su') # 獲取標(biāo)簽的屬性
print(input.get_attribute('class'))# 獲取標(biāo)簽的名字
print(input.tag_name)# 獲取元素文本
a = browser.find_element_by_link_text('新聞')
print(a.text)
2.5 Selenium的交互
模擬點(diǎn)擊行為,進(jìn)而操作瀏覽器
from selenium import webdriver# 創(chuàng)建瀏覽器對(duì)象
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)# url
url = 'https://www.baidu.com'
browser.get(url)import time
# 睡眠兩秒 防止操作過快被檢測出來時(shí)爬蟲,被封ip
time.sleep(2)# 獲取文本框的對(duì)象
input = browser.find_element_by_id('kw')# 在文本框中輸入周杰倫
input.send_keys('周杰倫')time.sleep(2)# 獲取百度一下的按鈕
button = browser.find_element_by_id('su')# 點(diǎn)擊按鈕
button.click()time.sleep(2)# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js.bottom)time.sleep(2)# 獲取下一頁的按鈕
next = browser.find_element_by_xpath('//a[@class="n"]')# 點(diǎn)擊下一頁
next.click()time.sleep(2)# 回到上一頁
browser.back()time.sleep(2)# 再回去
browser.forward()time.sleep(3)browser.quit()
Phantomjs
1.初識(shí)Phantomjs
1.1什么是Phantomjs
Phantomjs是一個(gè)無界面瀏覽器,支持頁面元素查找,js的執(zhí)行等,由于不進(jìn)行css和gui渲染,運(yùn)行效率比真實(shí)的瀏覽器快的多。
1.2如何使用Phantomjs
和使用Chrome類似,
即獲取PhantomJs.exe的文件路徑,
browser = webdriver.PhantomJs(path)
,
browser.get(url)
可以使用屏幕快照進(jìn)行驗(yàn)證瀏覽器是否正常運(yùn)行。
2. Phantomjs的使用
以百度搜索關(guān)鍵詞為例
from selenium import webdriverurl = 'https://www.baidu.com'path = 'phantomjs.exe'browser = webdriver.PhantomJS(path)browser.get(url)browser.save_screenshot('baidu.png') # 保存快照import time# 獲取百度搜索的搜索文本框
input = browser.find_element_by_id('kw')
input.send_keys('昆凌') # 輸入關(guān)鍵字‘昆凌’time.sleep(2) # 睡眠兩秒browser.save_screenshot('kunling.png')
注:(1)phantonmjs因?yàn)槟承┰蛞呀?jīng)停止更新,所以新版本的selenium不支持phantomjs,這里使用的是selenium3.5.0
所以現(xiàn)在都是使用handless
(2)當(dāng)selenium更新到3.10時(shí),輸出窗口會(huì)出現(xiàn)“ UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ’ ” 警告,不過不影響運(yùn)行結(jié)果。
Chrome handless
1.初識(shí)Chrome handless
1.1什么是Chrome handless
Chrome-headless 模式, Google 針對(duì) Chrome 瀏覽器 59版 新增加的一種模式,可以讓你不打開UI界面的情況下 使用 Chrome 瀏覽器,所以運(yùn)行效果與 Chrome 保持完美一致。
1.2使用需求
(1).系統(tǒng)要求:
Chrome
? Unix\Linux 系統(tǒng)需要 chrome >= 59
? Windows 系統(tǒng)需要 chrome >= 60
Python3.6
? Selenium==3.4.*
? ChromeDriver==2.31
(2).配置:
from selenium.webdriver.chrome.options
import Optionsfrom selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('‐‐headless') chrome_options.add_argument('‐‐disable‐gpu') path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' chrome_options.binary_location = path browser = webdriver.Chrome(chrome_options=chrome_options) browser.get('http://www.baidu.com/')
2. Chrome handless的使用
# 無界面的瀏覽器調(diào)用方法
from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 封裝的handless
def share_browser():chrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('--window-size=1920,1080') # 設(shè)置窗口的大小driver = webdriver.Chrome(options=chrome_options)# path 是Chrome瀏覽器的文件路徑path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'chrome_options.binary_location = pathbrowser = webdriver.Chrome(chrome_options=chrome_options)return browserbrowser = share_browser()url = 'https://www.baidu.com'browser.get(url)browser.save_screenshot('百度.png')
注:未解決的問題:無界面瀏覽器還是出現(xiàn)了界面(現(xiàn)已解決,原因是selenium版本太低,需更新到3.10)