


Automasi web kini merupakan alat yang sangat diperlukan dalam pembangunan dan pengujian perisian moden. Dalam tutorial Selenium Python yang komprehensif ini, anda akan belajar cara membina rangka kerja automasi web yang teguh yang mampu mengendalikan senario dunia sebenar. Jika anda berminat untuk melaksanakan ujian automatik dalam Python atau mencipta penyelesaian automasi mengikis web yang kompleks, panduan ini akan memberi anda pendekatan yang diuji industri dan amalan terbaik Selenium.
Memahami Asas Automasi Web
Automasi web adalah penting dalam pembangunan perisian moden, ujian dan pengumpulan data. Aplikasinya merangkumi daripada ujian hujung ke hujung aplikasi web kepada memudahkan aliran kerja berulang, seperti penyerahan borang atau pengikisan web. Walaupun penyepaduan Selenium WebDriver Python menawarkan keupayaan yang berkuasa, automasi web yang mantap adalah lebih daripada sekadar menulis skrip untuk meniru interaksi pengguna. Ini mengenai mereka bentuk aliran kerja dan rangka kerja yang boleh diselenggara, boleh disesuaikan dan berdaya tahan terhadap perubahan pada aplikasi web sasaran.
Di bawah ialah aspek utama yang akan kami bincangkan sepanjang tutorial ini:
- Memilih pencari yang sesuai (XPath, CSS, dll.)
- Unsur dinamik dan pemuatan keadaan
- Melaksanakan mekanisme cuba semula
- Mengurus sesi penyemak imbas dengan betul
- Struktur kebolehselenggaraan kod
Kami akan membina projek automasi mengikis web untuk penjejak harga di tapak web e-dagang menggunakan Books to Scrape sebagai tapak tunjuk cara untuk menunjukkan konsep ini sambil mematuhi amalan terbaik Selenium.
Prasyarat
Untuk mengikuti tutorial ini, anda memerlukan:
- Python 3.x dipasang pada mesin anda.
- Pengetahuan asas pengaturcaraan Python
- Pengetahuan asas Mengikis Web dengan Selenium
Kod untuk tutorial ini tersedia pada repositori github kami, jangan ragu untuk mengklonkannya untuk diikuti.
Menyediakan Persekitaran Pembangunan
Mari kita sediakan persekitaran pembangunan yang betul dan pasang pakej Python yang diperlukan. Mula-mula, cipta folder projek dan persekitaran maya baharu dengan menjalankan arahan di bawah:
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
Kemudian, cipta dan tambah pakej Python berikut pada fail requirements.txt anda:
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
Dalam kod di atas, kami menentukan kebergantungan teras kami. Pakej selenium menyediakan asas untuk rangka kerja automasi web kami, manakala pengurus pemacu web mengendalikan pengurusan pemacu penyemak imbas secara automatik. Pakej python-dotenv adalah untuk konfigurasi persekitaran dan pakej permintaan adalah untuk pengendalian permintaan HTTP.
Sekarang jalankan arahan di bawah untuk memasang semua pakej Python dalam fail requirements.txt anda dengan menjalankan arahan di bawah:
pip install -r requirements.txt
Akhir sekali, buat struktur folder berikut untuk projek kami:
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
Di sini kami mewujudkan struktur projek modular mengikut amalan terbaik kejuruteraan perisian. Direktori teras mengandungi komponen automasi utama kami, manakala pangkalan data mengendalikan kegigihan data.
Membina Alat Penjejak Harga
Dengan persekitaran projek, kebergantungan dan struktur folder yang dicipta, mari teruskan membina alat automasi penjejak harga menggunakan Selenium dan Python.
Melaksanakan Sistem Pengurusan Pelayar kami
Mari laksanakan sistem pengurusan penyemak imbas kami, ini adalah komponen penting untuk penyepaduan Selenium WebDriver Python yang stabil. Tambahkan coretan kod di bawah pada fail teras/browser.py anda:
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
Kod di atas mencipta kelas BrowserManager yang mengendalikan pemulaan dan konfigurasi WebDriver. Kelas melaksanakan amalan terbaik Selenium dengan mengkonfigurasi pilihan Chrome untuk kestabilan dan prestasi. Parameter tanpa kepala membolehkan ujian dijalankan tanpa tetingkap penyemak imbas yang kelihatan, yang penting untuk saluran paip CI/CD.
Sekarang tambahkan kaedah berikut pada kelas BrowserManager untuk melaksanakan ciri pengurusan penyemak imbas teras:
pip install -r requirements.txt
Dalam kod di atas, kaedah start_browser menggunakan webdriver-manager untuk mengendalikan pemasangan dan kemas kini pemacu secara automatik, manakala close_browser memastikan pembersihan sumber yang betul. Pelaksanaan termasuk konfigurasi menunggu tersirat untuk mengendalikan pemuatan halaman dinamik dengan anggun.
Mencipta Pengendali Elemen
Seterusnya, mari kita teruskan untuk melaksanakan sistem interaksi elemen, ini penting dalam mana-mana rangka kerja automasi web kerana ia membolehkan kita mengesan dan berinteraksi dengan elemen dengan cara yang boleh dipercayai sambil mengikuti amalan terbaik Selenium. Tambahkan coretan kod pada core/element_handler.py
anda
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
Dalam kod di atas, kami mencipta kelas ElementHandler, yang merangkum corak interaksi Selenium WebDriver Python. Kelas menerima contoh WebDriver dan parameter tamat masa boleh dikonfigurasikan.
Kemas kini kelas ElementHandler anda untuk menambah kaedah interaksi unsur teras:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support import expected_conditions as EC import logging class BrowserManager: def __init__(self, headless=False): self.options = webdriver.ChromeOptions() if headless: self.options.add_argument('--headless') # Add additional stability options self.options.add_argument('--no-sandbox') self.options.add_argument('--disable-dev-shm-usage') self.options.add_argument('--disable-gpu') self.driver = None self.logger = logging.getLogger(__name__)
Kaedah di atas menggunakan Selenium's WebDriverWait dan expected_conditions untuk mengesan elemen supaya ia juga boleh mengendalikan halaman web dinamik di mana elemen mungkin dimuatkan secara tidak segerak.
Tambah kaedah lain untuk melaksanakan logik pengekstrakan teks:
def start_browser(self): """Initialize and return a ChromeDriver instance""" try: service = webdriver.ChromeService() self.driver = webdriver.Chrome(service=service, options=self.options) self.driver.implicitly_wait(10) return self.driver except Exception as e: self.logger.error(f"Failed to start browser: {str(e)}") raise def close_browser(self): """Safely close the browser""" if self.driver: self.driver.quit() self.driver = None
Kaedah ini termasuk cuba semula logik untuk mengendalikan StaleElementReferenceException, yang merupakan cabaran biasa dalam automasi web.
Melaksanakan Teras Penjejak Harga
Sekarang mari kita bina fungsi mengikis utama kami, menggabungkan konsep Python ujian automatik dan pengendalian ralat yang mantap. Tambahkan coretan kod di bawah pada fail teras/scraper.py anda:
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
Dalam kod di atas, kami mencipta kelas BookScraper yang menyepadukan pelayar dan komponen pengendalian elemen kami. Kelas mengikuti corak Model Objek Halaman, konsep utama dalam reka bentuk rangka kerja automasi web, dengan memusatkan pencari elemen dan menyediakan API yang bersih untuk operasi mengikis.
Seterusnya, kemas kini kelas BookScraper untuk menambah kaedah pengekstrakan data produk teras:
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
Kaedah di atas menggunakan pendekatan berstruktur untuk mengumpulkan maklumat produk, mengekalkan log terperinci untuk nyahpepijat dan pemantauan.
Menyediakan Pengurusan Pangkalan Data
Mari kita laksanakan lapisan pangkalan data rangka kerja automasi web kami, yang akan mengendalikan penyimpanan berterusan data kami yang dikikis. Komponen ini akan membolehkan kami menjejaki perubahan harga dari semasa ke semasa. Tambahkan coretan kod di bawah pada pangkalan data anda/db_manager.py:
pip install -r requirements.txt
Dalam kod di atas, kami menentukan kelas DatabaseManager kami yang mengendalikan semua operasi pangkalan data. Kami menggunakan SQLite untuk kesederhanaan dan mudah alih, untuk mengelak daripada menyediakan dan mengkonfigurasi pangkalan data dan SQLite juga sesuai untuk projek automasi mengikis web kami kerana kami tidak menyimpan sejumlah besar data.
Seterusnya, kemas kini pangkalan data anda/db_manager.py untuk menambah kaedah permulaan pangkalan data:
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
Di sini kami mewujudkan skema pangkalan data kami menggunakan pernyataan SQL DDL dan mencipta jadual berasingan untuk produk dan sejarah harga, dengan perhubungan dan kekangan yang sesuai yang akan membolehkan kami menjejaki harga dan melakukan analisis sejarah pada data yang kami simpan.
Sekarang mari tambah kaedah lain untuk menyimpan data ke pangkalan data:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support import expected_conditions as EC import logging class BrowserManager: def __init__(self, headless=False): self.options = webdriver.ChromeOptions() if headless: self.options.add_argument('--headless') # Add additional stability options self.options.add_argument('--no-sandbox') self.options.add_argument('--disable-dev-shm-usage') self.options.add_argument('--disable-gpu') self.driver = None self.logger = logging.getLogger(__name__)
Dalam kod di atas, kami melaksanakan logik ketekunan data menggunakan pertanyaan berparameter untuk menghalang suntikan SQL. Kaedah ini mengendalikan kedua-dua operasi sisipan dan kemas kini menggunakan klausa ON CONFLICT SQLite.
Integrasi Aplikasi Utama
Mari kita gabungkan semuanya dengan kelas aplikasi utama kami, menggabungkan semua elemen pelaksanaan Selenium WebDriver Python kami. Tambahkan coretan kod di bawah pada fail main.py anda:
def start_browser(self): """Initialize and return a ChromeDriver instance""" try: service = webdriver.ChromeService() self.driver = webdriver.Chrome(service=service, options=self.options) self.driver.implicitly_wait(10) return self.driver except Exception as e: self.logger.error(f"Failed to start browser: {str(e)}") raise def close_browser(self): """Safely close the browser""" if self.driver: self.driver.quit() self.driver = None
Dalam kod di atas, kami mencipta kelas PriceTracker utama yang mengatur semua komponen penyelesaian automasi mengikis web kami. Kelas PriceTracker mengikut corak suntikan kebergantungan untuk mengekalkan modulariti dan kebolehujian.
Seterusnya, kemas kini kelas PriceTracker kami untuk menambah kaedah penjejakan teras:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException, StaleElementReferenceException class ElementHandler: def __init__(self, driver, timeout=10): self.driver = driver self.timeout = timeout
Di sini kami melaksanakan logik penjejakan produk utama yang mengendalikan pengikisan web dan menyimpan data yang dikikis.
Menjalankan Aplikasi
Mari kita cipta skrip pelaksanaan untuk menjalankan skrip automasi kami. Tambahkan coretan kod berikut pada fail run.py anda:
def wait_for_element(self, locator, timeout=None): """Wait for element with retry mechanism""" timeout = timeout or self.timeout try: element = WebDriverWait(self.driver, timeout).until( EC.presence_of_element_located(locator) ) return element except TimeoutException: raise TimeoutException(f"Element {locator} not found after {timeout} seconds") def get_text_safely(self, locator, timeout=None): """Safely get text from element with retry mechanism""" max_retries = 3 for attempt in range(max_retries): try: element = self.wait_for_element(locator, timeout) return element.text.strip() except StaleElementReferenceException: if attempt == max_retries - 1: raise continue
Sekarang jalankan arahan berikut pada terminal anda untuk menjalankan skrip:
mkdir price_tracker_automation && cd price_tracker_automation python3 -m venv env source env/bin/activate
Arahan di atas akan menunjukkan output pada tangkapan skrin di bawah:
Daripada skrip di atas, anda dapat melihat bahawa skrip automasi kami menjejaki harga untuk semua URL yang ditentukan.
Menjejaki Perubahan Harga
Pelaksanaan semasa kami hanya menjejak dan menjimatkan harga produk. Selepas menjejak harga, mari tingkatkan penjejak harga kami untuk memberitahu pengguna tentang perubahan harga. Tambahkan coretan kod berikut pada fail pemberitahuan/price_alert.py anda:
selenium==4.16.0 webdriver-manager==4.0.1 python-dotenv==1.0.0 requests==2.31.0
Dalam coretan kod di atas, kami mencipta kelas PriceAlertManager dengan kebergantungan penting. Pengurus mengambil contoh pengurus pangkalan data sebagai parameter dan menyediakan pengelogan untuk menjejak operasi amaran. Kelas menggunakan gabungan kompleks untuk membandingkan harga semasa dan sebelumnya. Kemudian kami melaksanakan pengiraan peratusan perubahan harga yang dinamik dan mencipta kamus berstruktur untuk maklumat perubahan harga.
Seterusnya, kemas kini kelas PriceAlertManager anda untuk menambah fungsi pemberitahuan e-mel:
pip install -r requirements.txt
Di sini, kami mencipta pemberitahuan e-mel menggunakan e-mel Python dan perpustakaan SMTP. Pelaksanaan menggunakan kelas MIMEText untuk mencipta mesej e-mel yang diformat dengan betul. Badan e-mel dijana secara dinamik menggunakan f-strings, menggabungkan maklumat perubahan harga terperinci dengan pemformatan mata wang yang tepat.
Sekarang mari kita ubah suai skrip larian kami untuk memasukkan makluman harga:
price_tracker_automation/ ├── core/ │ ├── browser.py | ├── scraper.py │ └── element_handler.py ├── database/ │ └── db_manager.py ├── notifications/ | └── price_alert.py ├── requirements.txt ├── run.py └── main.py
Kini jika anda menjalankan skrip sekali lagi, ia akan menjejaki harga produk dan memaklumkan anda tentang produk yang harganya telah berubah seperti dalam tangkapan skrin di bawah:
Mungkin anda boleh menjalankan skrip ini dalam tugas cron untuk menjejaki harga produk dan memaklumkan anda dalam masa nyata tentang perubahan harga tanpa perlu menjalankannya secara manual setiap kali.
Cth. 0 */6 * * * python run.py --urls
"http://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
"http://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"
"http://books.toscrape.com/catalogue/soumission_998/index.html"
Kesimpulan
Sepanjang tutorial ini, anda telah mempelajari cara membina alat automasi web yang mantap menggunakan Selenium dan Python. Kami bermula dengan memahami asas automasi web, kemudian kami menyediakan persekitaran pembangunan untuk alat Penjejak Harga yang kami bina untuk demonstrasi dalam tutorial ini. Kemudian kami pergi lebih jauh untuk membina aplikasi Penjejak Harga yang menjejaki harga produk dan memaklumkan pengguna tentang perubahan harga. Sekarang setelah anda mempunyai pengetahuan ini, alat apakah yang akan anda bina seterusnya. Beritahu saya di bahagian komen. Selamat mengekod!
Atas ialah kandungan terperinci Membina Automasi Web Teguh dengan Selenium dan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

