selenium之
by:授客qq:1033553122
例項解決問題:解決
selenium driver
獲取web
頁面元素時
,元素過期問題思路1
# -*- coding: utf-8 -*-
from
selenium
import
webdriver
import
time
if__name__ ==
"__main__"
: driver = webdriver.firefox()
driver.maximize_window()
driver.get(
'') driver.implicitly_wait(5)
driver.find_element_by_id(
'kw1'
).send_keys(
'selenium'
) driver.find_element_by_id(
'su1'
).click()
page = driver.find_element_by_id(
'page'
) pages = page.find_elements_by_tag_name(
'a')
#查詢所有翻頁跳轉鏈結
#設定滾動條位置為底部
js =
'document.documentelement.scrolltop=10000'
foreach
inpages:
driver.execute_script(js)
#拖動滾動條到底部
each.click()
driver.execute_script(js)
time.sleep(3)
driver.quit()
結果:點選第
3頁時,程式出錯
selenium.common.exceptions.staleelementreferenceexception: message: u'element not found in the cache - perhaps the page has changed since it was looked up' ; stacktrace:即在
cache
中找不到元素,可能是在元素被找到之後頁面變換了。
這就說明,當前頁面發生跳轉之後,存在
cache
中的與這個頁面相關的元素也被清空了思路2
:基於思路
1的錯誤結果分析
>
# -*- coding: utf-8 -*-
from
selenium
import
webdriver
import
time
if__name__ ==
"__main__"
: driver = webdriver.firefox()
driver.maximize_window()
driver.get(
'') driver.implicitly_wait(5)
driver.find_element_by_id(
'kw1'
).send_keys(
'selenium'
) driver.find_element_by_id(
'su1'
).click()
page = driver.find_element_by_id(
'page'
) pages = page.find_elements_by_tag_name(
'a')
js =
'document.documentelement.scrolltop=10000'
total = len(pages)
has_pre_page =
false
page_num =
0 foriin
range(total):
driver.execute_script(js)
pn=10
page_num = page_num +1#
設定頁面號
one_page = driver.find_element_by_
css_selector(
'p[id="page"]
>a:nth-of-type('
+str(page_num)+
')')
one_page.click()
#備註以下小段**描述了頁面變化規律,這個得自己去研究
ifnot
has_pre_page:
#點選第21
has_pre_page =
true
page_num = page_num +
1 if
page_num %7==
0:#page_num等於7
時,頁號減
1 page_num = page_num -
1 time.sleep(2)
driver.execute_script(js)
time.sleep(2)
time.sleep(3)
driver.quit()
改進版(
自動翻頁,前翻頁後翻頁
)# -*-
coding: utf-8 -*-
from
selenium
import
webdriver
import
time
if__name__ ==
"__main__"
:driver = webdriver.firefox()
driver.maximize_window()
driver.get(
'')driver.implicitly_wait(5)
driver.find_element_by_id(
'kw1'
).send_keys(
'selenium
selenium')#
測試資料
selenium
zhidashso dld#selenium zhidashso dldld
driver.find_element_by_id(
'su1'
).click()
js =
'document.documentelement.scrolltop=10000'
total =0#
頁面數is_next_page =
true
#page_num =0 #
要點選的頁面號
#往後翻頁
while
is_next_page:
#'sv_page\=1' in
one_page.get_attribute('href')
driver.execute_script(js)
page_num = page_num +1#
total = page_num
#記錄頁面數
value=str(page_num)
try:
#查詢指定頁面
one_page =
driver.find_element_by_css_selector(
'p[id="page"]
>a[href*=pn\='
+value+
']')
one_page.click()
time.sleep(1)
driver.execute_script(js)
time.sleep(1)
except
('no
next page'
)is_next_page =
false
total = total -
1break
#往前翻頁
while
total >=0:
driver.execute_script(js)
try:
total = total -
1value = str(total)
one_page =
driver.find_element_by_css_selector(
'p[id="page"]>a[href*=pn\='
+value+
']')
one_page.click()
time.sleep(1)
driver.execute_script(js)
time.sleep(1)
except
('no
pre page'
)break
;time.sleep(3)
driver.quit()
正則抓取百度搜尋結果
key 電腦 url key result file get contents url pattern class resitem si preg match all pattern,result,matches echo print r matches 1 print r matches 2 ke...
模仿百度搜尋
中國春節網 歡迎光臨中國春節網,您現在的位置是中國春節網首頁!年獸 的傳說 熬 年的傳說 萬年建立歷年說 中國 倒貼福字 除夕夜歡迎光臨中國春節網,您現在的位置是中國春節網首頁!年獸 的傳說 熬年的傳說 萬年建立歷年說 中國 倒貼福字 除夕夜.中國春節網 歡迎光臨中國春節網,您現在的位置是中國春節網...
百度搜尋技巧
例子 電影 qvod 查詢詞 電影 在搜尋結果中,qvod 被必需被包含在搜尋結果中。6 site搜尋範圍限定在特定站點中 您如果知道某個站點中有自己需要找的東西,就可以把搜尋範圍限定在這個站點中,提高查詢效率。site 後面跟的站點網域名稱,不要帶 http site 和站點名之間,不要帶空格。7...