寫使用硒webdriver的Python中一個簡單的測試功能:爲什麼selenium webdriver在每次函數調用時都訪問網絡?
from selenium import webdriver
def test_webdriver():
web = webdriver.PhantomJS()
web.get('http://example.com')
web.find_element_by_tag_name('html')
web.find_element_by_tag_name('head')
web.find_element_by_tag_name('meta')
web.find_element_by_tag_name('body')
web.find_element_by_tag_name('title')
web.find_element_by_tag_name('p')
web.find_element_by_tag_name('div')
這個功能了多時間比預期來運行,所以我CPROFILE異形它,看到一些線路是這樣的:
ncalls tottime percall cumtime percall filename:lineno(function)
...
9 0.000 0.000 0.157 0.017 .../python2.7/urllib2.py:386(open)
...
這清楚地表明webdriver正在訪問網絡每find
調用我的測試功能。
我以爲webdriver只需一次抓取一次DOM,然後在get()
之後抓取一次,然後在本地搜索和操作它,類似於BeautifulSoup。顯然它不是這樣工作,所以我留下了一些問題:
- 這是webdriver的正常,預期的行爲,或者只是我的一部分配置錯誤?
- 如果這是正常行爲,那麼有沒有辦法強制webdriver到而不是訪問網絡上的每個函數調用?
- 什麼是訪問網絡?它不能刷新每個
find
的頁面,只是沒有任何意義。
注:據我所知,在測試頁上的JavaScript可能會斷火意想不到的網絡電話,這就是爲什麼我使用http://example.com作爲我的測試頁面,以消除這種可能性。
在服務器控制檯上,它會記錄它獲取的每個請求以及它發回的每個響應 - 所以它就像查看服務器控制檯輸出一樣簡單,以查看你是否正確(我相信你是,所以+1) – Arran