Memilih Python atau C bergantung kepada keperluan projek: 1) Jika anda memerlukan pembangunan pesat, pemprosesan data dan reka bentuk prototaip, pilih Python; 2) Jika anda memerlukan prestasi tinggi, latensi rendah dan kawalan perkakasan yang rapat, pilih C.

Dengan melabur 2 jam pembelajaran python setiap hari, anda dapat meningkatkan kemahiran pengaturcaraan anda dengan berkesan. 1. Ketahui Pengetahuan Baru: Baca dokumen atau tutorial menonton. 2. Amalan: Tulis kod dan latihan lengkap. 3. Kajian: Menyatukan kandungan yang telah anda pelajari. 4. Amalan Projek: Sapukan apa yang telah anda pelajari dalam projek sebenar. Pelan pembelajaran berstruktur seperti ini dapat membantu anda menguasai Python secara sistematik dan mencapai matlamat kerjaya.

Kaedah untuk belajar python dengan cekap dalam masa dua jam termasuk: 1. Semak pengetahuan asas dan pastikan anda sudah biasa dengan pemasangan Python dan sintaks asas; 2. Memahami konsep teras python, seperti pembolehubah, senarai, fungsi, dan lain -lain; 3. Menguasai penggunaan asas dan lanjutan dengan menggunakan contoh; 4. Belajar kesilapan biasa dan teknik debugging; 5. Memohon pengoptimuman prestasi dan amalan terbaik, seperti menggunakan komprehensif senarai dan mengikuti panduan gaya PEP8.

