動態加載內容時selenium如何操作?

當處理動態加載的內容時,Selenium 是一個非常強大的工具,因為它可以模擬真實用戶的瀏覽器行為,等待頁面元素加載完成后再進行操作。以下是使用 Selenium 獲取動態加載內容的詳細步驟和代碼示例。

一、安裝 Selenium 和 ChromeDriver

(一)安裝 Selenium

通過 pip 安裝 Selenium:

bash

pip install selenium

(二)下載 ChromeDriver

  1. 訪問 ChromeDriver 下載頁面。

  2. 下載與你的 Chrome 瀏覽器版本匹配的 ChromeDriver。

  3. 解壓下載的文件,并將 chromedriver 的路徑添加到系統的環境變量中,或者在代碼中指定路徑。

二、使用 Selenium 獲取動態加載的內容

(一)基本用法

以下是一個基本的示例,展示如何使用 Selenium 打開一個網頁并獲取頁面的 HTML 內容。

Python

from selenium import webdriver
import time# 設置 ChromeDriver 的路徑
driver_path = 'path/to/chromedriver'# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=driver_path)# 打開目標網頁
url = 'https://example.com'
driver.get(url)# 等待頁面加載完成
time.sleep(5)  # 等待 5 秒,確保頁面加載完成# 獲取頁面的 HTML 內容
html = driver.page_source# 打印頁面內容
print(html)# 關閉瀏覽器
driver.quit()

(二)處理動態加載的內容

如果頁面內容是通過 JavaScript 動態加載的,可以使用 SeleniumWebDriverWaitexpected_conditions 來等待特定元素加載完成。

Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 設置 ChromeDriver 的路徑
driver_path = 'path/to/chromedriver'# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=driver_path)# 打開目標網頁
url = 'https://example.com'
driver.get(url)# 等待特定元素加載完成
try:# 等待最多 10 秒,直到找到指定的元素element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'target_element_id')))# 獲取頁面的 HTML 內容html = driver.page_sourceprint(html)
except Exception as e:print(f"An error occurred: {e}")
finally:# 關閉瀏覽器driver.quit()

(三)處理分頁和滾動

如果頁面需要滾動或分頁加載,可以使用 Selenium 模擬滾動操作。

Python

from selenium import webdriver
import time# 設置 ChromeDriver 的路徑
driver_path = 'path/to/chromedriver'# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=driver_path)# 打開目標網頁
url = 'https://example.com'
driver.get(url)# 模擬滾動到底部
for _ in range(5):  # 滾動 5 次driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)  # 等待頁面加載# 獲取頁面的 HTML 內容
html = driver.page_source
print(html)# 關閉瀏覽器
driver.quit()

三、完整示例:獲取 1688 商品詳情

以下是一個完整的示例,展示如何使用 Selenium 獲取 1688 商品的詳細信息。

Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup# 設置 ChromeDriver 的路徑
driver_path = 'path/to/chromedriver'# 初始化 WebDriver
driver = webdriver.Chrome(executable_path=driver_path)# 打開目標網頁
url = 'https://detail.1688.com/offer/123456789.html'
driver.get(url)# 等待頁面加載完成
try:# 等待最多 10 秒,直到找到指定的元素element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'mod-detail')))# 獲取頁面的 HTML 內容html = driver.page_source# 使用 BeautifulSoup 解析 HTMLsoup = BeautifulSoup(html, 'html.parser')product_info = {}# 提取商品名稱product_name = soup.find('h1', class_='product-title').text.strip()product_info['product_name'] = product_name# 提取商品價格product_price = soup.find('span', class_='price').text.strip()product_info['product_price'] = product_price# 提取商品描述product_description = soup.find('div', class_='product-description').text.strip()product_info['product_description'] = product_description# 提取商品圖片product_image = soup.find('img', class_='main-image')['src']product_info['product_image'] = product_imageprint(product_info)
except Exception as e:print(f"An error occurred: {e}")
finally:# 關閉瀏覽器driver.quit()

四、注意事項和建議

(一)遵守網站規則

在爬取數據時,務必遵守 1688 的 robots.txt 文件規定和使用條款,不要頻繁發送請求,以免對網站造成負擔或被封禁。

(二)處理異常情況

