selenium使用
一 環(huán)境搭建
下載selenium
pip install selenium
下載瀏覽器驅(qū)動(dòng)(以Edge為例)
在設(shè)置中找到當(dāng)前Edge版本號(hào),在[Microsoft Edge WebDriver - Microsoft Edge Developer](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)中下載對(duì)應(yīng)版本驅(qū)動(dòng)。
將下載的壓縮包解壓后得到驅(qū)動(dòng)的exe文件,將該文件拖到python安裝文件夾的script文件夾下。
在瀏覽器中的使用:
示例
from selenium.webdriver import Edge # 引入
web = Edge() # 創(chuàng)建瀏覽器對(duì)象
web.get("https://www.baidu.com") # 執(zhí)行操作,打開(kāi)百度
二 selenium的簡(jiǎn)單使用
1. 引入引擎和需要的類(lèi)
2. 創(chuàng)建瀏覽器對(duì)象
3. 打開(kāi)網(wǎng)頁(yè),可以選中元素操縱和獲取信息
示例
from selenium.webdriver import Edge
from selenium.webdriver.common.keys import Keys
import time
# 創(chuàng)建瀏覽器對(duì)象
web = Edge()
# 打開(kāi)一個(gè)網(wǎng)頁(yè)
web.get("https://www.lagou.com")
# 可以使用xpath 類(lèi)名 樣式查找element
web.find_element('xpath', '//*[@id="changeCityBox"]/p[1]/a').click()
# 由于加載需要一點(diǎn)時(shí)間,所以需要等待
time.sleep(1)
web.find_element('xpath', '//*[@id="search_input"]').send_keys('python', Keys.ENTER)
time.sleep(1)
web.find_element('xpath', '//*[@id="jobList"]/div[1]/div[1]/div[1]/div[1]/div[1]/a').click()
time.sleep(1)
# 切換selenium操作的頁(yè)面
web.switch_to.window(web.window_handles[-1])
job_detail = web.find_element('xpath', '//*[@id="job_detail"]/dd[2]/div').text
print(job_detail)
# 關(guān)閉當(dāng)前頁(yè)面
web.close()
# 切回原窗口
web.switch_to.window(web.window_handles[0])
注意iframe的存在:
# 如果源碼中有iframe的話,是沒(méi)有辦法直接拿到數(shù)據(jù)的,必須先切換到iframe中再操作
frame = web.find_element('xpath', '//*[@id="g_iframe"]')
web.switch_to.frame(frame)
注意操作select:
1. 下拉列表應(yīng)當(dāng)先引用下拉列表的支持
from selenium.webdriver.support.select import Select
2. 拿到select元素并進(jìn)行包裝
sel_el = web.find_element_by_xpath('//*[@id="OptionDate"]')
# 對(duì)元素進(jìn)行包裝, 包裝成下拉菜單
sel = Select(sel_el)
? 3. 使用條件切換選項(xiàng),拿到每個(gè)選項(xiàng)中的不同數(shù)據(jù)
for i in range(len(sel.options)): # i就是每一個(gè)下拉框選項(xiàng)的索引位置
sel.select_by_index(i) # 按照索引進(jìn)行切換
time.sleep(2)
table = web.find_element_by_xpath('//*[@id="TableList"]/table')
print(table.text) # 打印所有文本信息
print("===================================")
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794089.html
三? 無(wú)頭瀏覽器
可以通過(guò)參數(shù)配置的方式來(lái)不打開(kāi)瀏覽器也能拿到數(shù)據(jù)
如果有被iframe包裹的話需要切換到iframe里面才能拿到數(shù)據(jù)
from selenium.webdriver import Edge
from selenium.webdriver.edge.options import Options#引入設(shè)置項(xiàng)
import time
# 準(zhǔn)備好參數(shù)配置
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")
web = Edge(options=opt) # 把參數(shù)配置設(shè)置到瀏覽器中
web.get("https://music.163.com/#/song?id=1430620302")
time.sleep(2)
iframe = web.find_element('xpath', '//*[@id="g_iframe"]')
web.switch_to.frame(iframe)# 切換到frame中拿取
# 如何拿到頁(yè)面代碼Elements(經(jīng)過(guò)數(shù)據(jù)加載以及js執(zhí)行之后的結(jié)果的html內(nèi)容)
print(web.page_source)
?
Options基礎(chǔ)配置
1. user-agent
2. 代理
3. 不加載圖片和css
opt = Options()
# 無(wú)頭瀏覽器
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")
# 不加載圖片和css
prefs = {"profile.managed_default_content_settings.images": 2,
'permissions.default.stylesheet': 2}
opt.add_experimental_option('prefs', prefs)
# 設(shè)置user-Agent
opt.add_argument('user-agent=' + UserAgent().random) # 初始化一個(gè)別的User-Agent
# IP池
proxy_arr = [
'--proxy-server=http://111.3.118.247:30001',
'--proxy-server=http://183.247.211.50:30001',
'--proxy-server=http://122.9.101.6:8888',
]
proxy = random.choice(proxy_arr) # 隨機(jī)選擇一個(gè)代理
print(proxy) # 如果某個(gè)代理訪問(wèn)失敗,可從proxy_arr中去除
opt.add_argument(proxy) # 添加代理
# 添加配置
driver = Edge(options=opt)
四 其他實(shí)用操作
如果你的程序被識(shí)別到了怎么辦?
1.chrome的版本號(hào)如果小于88? 在你啟動(dòng)瀏覽器的時(shí)候(此時(shí)沒(méi)有加載任何網(wǎng)頁(yè)內(nèi)容), 向頁(yè)面嵌入js代碼. 去掉webdriver
web = Chrome()
web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
navigator.webdriver = undefined
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
web.get(xxxxxxx)
2.chrome的版本大于等于88
option = Options()
# option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')
web操作:
1. 移動(dòng)到某一位置點(diǎn)擊:
from selenium.webdriver import Edge
from selenium.webdriver.common.action_chains import ActionChains
web = Edge()
verify_img_element = web.find_element_by_xpath('//*[@id="J-loginImg"]')
ActionChains(web).move_to_element_with_offset(verify_img_element, x, y).click().perform() # perform提交
2. 拖拽:
btn = web.find_element_by_xpath('//*[@id="nc_1_n1z"]')
ActionChains(web).drag_and_drop_by_offset(btn, 300, 0).perform()
感謝每一個(gè)認(rèn)真閱讀我文章的人,禮尚往來(lái)總是要有的,雖然不是什么很值錢(qián)的東西,如果你用得到的話可以直接拿走:
這些資料,對(duì)于【軟件測(cè)試】的朋友來(lái)說(shuō)應(yīng)該是最全面最完整的備戰(zhàn)倉(cāng)庫(kù),這個(gè)倉(cāng)庫(kù)也陪伴上萬(wàn)個(gè)測(cè)試工程師們走過(guò)最艱難的路程,希望也能幫助到你!有需要的小伙伴可以點(diǎn)擊下方小卡片領(lǐng)取?
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794089.html
?
到了這里,關(guān)于最實(shí)用的selenium使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!