Airtest-Selenium實操小課①:爬取新榜數據

此文章來源於項目官方公衆號:“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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章