日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 导航栏_解析导航栏的url--selnium,beautifulsoup实战

發布時間:2025/3/8 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 导航栏_解析导航栏的url--selnium,beautifulsoup实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前段時間做ui自動化測試的時候,導航欄菜單始終有點問題,最后只好直接獲取到url,然后直接使用driver.get(url)進入頁面;

包括做壓測的時候,比如我要找出所有報表菜單的url,這樣不可能手動去一個一個找出來,然后復制,這樣浪費時間,并且也容易漏掉,所以我就寫了個腳本來干這事;

首先說下思路:登錄-->獲取所有的a標簽-->篩選掉不用的標簽-->打印或者保存到文件中

其中我獲取頁面所有的標簽使用了兩種方法,webdriver和beautifulsoup4,兩種的區別:1、beautifulsoup4來解析的時候,比較穩定,并且速度快,2、webdriver可能簡單一點吧,我推薦是用beautifulsoup4;之所以是用webdriver登錄,是因為用webdriver登錄簡單,不像requests來請求的話,第一次還要分析url,參數之類的,用webdriver的話,只需要定位幾個元素就ok了,何樂而不為呢。。。

下面我將兩種方式的運行時間、最終的解析結果:

下面的是第一種方式:使用beautifulsoup4來解析:

1 #coding=utf-8

2

3 """

4 是為了獲取XXX系統菜單的url

5 使用的是selenium登錄,獲取網頁的內容,然后用beautifulsoup來解析

6 """

7 import unittest

8 import time

9 from selenium import webdriver

10 from bs4 import BeautifulSoup

11

12 # 登錄url

13 url = 'http://XXXX.XXXX.com/' # 系統的url

14 username = 'XXXX'

15 password = 'XXXXX'

16

17 class GetUrl(unittest.TestCase):

18 def setUp(self):

19 self.dr = webdriver.Chrome()

20 self.dr.get(url)

21

22 def tearDown(self):

23 self.dr.quit()

24

25 def _login(self):

26 self.dr.find_element_by_id('username').send_keys(username) # 輸入用戶名

27 self.dr.find_element_by_id('password').send_keys(password) # 輸入密碼

28 # self.dr.find_element_by_id('verifycode').send_keys('XXXXX') 這里原來是需要驗證碼的,后來取消掉了

29 self.dr.find_element_by_id('weblogin').click() # 點擊登錄按鈕

30 time.sleep(3)

31

32 def _gethtmlcontent(self):

33 """獲取當前頁面的html的所有內容"""

34 content = self.dr.page_source # 將該頁面的內容 返回給content保存起來方便后面解析

35 return content

36

37 def _geturl(self,pagesource):

38 """

39 找出所有的a標簽,然后篩選掉非導航連接的a標簽。返回的是一個dict

40 """

41 result = dict()

42 soup = BeautifulSoup(pagesource, "lxml")

43 eles = soup.find_all("a")

44 flag = 0

45 for ele in eles:

46 if '#' in ele['href']:

47 continue

48 tmp = ele.string

49 if tmp is not None and '@' not in tmp:

50 flag += 1

51 ele_url = ele['href'].split('?')[0]

52 # print('{0} ==> {1}'.format(tmp,ele_url))

53 result[tmp] = ele_url

54

55 # print('Find out {0} datas.'.format(len(result)))

56 return result

57

58 def _writetotxt(self,contents):

59 """

60 將結果寫入文件中

61 """

62 print('寫入開始')

63 with open('urlcontent.txt','w') as f:

64 for title,value in contents.items():

65 f.write('{0} ==> {1}\n'.format(title,value))

66 print('寫入完畢')

67

68 def test_run(self):

69 self._login()

70 pagesources = self._gethtmlcontent()

71 result = self._geturl(pagesources)

72 self._writetotxt(result)

73

74

75 if __name__ == '__main__':

76 unittest.main()

第二種全都是使用webdriver來解析的:

1 #coding=utf-8

2

3 """

4 是為了獲取XXX系統菜單的url

5 使用的是selenium登錄,查找元素,獲取元素的屬性

6 """

7 from selenium import webdriver

8 import unittest

9 import time

10

11 # 登錄url

12 url = 'http://XXX.XXX.com/'

13 username = 'XXX'

14 password = 'XXX'

15

16 class GetUrl(unittest.TestCase):

17 def setUp(self):

18 self.dr = webdriver.Chrome()

19 self.dr.get(url)

20

21 def tearDown(self):

22 self.dr.quit()

23

24 def _login(self):

25 # time.sleep(2)

26 self.dr.find_element_by_id('username').send_keys(username)

27 self.dr.find_element_by_id('password').send_keys(password)

28 # self.dr.find_element_by_id('verifycode').send_keys('XXXXX')

29 self.dr.find_element_by_id('weblogin').click()

30 time.sleep(3)

31

32 def _geturl(self):

# 這里返回的是一個list,然后里面是一個個字典

33 result = list()

34 eles = self.dr.find_elements_by_css_selector('menu.u-menu a')

35 for ele in eles:

36 tmp = dict()

37 href = ele.get_attribute('href').split('?')[0]

38 # 獲取菜單 的名稱

39 name = ele.get_attribute('innerHTML')

40 if "" not in name:

41 tmp['name'] = name.strip()

42 tmp['href'] = href

43 result.append(tmp)

44 # print('name: {0},href: {1}'.format(name,href))

45 return result

46

47 def _writetotxt(self,contents):

48 print("一共{0}條數據".format(len(contents)))

49 print('寫入開始')

50 with open('urlcontent.txt','w') as f:

51 for content in contents:

52 f.write('{0} ==> {1}\n'.format(content['name'],content['href']))

53 print('寫入完畢')

54

55 def test_run(self):

56 self._login()

57 self._writetotxt(self._geturl())

58

59

60 if __name__ == '__main__':

61 unittest.main()

好了,就到這里吧。。。

總結

以上是生活随笔為你收集整理的python 导航栏_解析导航栏的url--selnium,beautifulsoup实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。