在編寫爬蟲程序時,要考慮到可能出現的異常情況,如請求失敗、頁面結構變化等。可以通過捕獲異常和設置重試機制來提高程序的穩定性。

(三)數據存儲

獲取到的商品信息可以存儲到文件或數據庫中,以便后續分析和使用。

(四)合理設置請求頻率

避免高頻率請求,合理設置請求間隔時間,例如每次請求間隔幾秒到幾十秒,以降低被封禁的風險。

五、總結

通過上述步驟和示例代碼,你可以輕松地使用 Selenium 獲取 1688 商品的詳細信息。希望這個教程對你有所幫助!

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

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

相關文章

力扣第446場周賽

有事沒趕上, 賽后模擬了一下, 分享一下我的解題思路和做題感受 1.執行指令后的得分 題目鏈接如下:力扣 給你兩個數組:instructions 和 values,數組的長度均為 n。 你需要根據以下規則模擬一個過程: 從下標 i 0 的第一個指令開…

三維點擬合平面ransac c++

理論 平面的一般定義 在三維空間中,一個平面可以由兩個要素唯一確定: 法向量 n(a,b,c):垂直于平面的方向 平面上一點 平面上任意一點 p(x,y,z) 滿足: ( p ? p 0 ) ? n 0 (p - p0) * n 0 (p?p0)?n0 即 a ( x ? x 0 ) …

基于LSTM-AutoEncoder的心電信號時間序列數據異常檢測(PyTorch版)

心電信號(ECG)的異常檢測對心血管疾病早期預警至關重要,但傳統方法面臨時序依賴建模不足與噪聲敏感等問題。本文使用一種基于LSTM-AutoEncoder的深度時序異常檢測框架,通過編碼器-解碼器結構捕捉心電信號的長期時空依賴特征&#…

Docker 部署 PostgreSQL 數據庫

Docker 部署 PostgreSQL 數據庫 基于 Docker 部署 PostgreSQL 數據庫一、拉取 PostgreSQL 鏡像二、運行 PostgreSQL 容器三、運行命令參數詳解四、查看容器運行狀態 基于 Docker 部署 PostgreSQL 數據庫 一、拉取 PostgreSQL 鏡像 首先,確保你的 Docker 環境已正確…

MySQL性能調優(四):MySQL的執行原理(MYSQL的查詢成本)

文章目錄 MySQL性能調優數據庫設計優化查詢優化配置參數調整硬件優化 1.MySQL的執行原理-21.1.MySQL的查詢成本1.1.1.什么是成本1.1.2.單表查詢的成本1.1.2.1.基于成本的優化步驟實戰1. 根據搜索條件,找出所有可能使用的索引2. 計算全表掃描的代價3. 計算使用不同索…

用 Go 優雅地清理 HTML 并抵御 XSS——Bluemonday

1、背景與動機 只要你的服務接收并回顯用戶生成內容(UGC)——論壇帖子、評論、富文本郵件正文、Markdown 等——就必須考慮 XSS(Cross?Site Scripting)攻擊風險。瀏覽器在解析 HTML 時會執行腳本;如果不做清理&#…

Redis SCAN 命令的詳細介紹

Redis SCAN 命令的詳細介紹 以下是 Redis SCAN? 命令的詳細介紹,結合其核心特性、使用場景及底層原理進行綜合說明: 工作原理圖 : ? 一、核心特性 非阻塞式迭代 通過游標(Cursor) 分批次遍歷鍵,避免一次…

SpringBoot3集成MyBatis-Plus(解決Boot2升級Boot3)

