網(wǎng)站首頁 編程語言 正文
無界面的谷歌瀏覽器,之前我們的自動化測試工具是phantomjs,但是這個工具不在進行維護了,所以我們可以使用這個谷歌的工具了。
Vitaly Slobodin是廣為使用的無頭網(wǎng)站測試框架Phantom.js的維護者(Maintainer),現(xiàn)在他決定放棄這一職責。Slobodin在Google論壇上發(fā)帖表示,鑒于Chrome 59推出了無頭瀏覽特性,他認為沒有理由再繼續(xù)維護Phantom.js??梢钥吹某鑫覀儸F(xiàn)在其實已經(jīng)沒必要再去學習Phantom了,她的作者都放棄了他,項目都已經(jīng)封存。
這個東西主要是用在動態(tài)頁面的時候,比如我們爬取的時候經(jīng)常會發(fā)現(xiàn)chrom打開能看到100張圖片,爬蟲爬下來卻只有20張,這是因為使用了動態(tài)加載技術,還有一些頁面使用ajax動態(tài)刷新,這時候能不能爬取呢,當然可以,分析JS文件,構(gòu)建請求,發(fā)送請求得到JSON回復信息,拿到資源的地址,但是這相當于我們將前端的工作給做了,很煩,所以我們有的時候用無頭瀏覽器直接相當于我們操作瀏覽器,很nice。缺點是速度慢,優(yōu)點是簡單。
一、selenium介紹
selenium:是python的一個第三方庫,對外提供的接口可以操作你的瀏覽器,讓瀏覽器完成自動化操作
1.1、安裝selenium
pip install selenium
1.2、安裝chromdriver
要安裝符合自己瀏覽器版本的driver,谷歌瀏覽器的版本可以從設置->關于chrom看到
http://npm.taobao.org/mirrors/chromedriver/
1.3、測試進行百度的搜索
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
chrome_options = Options()
# 以無頭模式啟動,我們?yōu)榱丝葱Ч冉o注釋掉
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
path = r'C:\Users\LoveSS\Desktop\pytest\chromedriver.exe'
service = Service(executable_path=path)
driver = webdriver.Chrome(service=service, options=chrome_options)
url = 'http://www.baidu.com/'
# 打開這個網(wǎng)址
driver.get(url=url)
# 延時0.5s
driver.implicitly_wait(0.5)
# 獲得輸入條
search_input = driver.find_element(By.ID, "kw")
# 獲得搜索按鈕
search_button = driver.find_element(By.ID, "su")
# 再輸入框輸入
search_input.send_keys("Selenium")
# 搜索按鈕點擊
search_button.click()
time.sleep(10)
# 退出
driver.quit()
我們發(fā)現(xiàn)可以進行搜索。
二、selenium操作
這個網(wǎng)址有著官方文檔https://www.selenium.dev/。想要詳細學習可以從官方文檔入手
2.1、導航
# 打開網(wǎng)址
driver.get("https://selenium.dev")
# 后退
driver.back()
# 前進
driver.forward()
# 刷新
driver.refresh()
2.2、alert
2.2.1、alert警告框
警告框只有確認按鍵
# 單擊鏈接以激活警報
driver.find_element(By.LINK_TEXT, "See an example alert").click()
# 等待警報顯示,并將其存儲在變量中
alert = wait.until(expected_conditions.alert_is_present())
# 將警報文本存儲在變量中
text = alert.text
# 按OK按鈕
alert.accept()
2.2.2、confirm確認框
可以確認可以取消
# 單擊鏈接以激活警報
driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
# 等待警報顯示
wait.until(expected_conditions.alert_is_present())
# 將警報存儲在變量中以供重用
alert = driver.switch_to.alert
# 存儲警告信息
text = alert.text
# 取消按鍵
alert.dismiss()
2.2.3、Prompt 提示框
提示框是有輸入框和確認按鍵的
# 單擊鏈接以激活警報
driver.find_element(By.LINK_TEXT, "See a sample prompt").click()
# 等待警報顯示
wait.until(expected_conditions.alert_is_present())
# 將警報存儲在變量中以供重用
alert = Alert(driver)
# 填入你的信息
alert.send_keys("Selenium")
# 點擊OK按鍵
alert.accept()
2.3、Cookie
2.3.1、添加cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.example.com")
# 將cookie添加到當前瀏覽器上下文中
driver.add_cookie({"name": "key", "value": "value"})
2.3.2、獲取命名的cookie
# 獲取名為'foo'的cookie
print(driver.get_cookie("foo"))
2.3.3、獲取全部cookies
driver.add_cookie({"name": "test1", "value": "cookie1"})
driver.add_cookie({"name": "test2", "value": "cookie2"})
# 獲得所有cookies
print(driver.get_cookies())
2.3.4、刪除cookie
# 刪除名為'test1'的cookie
driver.delete_cookie("test1")
2.3.5、刪除所有cookie
# 刪除所有cookie
driver.delete_all_cookies()
2.3.6、lax
當您將cookie sameSite屬性設置為 Lax, cookie將與第三方網(wǎng)站發(fā)起的GET請求一起發(fā)送.
driver.get("http://www.example.com")
# 使用sameSite將cookie添加到當前瀏覽器上下文中'Strict' (or) 'Lax'
driver.add_cookie({"name": "foo", "value": "value", 'sameSite': 'Strict'})
driver.add_cookie({"name": "foo1", "value": "value", 'sameSite': 'Lax'})
cookie1 = driver.get_cookie('foo')
cookie2 = driver.get_cookie('foo1')
print(cookie1)
print(cookie2)
2.4、點擊
driver.find_element(By.ID, "su").click()
2.4、發(fā)送鍵位
driver.find_element(By.ID, "su").send_keys("webdriver" + Keys.ENTER)
2.5、清除
driver.find_element(By.ID, "su").clear()
2.6、查詢元素
我們一共有這么幾種查詢方式
class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
res = driver.find_element(By.ID, "su")
print(res.text)
原文鏈接:https://blog.csdn.net/weixin_43903639/article/details/122723390
相關推薦
- 2022-04-06 教你用Python尋找重復文件并刪除的腳本寫法_python
- 2022-11-30 Git基礎學習之分支基本操作詳解_相關技巧
- 2022-01-17 element日期時間選擇器提交時間格式不準確
- 2022-05-12 Kotlin List的創(chuàng)建與取值 getOrElse getOrNull
- 2022-05-23 Docker容器鏡像相關命令基本介紹與使用_docker
- 2022-10-26 Pytorch中torch.stack()函數(shù)的深入解析_python
- 2022-06-23 基于Flutter制作一個心碎動畫特效_Android
- 2022-02-12 asp.net 報錯 “/”應用程序中的服務器錯誤。 String or binary data w
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支