《Python爬蟲精進》第9關作業要求:寫一個程序使瀏覽器自動完成以下工作:
首先,登錄博客人人都是蜘蛛俠。其次,在搜索框中查找《未來已來(三)——同九義何汝秀》,並進入該文章發表一個評論,這個評論中必須要帶有“selenium”這個詞。
首先,複習一下第9關所學知識,以下是第9關的主要知識點:
其次,將瀏覽器要完成的工作分爲幾個小步驟:
- 打開瀏覽器,登錄網站“人人都是蜘蛛俠”;
- 輸入用戶名、輸入密碼;
- 點擊登錄;
- 查找“未來已來(三)——同九義何汝秀”;
- 點擊搜索按鈕;
- 點擊“未來已來(三)——同九義何汝秀”,進入該文章的鏈接;
- 在評論區中輸入要發表的評論;
- 點擊“發表評論”按鈕;
- 關閉瀏覽器。
接下來,我將對以上步驟的具體操作展開詳細的介紹,其實也是我本人的筆記。
- 打開瀏覽器,登錄網站“人人都是蜘蛛俠”。此時需要通過driver.get()登錄“人人都是蜘蛛俠”網站,鏈接爲:https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
- 輸入用戶名、輸入密碼。此時需要查看網頁的頁面元素,快捷鍵“F12”。點擊“Elements”→點擊左邊的小箭頭(快捷鍵“Ctrl+Shift+C”)→點擊【戶名或電子郵件地址】方的方框,此時觀察右邊元素中高亮的地方,如下圖所示。此時需要用到driver.find_element_by_id()函數獲取【戶名或電子郵件地址】的方框,並用.send_keys()完成【輸入用戶名】這一步驟。【輸入密碼】也是一樣的操作。
- 點擊登錄。同樣通過查找網頁元素找到【登錄】按鈕的元素,操作過程與上一步基本一樣。唯一不同的是,按鈕需要通過點擊才能跳轉頁面,因此此時需要用到.click()函數。
- 【查找“未來已來(三)——同九義何汝秀”】、【點擊搜索按鈕】與第2、3步的操作相似,但是需要注意的是,搜索框位於元素的class屬性中,因此需要用driver.find_element_by_class_name()函數獲取方框,搜索按鈕也是一樣。如下入所示。
- 【點擊“未來已來(三)——同九義何汝秀”,進入該文章的鏈接】則改爲driver.find_element_by_link_text()函數,因爲進入文章鏈接需要通過點擊超鏈接文本。點擊超鏈接、輸入評論內容、點擊發表評論與上述操作一樣,在此不再展開。
- 最後關閉瀏覽器只需要driver。close()函數即可。
具體程序如下:
from selenium import webdriver
import time
driver = webdriver.Chrome() # 創建一個Chrome瀏覽器的webdriver實例
# 1、打開瀏覽器,登錄網站“人人都是蜘蛛俠”
url_1 = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php'
driver.get(url_1)
time.sleep(2)
# 2、輸入用戶名
user_name = driver.find_element_by_id('user_login') # 通過元素的id選擇 在elemen中查找div中p的id
user_name.send_keys('spiderman') # 模擬按鍵輸入,自動寫表單
time.sleep(1)
# 3、輸入密碼
user_password = driver.find_element_by_id('user_pass')
user_password.send_keys('crawler334566')
time.sleep(1)
# 4、點擊登錄按鈕
submit = driver.find_element_by_id('wp-submit')
submit.click() # 點擊元素
time.sleep(2)
# 5、在搜索框中輸入“未來已來(三)——同九義何汝秀”
search = driver.find_element_by_class_name('search-field') # 通過元素的class屬性選擇
search.send_keys('未來已來(三)——同九義何汝秀')
time.sleep(1)
# 6、點擊搜索按鈕
search_submit = driver.find_element_by_class_name('search-submit')
search_submit.click()
time.sleep(1)
# 7、在搜索結果中找到目標文章的超鏈接,並點擊該超鏈接打開文章頁面
url_2 = driver.find_element_by_link_text('未來已來(三)——同九義何汝秀') # 通過鏈接文本獲得超鏈接
url_2.click()
# time.sleep(2)
# 8、在評論區域輸入“路過測試selenium”
comment_text = driver.find_element_by_tag_name('textarea') # 通過元素的標籤名稱選擇 id前面的標籤名稱
comment_text.send_keys('路過測試selenium')
time.sleep(2)
# 9、點擊發布評論按鈕
comment_submit = driver.find_element_by_id('submit')
comment_submit.click()
time.sleep(2)
# 10、關閉瀏覽器
driver.close()