任務預覽(2天)
4.1實戰大項目:模擬登錄丁香園,並抓取論壇頁面所有的人員基本信息與回覆帖子內容。
注:丁香園論壇:http://www.dxy.cn/bbs/thread/626626#626626
我們可以通過查找<div class= “nav_account”>中的a元素,通過模擬點擊這個按鈕。
login = browser.find_element_by_class_name('nav_account').find_element_by_tag_name('a')
login.click()
跳轉頁面之後
我們可以通過獲取<div class=“login__tab_wp”>中的a標記,通過找第二個a標記,模擬點擊這個按鈕。
login_one = browser.find_element_by_class_name('login__tab_wp').find_elements_by_tag_name('a')
login_one[1].click()
獲取輸入框,使用send_keys()模擬輸入,這裏就不多說直接提供代碼。
name = browser.find_element_by_name('username')
name.send_keys('15779481686')
pwd = browser.find_element_by_name('password')
pwd.send_keys('qwe126386')
login_two = browser.find_element_by_class_name('button')
login_two.click()
登陸的時候會輸驗證碼,但是筆者能力有限,所以不知道到怎麼解決。百度之後,可以通過傳cookie,直接跳過登陸驗證,或者通過超級鷹的提供的api(需要錢)。由於這裏,我們用的是selenium自動化,所以我們人爲輸入。這裏先留個坑,等我學會了,就會來告訴如何實現解決驗證碼的問題。
登陸之後
這個獲取用戶姓名和用戶評論也很簡單。這裏就直接給代碼。
comment_list = browser.find_elements_by_class_name('postbody')
user_list = browser.find_elements_by_class_name('auth')
for i in range(len(comment_list)):
print('用戶:' + user_list[i].text)
print('評論是:' + comment_list[i].text.strip())
全部代碼在這裏:
from selenium import webdriver
from time import sleep
def get_html(url):
browser = webdriver.Chrome()
browser.get(url)
browser.maximize_window()
sleep(5)
login = browser.find_element_by_class_name('nav_account').find_element_by_tag_name('a')
login.click()
sleep(1)
login_one = browser.find_element_by_class_name('login__tab_wp').find_elements_by_tag_name('a')
login_one[1].click()
sleep(5)
name = browser.find_element_by_name('username')
name.send_keys('15779481686')
pwd = browser.find_element_by_name('password')
pwd.send_keys('qwe126386')
login_two = browser.find_element_by_class_name('button')
login_two.click()
sleep(100) #手動解決驗證碼問題
comment_list = browser.find_elements_by_class_name('postbody')
user_list = browser.find_elements_by_class_name('auth')
for i in range(len(comment_list)):
print('用戶:' + user_list[i].text)
print('評論是:' + comment_list[i].text.strip())
if __name__ == '__main__':
url = 'http://www.dxy.cn/bbs/thread/626626#626626'
get_html(url)