Python sesuai untuk pemula dan sains data, dan C sesuai untuk pengaturcaraan sistem dan pembangunan permainan. 1. Python adalah mudah dan mudah digunakan, sesuai untuk sains data dan pembangunan web. 2.C menyediakan prestasi dan kawalan yang tinggi, sesuai untuk pembangunan permainan dan pengaturcaraan sistem. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python lebih sesuai untuk sains data dan perkembangan pesat, manakala C lebih sesuai untuk prestasi tinggi dan pengaturcaraan sistem. 1. Sintaks Python adalah ringkas dan mudah dipelajari, sesuai untuk pemprosesan data dan pengkomputeran saintifik. 2.C mempunyai sintaks kompleks tetapi prestasi yang sangat baik dan sering digunakan dalam pembangunan permainan dan pengaturcaraan sistem.

Adalah mungkin untuk melabur dua jam sehari untuk belajar Python. 1. Belajar Pengetahuan Baru: Ketahui konsep baru dalam satu jam, seperti senarai dan kamus. 2. Amalan dan Amalan: Gunakan satu jam untuk melakukan latihan pengaturcaraan, seperti menulis program kecil. Melalui perancangan dan ketekunan yang munasabah, anda boleh menguasai konsep teras Python dalam masa yang singkat.

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna