(6)python爬蟲--selenium

文章目錄

  • 前言
    • 一、初識selenium
    • 二、安裝selenium
      • 2.1 查看chrome版本并禁止chrome自動更新
        • 2.1.1 查看chrome版本
        • 2.1.2 禁止chrome更新自動更新
      • 2.2 安裝對應版本的驅動程序
      • 2.3安裝selenium包
    • 三、selenium關于瀏覽器的使用
      • 3.1 創建瀏覽器、設置、打開
      • 3.2 打開/關閉網頁及瀏覽器
      • 3.3 瀏覽器的最大/小化
      • 3.4 瀏覽器打開位置、尺寸
      • 3.5 瀏覽器截圖、網頁刷新
    • 四、selenium關于元素的使用
      • 4.1 元素定位
      • 4.2 元素交互操作
      • 4.3 元素八種定位方式
        • 4.3.1 元素定位-ID
        • 4.3.2 元素定位-NAME
        • 4.3.3 元素定位-CLASS_NAME
        • 4.3.4 元素定位-TAG_NAME
        • 4.3.5 元素定位-LINK_TEXT
        • 4.3.6 元素定位-PARTIAL_LINK_TEXT
        • 4.3.7 元素定位-CSS_SELECTOR
        • 4.3.8 元素定位-XPATH
      • 4.4 元素定位的隱式等待
    • 案例一: 獲取表單元素并修改
    • 案例二:重復填寫表單
    • 五、三種瀏覽器獲取框(警告框、確認框、提示框)
      • 5.1 警告框
      • 5.2 確認框
      • 5.3 提示框
    • 六、 iframe嵌套網頁內部元素獲取
    • 七、獲取元素以及判斷可見性
    • 八、 網頁前進、后退
  • 總結


前言

在當今快速發展的互聯網時代,自動化測試和網絡爬蟲技術已經成為開發者和測試工程師不可或缺的技能。Python 作為一門簡潔、高效的編程語言,憑借其豐富的生態庫和易用性,成為了自動化測試和爬蟲開發的首選工具之一。而 Selenium,作為一款強大的瀏覽器自動化工具,不僅能夠模擬用戶操作,還能處理動態加載的網頁內容,為開發者提供了極大的便利。

無論是進行 Web 應用的自動化測試,還是從復雜的網站中抓取數據,Selenium 都能勝任。它支持多種瀏覽器(如 Chrome、Firefox、Edge 等),并提供了靈活的 API,使得開發者可以輕松實現頁面元素的定位、交互和驗證。此外,結合 Python 的簡潔語法,Selenium 讓自動化任務的編寫變得更加高效和直觀。

本文將帶你深入探索 Python 與 Selenium 的結合使用,從基礎的環境搭建到高級的實戰技巧,幫助你快速掌握這一強大工具。無論你是剛入門的新手,還是希望進一步提升技能的開發者,相信本文都能為你提供有價值的參考和啟發。


一、初識selenium

  1. 自動化測試:快速完成重復性網頁測試,提高效率
  2. 處理動態內容:完美支持JavaScript渲染的現代網頁
  3. 跨瀏覽器支持:Chrome/Firefox/Edge等主流瀏覽器都兼容
  4. Python絕配:配合Requests/BeautifulSoup等庫更強大
  5. 數據采集:解決普通爬蟲無法處理的交互式網站
  6. 就業優勢:Web自動化的必備技能,提升職場競爭力

簡而言之:Selenium讓網頁自動化變得簡單高效!


二、安裝selenium

注意: 這里所有的舉例都采用chrome瀏覽器。對于其他瀏覽器大致步驟一致。

2.1 查看chrome版本并禁止chrome自動更新

2.1.1 查看chrome版本

步驟: 設置 ? ? 關于chrome ? ? 查看版本

在這里插入圖片描述

2.1.2 禁止chrome更新自動更新

chrome自動更新會導致chrome驅動出現失效問題,因而需要禁止自動更新。

詳細步驟:

Win+ R 打開輸入services.msc
在這里插入圖片描述
找到所有關于Google更新的相關程序,雙擊打開改為禁用即可

在這里插入圖片描述
重新打開chrome 出現該效果即表示成功

在這里插入圖片描述

2.2 安裝對應版本的驅動程序

網址:
https://storage.googleapis.com/chrome-for-testing-public/你的版本號/win64/chromedriver-win64.zip

