selenium 之百度搜尋,結果列表翻頁查詢

2022-06-29 13:03:10 字數 4598 閱讀 7189

selenium

by:授客qq1033553122

例項解決問題:解決

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

:print

('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

:print

('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...