總結:目前升級僅發現依賴有變更,其他目前未發現,如有發現,后續會繼續更新 由于項目架構提升,以前開發的很多公共的組件,以及配置都需要升級,因此記錄需要更改的配置(記錄時間&#…

基于mybatis與PageHelper插件實現條件分頁查詢(3.19)

實現商品分頁例子 需要先引入mybatis與pagehelper插件&#xff0c;在pom.xml里 <!-- Mybatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3&l…

Spring Bean 全方位指南:從作用域、生命周期到自動配置詳解

目錄 1. Bean 的作用域 1.1 singleton 1.2 prototype 1.3 request 1.4 session 1.5 application 1.5.1 servletContext 和 applicationContext 區別 2. Bean 的生命周期 2.1 詳解初始化 2.1.1 Aware 接口回調 2.1.2 執行初始化方法 2.2 代碼示例 2.3 源碼 [面試題…

C++ (非類型參數)

模板除了定義類型參數之外&#xff0c;也可以在模板內定義非類型參數 非類型參數不是類型&#xff0c;而是值&#xff0c;比如&#xff1a;指針&#xff0c;整數&#xff0c;引用 非類型參數的用法&#xff1a; 1.整數常量&#xff1a;非類型參數最常見的形式是整數常量&…

短視頻+直播商城系統源碼全解析:音視頻流、商品組件邏輯剖析

時下&#xff0c;無論是依托私域流量運營的品牌方&#xff0c;還是追求用戶粘性與轉化率的內容創作者&#xff0c;搭建一套完整的短視頻直播商城系統源碼&#xff0c;已成為提升用戶體驗、增加商業變現能力的關鍵。本文將圍繞三大核心模塊——音視頻流技術架構、商品組件設計、…

5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

控件概述 實現圖形化界面的程序. Qt中已經給我們提供了很多的“控件" 就需要學習和了解這些控件&#xff0c;學會如何使用這些控件 編程講究的是“站在巨人的肩膀上”&#xff0c;而不是“從頭發明輪子" 一個圖形化界面上的內容&#xff0c;不需要咱們全都從零去實…

2025-04-22| Docker: --privileged參數詳解

在 Docker 中&#xff0c;--privileged 是一個運行容器時的標志&#xff0c;它賦予容器特權模式&#xff0c;大幅提升容器對宿主機資源的訪問權限。以下是 --privileged 的作用和相關細節&#xff1a; 作用 完全訪問宿主機的設備&#xff1a; 容器可以訪問宿主機的所有設備&am…

高性能服務器配置經驗指南1——剛配置好服務器應該做哪些事

文章目錄 安裝ubuntu安裝必要軟件設置用戶遠程連接安全問題ClamAV安裝教程步驟 1&#xff1a;更新系統軟件源步驟 2&#xff1a;升級系統&#xff08;可選但推薦&#xff09;步驟 3&#xff1a;安裝 ClamAV步驟 4&#xff1a;更新病毒庫步驟 5&#xff1a;驗證安裝ClamAV 常用命…

直流絕緣監測解決方案:保障工業與新能源系統的安全運行

一、引言 隨著工業自動化和新能源技術的快速發展&#xff0c;直流供電系統在光伏發電、儲能電站、電動汽車充電樁等領域的應用日益廣泛。然而&#xff0c;直流系統的正負極不接地&#xff08;IT系統&#xff09;特性&#xff0c;使得絕緣故障可能導致漏電、短路甚至設備損毀等…

VSCode 用于JAVA開發的環境配置,JDK為1.8版本時的配置

插件安裝 JAVA開發在VSCode中&#xff0c;需要安裝JAVA的必要開發。當前安裝只需要安裝 “Language Support for Java(TM) by Red Hat”插件即可 安裝此插件后&#xff0c;會自動安裝包含如下插件&#xff0c;不再需要單獨安裝 Project Manager for Java Test Runner for J…

C++入門語法

C入門 首先第一點&#xff0c;C中可以混用C語言中的語法。但是C語言是不兼容C的。C主要是為了改進C語言而創建的一門語言&#xff0c;就是有人用C語言用不爽了&#xff0c;改出來個C。 命名空間 c語言中會有如下這樣的問題&#xff1a; 那么C為了解決這個問題就整出了一個命名…

輸入框僅支持英文、特殊符號、全角自動轉半角 vue3

需求&#xff1a;封裝一個輸入框組件 1.只能輸入英文。 2.輸入的小寫英文自動轉大寫。 3.輸入的全角特殊符號自動轉半角特殊字符 效果圖 代碼 <script setup> import { defineEmits, defineModel, defineProps } from "vue"; import { debounce } from "…

Uniapp:創建項目

目錄 一、前提準備二、創建項目三、項目結構四、運行測試 一、前提準備 首先要創建uniapp項目&#xff0c;需要先下載HBuilderX&#xff0c;HBuilderX是一款開箱即用的工具&#xff0c;下載完畢之后&#xff0c;解壓到指定的目錄即可使用&#xff0c;需要注意的是最好路徑里面…