安裝好對應的zip包之后,將其解壓,復制一份chromedriver.exe程序
在這里插入圖片描述

2.3安裝selenium包

安裝方式:通過之前安裝(lxml,jsonpath等)操作來安裝selenium,這里不再介紹。


三、selenium關于瀏覽器的使用

3.1 創建瀏覽器、設置、打開

注意:第一步先將復制的文件粘貼到對應的項目下面

測試:

# 用于操作瀏覽器
# from selenium import webdriver
# 用于設置谷歌瀏覽器
# from selenium.webdriver.chrome.options import Options
# 用于管理谷歌驅動
# from selenium.webdriver.chrome.service import Service# (1)導包
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service# 創建瀏覽器對象
options = Options()
# 禁用沙盒模式(增加兼容性)--- 如果沒有出現秒閃退問題,可以不填入
options.add_argument('--no-sandbox')
# 保持瀏覽器打開狀態(默認執行完之后會自動關閉)
options.add_experimental_option("detach", True)
# 創建并啟動瀏覽器
browse = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)

3.2 打開/關閉網頁及瀏覽器

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time# 封裝
def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()
# 打開指定的網址
browser.get('https://www.baidu.com')
# 打印源碼
print(browser.page_source)
time.sleep(3)
# 關閉當前的標簽頁
browser.close()
# 退出瀏覽器并釋放驅動
browser.quit()

3.3 瀏覽器的最大/小化

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Servicedef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()browser.get('https://www.baidu.com')
time.sleep(2)
# 瀏覽器最大化
browser.maximize_window()
time.sleep(2)
# 瀏覽器最小化
browser.minimize_window()
time.sleep(2)
# 重新返回最大化
browser.maximize_window()
time.sleep(2)
# 關閉瀏覽器
browser.quit()

3.4 瀏覽器打開位置、尺寸

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Servicedef setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()# 單位均為像素
# 設置瀏覽器打開的位置(相對于左上角)
browser.set_window_position(100,100)
# 設置寬高px
browser.set_window_size(800,600)
# 關閉瀏覽器
browser.quit()

3.5 瀏覽器截圖、網頁刷新

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import time
def setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()
browser.get('https://www.baidu.com')
# 瀏覽器截圖(盡量保存為png的格式)
browser.get_screenshot_as_file('baidu.png')
time.sleep(3)
# 刷新當前頁
browser.refresh()
time.sleep(3)
# 關閉
browser.quit()

四、selenium關于元素的使用

4.1 元素定位

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
def setup():options = Options()options.add_experimental_option('detach', True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)return browserbrowser = setup()
browser.get('https://www.baidu.com')
# 使用元素定位需要先導入對應的包
# from selenium.webdriver.common.by import By# 例如根據ID查找百度首頁的輸入框
# <input id="kw" name="wd"># find_element用來查找一個元素時使用
# 找不到時會直接報錯
# 類似于根據id查找的,使用該方法即可,id是元素的唯一標識
input = browser.find_element(By.ID, 'kw')
# 獲取class
print(input.get_attribute('class'))
# 獲取標簽名
print(input.tag_name)# find_elements用來查找多個元素時使用
# 返回的是列表,找不到時不會報錯會返回一個空列表
inputs = browser.find_elements(By.ID, 'kw')
print(inputs)# 提示一下:也可以在瀏覽器的控制臺輸入
# document.getElementById('kw') 來先查找一下# 關閉瀏覽器
browser.quit()

4.2 元素交互操作

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option('detach',True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)return browserbrowser = setup()# 獲取指定的網址
browser.get('https://www.baidu.com')
input = browser.find_element(By.ID,'kw')
# 元素輸入
input.send_keys('fasgfagasgasg')
time.sleep(3)
# 元素清空
input.clear()
time.sleep(2)
# 元素再次輸入
input.send_keys('古詩文')
time.sleep(2)
# 獲取搜索按鈕
button = browser.find_element(By.ID,'su')
# 調用按鈕的點擊方法
button.click()
time.sleep(2)
# 關閉瀏覽器
browser.quit()

4.3 元素八種定位方式

4.3.1 元素定位-ID

通過id定位元素結果基本上就是我們想要的元素,準確性比較高。

input = browser.find_element(By.ID, 'kw')
4.3.2 元素定位-NAME

