此文章來源於項目官方公衆號:“AirtestProject”
版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途
1. 前言
最近看到羣裏很多小夥伴都在用Airtest-Selenium做一些web自動化的嘗試,正好趁此機會,我們也出幾個關於web自動化的實操小課,僅供大家參考~
今天跟大家分享的是一個非常簡單的爬取網頁信息的小練習,在百度找到新榜網頁,搜索關鍵詞“自動化”,爬取前5名的公衆號名稱。
2. 需求分析和準備
整體的需求大致可以分爲以下步驟:
- 打開chrome瀏覽器
- 打開百度網頁
- 搜索“新榜官網”
- 點擊“找達人”按鈕
- 搜索關鍵詞“自動化”
- 爬取排名前5的公衆號名稱
在寫腳本之前,我們需要準備好社區版AirtestIDE,設置好chrome.exe和對應的driver;並且確保我們的chrome瀏覽器版本不是太高以及selenium是4.0以下即可(這些兼容問題我們都會在後續的版本修復)。
3. 腳本實現
3.1 完整示例代碼
接下來就可以着手寫腳本啦,關於web自動化腳本,我們可以藉助IDE的selenium Window ,方便我們錄製控件信息和快速使用常用接口:
完整的參考代碼如下:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
"""
任務描述:打開chrome瀏覽器,打開百度搜索新榜,進入新榜搜索關鍵詞“自動化”,爬取自動化綜合排名前10的公衆號名稱
https://www.newrank.cn/search/gongzhonghao/%E8%87%AA%E5%8A%A8%E5%8C%96
"""
def start_selenium():
# 創建一個實例,代碼運行到這裏,會打開一個chrome瀏覽器
driver = WebChrome()
driver.implicitly_wait(20)
driver.get("https://www.baidu.com/")
# 輸入搜索關鍵詞並提交搜索
search_box = driver.find_element_by_name('wd')
search_box.send_keys('新榜官網')
search_box.submit()
# 使用XPath查找文本爲 "上海新榜信息技術股份" 的元素並點擊
try:
element = driver.find_element_by_xpath("//div[@id='content_left']/div[@id='1']/div[@class='c-container']/div[1]/h3[@class='c-title t t tts-title']/a")
except Exception as e:
element = driver.find_element_by_xpath('//*/text()[normalize-space()="上海新榜信息技術股份"]/parent::*')
element.click()
# 獲取所有窗口句柄
window_handles = driver.window_handles
# 切換到新打開的窗口
driver.switch_to.window(window_handles[1])
# 獲取新頁面的鏈接
new_page_url = driver.current_url
# 打印新頁面的鏈接
print(new_page_url)
driver.get(new_page_url)
# # 在主內容內部查找 "找達人" 按鈕並點擊
search_box = driver.find_element_by_xpath('//button[@class="ant-btn ant-btn-primary ant-btn-lg index_searchBtn__c3q_1"]//a')
print(search_box.text)
# 獲取a標籤的URL
url = search_box.get_attribute('href')
# 打印URL
print(url)
driver.get(url) # 請求搜索鏈接-跳轉
# 輸入搜索關鍵詞並提交搜索
search_box = driver.find_element_by_id('rc_select_0')
# 模擬發送Backspace鍵
search_box.send_keys(Keys.BACKSPACE) # 清空內容
search_box.send_keys(Keys.BACKSPACE)
search_box.send_keys('自動化')
# 模擬發送Enter鍵
search_box.send_keys(Keys.ENTER)
sleep(5)
list_date = driver.find_elements(By.XPATH, "//div[@class='ant-spin-container']//li")
for item in list_date:
name_str = item.find_element_by_class_name("index_name__Fk83i")
print(name_str.text)
if __name__ == "__main__":
start_selenium()
3.2 重要知識點
1)創建實例並打開瀏覽器
driver = WebChrome()
2)打開網頁
driver.get("https://www.baidu.com/")
3)元素定位
driver.find_element_by_xpath('//button[@class="ant-btn ant-btn-primary ant-btn-lg index_searchBtn__c3q_1"]//a')
更多定位方式可以在官方教程學習:https://python-selenium-zh.readthedocs.io/zh_CN/latest/ 。
4)模擬按鍵輸入
search_box = driver.find_element_by_name('wd')
search_box.send_keys('新榜官網')
5)模擬回車
search_box = driver.find_element_by_name('wd')
search_box.submit()
6)模擬鍵盤事件
search_box = driver.find_element_by_id('rc_select_0')
# 模擬發送Backspace鍵
search_box.send_keys(Keys.BACKSPACE)
4. 注意事項與小結
4.1 相關教程
4.2 參考腳本的有效性
請同學們不要過多依賴於我們給出的參考腳本,通常情況下,網頁的控件信息可能會隨着前端的改動而更新,所以我們的教程並不是永久有效的。
更多的是參考整體腳本的知識點,查漏補缺,讓自己在小實踐中對web自動化的熟練程度更高。也非常歡迎熱心同學給我們投稿~
AirtestIDE下載:airtest.netease.com/
Airtest 教程官網:airtest.doc.io.netease.com/
搭建企業私有云服務:airlab.163.com/b2b
官方答疑 Q 羣:117973773