Python+Selenium實現自動化
阿新 • • 發佈:2020-12-02
selenium 是一個 web 的自動化測試工具,不少學習功能自動化的同學開始首選 selenium ,因為它相比 QTP 有諸多有點:
- 免費,也不用再為破解 QTP 而大傷腦筋
- 小巧,對於不同的語言它只是一個包而已,而 QTP 需要下載安裝1個多 G 的程式。
- 這也是最重要的一點,不管你以前更熟悉 C、 java、ruby、python、或都是 C# ,你都可以通過 selenium 完成自動化測試,而 QTP 只支援 VBS
- 支援多平臺:windows、linux、MAC ,支援多瀏覽器:ie、ff、safari、opera、chrome
- 支援分散式測試用例的執行,可以把測試用例分佈到不同的測試機器的執行,相當於分發機的功能。
可以看官方文件(我今天查的)
- https://selenium-python.readthedocs.io/index.html
- https://seleniumhq.github.io/selenium/docs/api/py/api.html
至於安裝步驟我已經發了連結:https://www.jianshu.com/p/1531e12f8852
selenium錯誤的例子:https://www.cnblogs.com/superhin/p/11454861.html
程式碼:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
from bs4 import BeautifulSoup
browser = webdriver.Chrome()
wait = WebDriverWait(browser,10)
def index_page(i):
"""
加載出小說的每一章內容
:param i: 小說的第 i 章
"""
if i == 1:
# 小說第一章的 Url 地址
url = "https://www.xsbiquge.com/68_68479/3578504.html"
browser.get(url)
# 等待 Content 節點加載出來
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#content')))
# 呼叫 get_info() 方法對頁面進行解析
get_info()
# 尋找下一章點選的節點
next_p = browser.find_elements(By.XPATH,('//div[@class="bottem2"]/a'))[2]
# 找到後停頓 30 秒
time.sleep(1)
# 點選按鈕
next_p.click()
def get_info():
"""
提取每一章小說的章章節名及正文
:return:
"""
# 找到章節的名字
name = browser.find_element_by_css_selector('#wrapper > div.content_read > div > div.bookname > h1').text
print(name)
# 找到小說正文
content = browser.find_element_by_id('content').text
print(content)
# 將拿到的小說名和對應的正文內容寫入 txt 檔案中
with open('天影.txt', 'a', encoding="utf-8") as f:
f.write('\n'.join([name, content]))
f.write('\n\n')
def page_num():
"""
對小說的進行分析,得到小說總的章節數
:return: 章節數
"""
# 目標小說的 URL 地址
url = 'https://www.xxbiquge.com/0_807/'
browser = webdriver.Chrome()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
dd = soup.find_all(name="dd")
page = len(dd)
browser.close()
return page
def main():
"""
b遍歷小說的全部章節
:return:
"""
page = page_num()
print(page)
for i in range(1,page+1):
index_page(i)
if __name__ == '__main__':
main()
這是抓取一本完整的小說的自動化程式碼
資料採集已經完成,表也已經建立成功,就剩資料裝庫了