通過name屬性來獲取元素,也是比較精準的。

input = browser.find_element(By.ID, 'kw')
4.3.3 元素定位-CLASS_NAME

使用class屬性來查找元素,容易出現多個元素,因而往往需要用切片處理方式

注意:如果class屬性值中包含空格是無法正常獲取的

element = browser.find_element(By.CLASS_NAME, 'bg s_btn')
4.3.4 元素定位-TAG_NAME

通過tag標簽來查找元素,缺點是獲取的元素比較多,需要切片找到需要的元素

element = browser.find_element(By.TAG_NAME, 'input')
4.3.5 元素定位-LINK_TEXT

只標識a標簽中的鏈接文字,根據鏈接文字查找元素

element = browser.find_element(By.LINK_TEXT, '新聞')
4.3.6 元素定位-PARTIAL_LINK_TEXT

與LINK_TEXT區別是,雖然都是通過鏈接文本獲取元素,但是PARTIAL_LINK_TEXT是在LINK_TEXT的基礎上增加了模糊匹配

element = browser.find_element(By.PARTIAL_LINK_TEXT, '地')
4.3.7 元素定位-CSS_SELECTOR
# 通過id等位
element = browser.find_element(By.CSS_SELECTOR, '#kw')
# 通過class定位
element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')
# 不加修飾符(輸入標簽名)
element = browser.find_element(By.CSS_SELECTOR, 'input')
# 通過任意類型定位
# 精確匹配
element = browser.find_element(By.CSS_SELECTOR, '[value="百度一下"]')
# 模糊匹配
element = browser.find_element(By.CSS_SELECTOR, '[value*="百度"]')
# 匹配開頭
element = browser.find_element(By.CSS_SELECTOR, '[value^="百"]')
# 匹配結尾
element = browser.find_element(By.CSS_SELECTOR, '[value$="一下"]')

以上都屬于理論定位法,可以直接通過谷歌瀏覽器復制唯一的selector來確定元素

在這里插入圖片描述

element = browser.find_element(By.CSS_SELECTOR, '#su')
4.3.8 元素定位-XPATH

打開谷歌瀏覽器,直接復制該元素的XPATH即可,與上述操作基本一致

在這里插入圖片描述
當一個無法獲取到指定元素的時候,采用第二個完整xpath寫法

# Xpath
element = browser.find_element(By.XPATH, '//*[@id="su"]')
# 完成Xpath
element = browser.find_element(By.XPATH, '/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input')

4.4 元素定位的隱式等待

隱式等待的作用是為了防止,當我們進入到一個頁面時,該元素未第一時間加載出來,到底找不到元素而引發的報錯。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'),options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'本地文件的絕對路徑')
# time.sleep(4)
div = browser.find_element(By.CSS_SELECTOR,'#delayed-element')
print(div)

對應的html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>隱式等待測試頁面</title>
</head>
<body><h1>隱式等待測試</h1><div id="immediate-element">這個元素是立即存在的</div><script>// 5秒后動態添加一個元素setTimeout(function() {let newElement = document.createElement("div");newElement.id = "delayed-element";newElement.textContent = "這個元素是5秒后出現的";document.body.appendChild(newElement);}, 3000);</script>
</body>
</html>

案例一: 獲取表單元素并修改

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'HTML文件絕對路徑')# 單選
browser.find_element(By.XPATH, '/html/body/form/div[1]/label[2]').click()# 多選
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[1]').click()
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[2]').click()
browser.find_element(By.XPATH, '/html/body/form/div[2]/label[3]').click()# 下拉
browser.find_element(By.XPATH, '/html/body/form/div[3]/select/option[2]').click()# 日期框
browser.find_element(By.XPATH, '/html/body/form/div[4]/div/input').send_keys('20210912')# 上傳文件
browser.find_element(By.XPATH, '/html/body/form/div[5]/input').send_keys(r'D:\Python-learning\pythonProject\02-homework\12-test\baidu.png')# 提交
browser.find_element(By.XPATH, '/html/body/form/button').click()

對應的HTML文件

test.html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表單示例</title><style>body {font-family: Arial, sans-serif;max-width: 600px;margin: 0 auto;padding: 20px;}.form-group {margin-bottom: 20px;padding: 15px;border: 1px solid #ddd;border-radius: 5px;}.form-group h3 {margin-top: 0;margin-bottom: 15px;}.rating {display: flex;flex-direction: column;gap: 10px;}.rating-item {display: flex;align-items: center;}.rating-label {width: 100px;}.date-input {display: flex;align-items: center;}.date-input input {width: 120px;margin-right: 10px;}.date-format {color: #666;}</style>
</head>
<body><form action="ok.html" method="post"><!-- 單選框 --><div class="form-group"><h3>單選框</h3><label><input type="radio" name="language" value="Python" checked> Python</label><br><label><input type="radio" name="language" value="Java"> Java</label><br><label><input type="radio" name="language" value="C++"> C++</label></div><!-- 多選框 --><div class="form-group"><h3>多選框</h3><label><input type="checkbox" name="device" value="手機"> 手機</label><br><label><input type="checkbox" name="device" value="電腦"> 電腦</label><br><label><input type="checkbox" name="device" value="網頁"> 網頁</label></div><!-- 下拉菜單 --><div class="form-group"><h3>下拉</h3><select name="city"><option value="北京" selected>北京</option><option value="上海">上海</option><option value="廣州">廣州</option></select></div><!-- 日期選擇 --><div class="form-group"><h3>日期</h3><div class="date-input"><input type="text" id="dateInput" placeholder="輸入年月日如20240521" maxlength="8"><span id="dateDisplay" class="date-format">年 / 月 / 日</span></div><input type="hidden" id="formattedDate" name="date"></div><!-- 附件上傳 --><div class="form-group"><h3>附件</h3><input type="file" name="attachment"></div><!-- 提交按鈕 --><button type="submit">提交</button></form><script>document.getElementById('dateInput').addEventListener('input', function(e) {let value = e.target.value.replace(/\D/g, ''); // 移除非數字字符if (value.length > 8) {value = value.substring(0, 8); // 限制最大長度為8}e.target.value = value; // 更新輸入框值if (value.length === 8) {// 格式化為YYYY/MM/DDconst year = value.substring(0, 4);const month = value.substring(4, 6);const day = value.substring(6, 8);// 驗證月份和日期是否有效const validMonth = parseInt(month) >= 1 && parseInt(month) <= 12;const validDay = parseInt(day) >= 1 && parseInt(day) <= 31;if (validMonth && validDay) {const formattedDate = `${year}/年${month}/月${day}`;document.getElementById('dateDisplay').textContent = formattedDate;document.getElementById('formattedDate').value = formattedDate;} else {document.getElementById('dateDisplay').textContent = '日期無效';document.getElementById('formattedDate').value = '';}} else {document.getElementById('dateDisplay').textContent = '年 / 月 / 日';document.getElementById('formattedDate').value = '';}});</script>
</body>
</html>

ok.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>提交成功!!!</h1>
<a href="./test.html" target="_blank">跳轉到填寫頁面</a>
</body>
</html>

案例二:重復填寫表單

提示:需要使用到句柄

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Bydef setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get(r'HTML文件絕對路徑')# 循環重復
for x in range(2):time.sleep(2)# 單選browser.find_element(By.XPATH, '/html/body/form/div[1]/label[2]').click()# 多選browser.find_element(By.XPATH, '/html/body/form/div[2]/label[1]').click()browser.find_element(By.XPATH, '/html/body/form/div[2]/label[2]').click()browser.find_element(By.XPATH, '/html/body/form/div[2]/label[3]').click()# 下拉browser.find_element(By.XPATH, '/html/body/form/div[3]/select/option[2]').click()# 日期框browser.find_element(By.XPATH, '/html/body/form/div[4]/div/input').send_keys('20210912')# 上傳文件browser.find_element(By.XPATH, '/html/body/form/div[5]/input').send_keys(r'上傳文件絕對路徑')time.sleep(2)# 提交browser.find_element(By.XPATH, '/html/body/form/button').click()# 點擊返回browser.find_element(By.XPATH, '/html/body/a').click()# 打開了新頁面之后,我們要獲取到全部的句柄(也就是所有的標簽頁)handles = browser.window_handles# print(handles)# 關閉之前的標簽頁browser.close()# 通過句柄切換到新的標簽頁browser.switch_to.window(handles[1])# 獲取當前頁句柄# print(browser.current_window_handle)

五、三種瀏覽器獲取框(警告框、確認框、提示框)

???測試網址

5.1 警告框

示例代碼:

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/alertTest.htm')# 清空輸入框的默認值
browser.find_element(By.XPATH,"/html/body/form/input[1]").clear()
time.sleep(2)# 修改輸入框的值
browser.find_element(By.XPATH,"/html/body/form/input[1]").send_keys('大家一起學Python')# 點擊按鈕
browser.find_element(By.XPATH,"/html/body/form/input[2]").click()# 獲取彈窗的內容
print(browser.switch_to.alert.text)time.sleep(2)
# 點擊確認按鈕
browser.switch_to.alert.accept()

5.2 確認框

???測試網址

5.3 提示框

示例代碼

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/confirmTest.htm')# 點擊按鈕browser.find_element(By.XPATH,'/html/body/form/input[1]').click()time.sleep(2)
# 點擊確認按鈕
# browser.switch_to.alert.accept()# 點擊取消按鈕
browser.switch_to.alert.dismiss()

???測試網址

示例代碼:

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/promptTest.htm')# 點擊按鈕
browser.find_element(By.XPATH,'/html/body/form/input[1]').click()time.sleep(2)# 輸入內容
browser.switch_to.alert.send_keys("123456")
time.sleep(2)# 點擊確認按鈕
browser.switch_to.alert.accept()

六、 iframe嵌套網頁內部元素獲取

???測試網址

示例代碼:

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://sahitest.com/demo/iframesTest.htm')# iframe嵌套網頁 里面的元素 不能夠直接獲取 因為不在同一個框架里面# 1. 獲取iframe元素
iframe = browser.find_element(By.XPATH, '/html/body/iframe')# 2. 進入到iframe里面
browser.switch_to.frame(iframe)# 獲取元素并點擊
browser.find_element(By.XPATH, '/html/body/table/tbody/tr/td[1]/a[1]').click()
time.sleep(2)
# 此時如果想要獲取原頁面中的元素就必須退出iframe
browser.switch_to.default_content()time.sleep(2)
# 獲取原頁面元素
browser.find_element(By.XPATH, '/html/body/input[2]').click()

七、獲取元素以及判斷可見性

selenium提供了一些基礎的爬蟲方式。

示例代碼:

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://content-static.cctvnews.cctv.com/snow-book/video.html?item_id=932400080038356852')# 獲取元素內容 text
content = browser.find_element(By.XPATH,"/html/body/div/div/div/div[2]/div[1]/div[1]/div/div[5]/div/article/p[1]").text
print(content)# 獲取元素可見性
# 簡單來說 就是判斷這個元素我們能否在頁面上看見
flag = browser.find_element(By.XPATH,"/html/head/meta[2]").is_displayed()
print(flag)

八、 網頁前進、后退

示例代碼:

def setup():options = Options()options.add_experimental_option("detach", True)browser = webdriver.Chrome(service=Service('chromedriver.exe'), options=options)# 設置性代碼,只要獲取元素都會先等待10s 10s之后才會出現異常# 并且只需要設置一次即可browser.implicitly_wait(10)return browserbrowser = setup()browser.get('https://www.baidu.com')input = browser.find_element(By.ID, 'kw')
input.send_keys('selenium')button = browser.find_element(By.ID, 'su')
button.click()time.sleep(3)
# 網頁后退
browser.back()
time.sleep(2)
# 網頁前進
browser.forward()
time.sleep(2)
# 關閉
browser.quit()

總結

通過本文的學習,我們系統地了解了 Python 與 Selenium 的結合使用,涵蓋了從基礎配置到實際應用的多個方面。Selenium 不僅簡化了 Web 自動化測試的流程,還為數據采集和動態網頁交互提供了強大的支持。借助 Python 的靈活性和 Selenium 的豐富功能,開發者能夠高效地完成復雜的任務,無論是自動化測試、爬蟲開發,還是網頁監控。

當然,Selenium 的強大功能也伴隨著一定的學習曲線,尤其是在處理動態內容、反爬機制或復雜的頁面結構時,可能需要更多的技巧和經驗積累。但只要你掌握了核心的定位與交互方法,并學會利用等待機制、多窗口切換等高級功能,就能應對絕大多數場景的需求。

希望本文能為你打開 Selenium 世界的大門,讓你在自動化測試或數據抓取的道路上更加得心應手。技術的進步永無止境,不斷實踐和探索,你將發現更多 Selenium 與 Python 結合的奇妙用法。繼續加油,愿你在自動化的世界中創造更多可能!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906549.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于OpenCV的人臉微笑檢測實現

文章目錄 引言一、技術原理二、代碼實現2.1 關鍵代碼解析2.1.1 模型加載2.1.2 圖像翻轉2.1.3 人臉檢測 微笑檢測 2.2 顯示效果 三、參數調優建議四、總結 引言 在計算機視覺領域&#xff0c;人臉檢測和表情識別一直是熱門的研究方向。今天我將分享一個使用Python和OpenCV實現…

Java 大視界 -- 基于 Java 的大數據分布式存儲在視頻會議系統海量視頻數據存儲與回放中的應用(263)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

Kotlin 極簡小抄 P9 - 數組(數組的創建、數組元素的訪問與修改、數組遍歷、數組操作、多維數組、數組與可變參數)

Kotlin 概述 Kotlin 由 JetBrains 開發&#xff0c;是一種在 JVM&#xff08;Java 虛擬機&#xff09;上運行的靜態類型編程語言 Kotlin 旨在提高開發者的編碼效率和安全性&#xff0c;同時保持與 Java 的高度互操作性 Kotlin 是 Android 應用開發的首選語言&#xff0c;也可…

gitlab+portainer 實現Ruoyi Vue前端CI/CD

1. 場景 最近整了一個Ruoyi Vue 項目&#xff0c;需要實現CICD&#xff0c;經過一番坎坷&#xff0c;最終達成&#xff0c;現將技術要點和踩坑呈現。 具體操作流程和后端大同小異&#xff0c;后端操作參考連接如下&#xff1a; https://blog.csdn.net/leinminna/article/detai…

RNN神經網絡

RNN神經網絡 1-核心知識 1-解釋RNN神經網絡2-RNN和傳統的神經網絡有什么區別&#xff1f;3-RNN和LSTM有什么區別&#xff1f;4-transformer的歸一化有哪幾種實現方式 2-知識問答 1-解釋RNN神經網絡 Why&#xff1a;與我何干&#xff1f; 在我們的生活中&#xff0c;很多事情…

javaweb-html

1.交互流程&#xff1a; 瀏覽器向服務器發送http請求&#xff0c;服務器對瀏覽器進行回應&#xff0c;并發送字符串&#xff0c;瀏覽器能對這些字符串&#xff08;html代碼&#xff09;進行解釋&#xff1b; 三大web語言&#xff1a;&#xff08;1&#xff09;html&#xff1a…

從混亂到高效:我們是如何重構 iOS 上架流程的(含 Appuploader實踐)

從混亂到高效&#xff1a;我們是如何重構 iOS 上架流程的 在開發團隊中&#xff0c;有一類看不見卻至關重要的問題&#xff1a;環境依賴。 特別是 iOS App 的發布流程&#xff0c;往往牢牢綁死在一臺特定的 Mac 上。每次需要發版本&#xff0c;都要找到“那臺 Mac”&#xff…

FPGA:CLB資源以及Verilog編碼面積優化技巧

本文將先介紹Kintex-7系列器件的CLB&#xff08;可配置邏輯塊&#xff09;資源&#xff0c;然后分享在Verilog編碼時節省CLB資源的技巧。以下內容基于Kintex-7系列的架構特點&#xff0c;并結合實際設計經驗進行闡述。 一、Kintex-7系列器件的CLB資源介紹 Kintex-7系列是Xilin…

在linux里上傳本地項目到github中

首先先安裝git&#xff0c;安裝完git后&#xff0c;輸入如下操作指令&#xff1a; 輸入自己的用戶名和郵箱&#xff08;為注冊GITHUB賬號時的用戶名和郵箱&#xff09;&#xff1a; git config --global user.name "111"git config --global user.email "121…

鴻蒙Flutter實戰:25-混合開發詳解-5-跳轉Flutter頁面

概述 在上一章中&#xff0c;我們介紹了如何初始化 Flutter 引擎&#xff0c;本文重點介紹如何添加并跳轉至 Flutter 頁面。 跳轉原理 跳轉原理如下&#xff1a; 本質上是從一個原生頁面A 跳轉至另一個原生頁面 B&#xff0c;不過區別在于&#xff0c;頁面 B是一個頁面容器…

c語言 寫一個五子棋

c語言 IsWin判贏 display 畫 10 x 10 的棋盤 判斷落子的坐標是否已有棋子 判斷落子坐標范圍是否超出范圍 // 五子棋 #include <stdio.h> #include <stdlib.h>// 畫棋盤 10 x 10的棋盤&#xff0c;len為行數 void display(char map[][10], int len) {system(&q…

格雷希爾快速封堵接頭,解決新能源汽車的氣密性檢測和三電系統的綜合測試

我國的新能源汽車已經遙遙領先&#xff0c;讓其他國家望塵莫及。格雷希爾GripSeal&#xff0c;為新能源汽車制造業提供快速可靠的密封連接器&#xff0c;讓測試速度加倍。以好抓取、易密封為設計理念&#xff0c;實現一秒連接&#xff0c;瞬時密封的高效性能。通過持續的產品設…

人工智能全景解析:從技術原理到未來趨勢的深度探索

人工智能(AI)作為21世紀最具變革性的技術之一&#xff0c;正以前所未有的速度重塑著人類社會。從智能手機中的語音助手到工廠里的智能機器人&#xff0c;從醫療診斷系統到金融風控模型&#xff0c;AI技術已滲透到我們生活和工作的方方面面。本文將全面解析人工智能的發展歷程、…

[密碼學實戰]使用C語言實現TCP服務端(二十九)

[密碼學實戰]使用C語言實現TCP服務端(二十九) 引言 TCP(傳輸控制協議)是互聯網通信中最核心的協議之一,它提供可靠的、面向連接的數據傳輸服務。通過C語言的標準Socket API,開發者可以靈活地實現TCP客戶端和服務端程序。本文將詳細講解TCP通信的原理,并提供完整的代碼…

IPv4 地址嵌入 IPv6 的前綴轉換方式詳解

1. 概述 在 IPv4 和 IPv6 網絡共存的過渡期&#xff0c;NAT64&#xff08;Network Address Translation 64&#xff09;是一種關鍵技術&#xff0c;用于實現 IPv6-only 網絡與 IPv4-only 網絡的互操作。NAT64 前綴轉換通過將 IPv4 地址嵌入到 IPv6 地址中&#xff0c;允許 IPv…

動態神經網絡(Dynamic NN)在邊緣設備的算力分配策略:MoE架構實戰分析

一、邊緣計算場景的算力困境 在NVIDIA Jetson Orin NX&#xff08;64TOPS INT8&#xff09;平臺上部署視頻分析任務時&#xff0c;開發者面臨三重挑戰&#xff1a; 動態負載波動 視頻流分辨率從480p到4K實時變化&#xff0c;幀率波動范圍20-60FPS 能效約束 設備功耗需控制在1…

算法優選系列(9.BFS 解決拓撲排序)

目錄 拓撲排序簡介&#xff1a; ?編輯 課程表&#xff08;medium&#xff09;&#xff1a; 課程表II&#xff08;medium&#xff09;: 火星詞典&#xff08;hard&#xff09;&#xff1a; 拓撲排序簡介&#xff1a; 有向無環圖&#xff08;DAG圖&#xff09; 如上圖每條邊…

SpringBoot3+Vue3(1)-后端 請求頭校驗,jwt退出登錄,mybaits實現數據庫用戶校驗

1.后端&#xff1a;jwt請求頭校驗 解析 工具類jwtUtils 解析token 令牌是否過期&#xff0c;驗證 正常、異常、運行時錯誤 倒入工具類是resource 工具類中添加解析用戶的方法&#xff1a; 在 在工具類添加id解析 此處調用 添加controller做測試 測試&…

【免殺】C2免殺技術(八)APC注入

本文主要寫點自己的理解&#xff0c;如有問題&#xff0c;請諸位指出&#xff01; 概念和流程 “APC注入”&#xff08;APC Injection&#xff09;是免殺與惡意代碼注入技術中的一種典型方法&#xff0c;主要用于在目標進程中遠程執行代碼&#xff0c;常見于后門、遠控、植入型…

git工具使用

安裝Git 在開始使用Git之前&#xff0c;需要在本地計算機上安裝Git工具。Git支持Windows、macOS和Linux系統。可以從Git官方網站下載適合操作系統的安裝包&#xff0c;并按照安裝向導進行安裝。 bash復制插入 # 在Linux上安裝Git sudo apt-get install git# 在macOS上安裝Git…