繼昨天完成輸入搜尋條件之後點搜尋,可看到目前搜尋出來的工作結果
但是內容有很多,因此需要做網頁下拉的動作滑到最底頁,以便獲取全部的網頁內容
而網頁下拉的javascript語法為:
window.scrollTo(0, document.body.scrollHeight);
在這邊可以使用selenium提供的execute_script()此方法來執行javascript語法
但在104的網頁使用此方法做下拉時,還會遇到一個問題:
自動加載只能加載到第15頁,第16頁以後則要去點"手動載入第16頁"的按鈕才會載入內容
因此在16頁以後要再另外寫個判斷手動點頁數按鈕的部分,才能繼續將全部資料載完
代碼如下:
pre_height=0
new_height=0
qty=0
while True:
time.sleep(1.5)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
new_height=driver.execute_script("return document.body.scrollHeight")
if new_height>pre_height:
qty+=1
print(f'第{qty}次載入')
pre_height=driver.execute_script("return document.body.scrollHeight")
else:
print('auto loading finished.')
driver.save_screenshot('auto_last_page.png')
#104的自動載入只會載到第15頁,第16頁以後要手動點下一頁
manual=1 # 手動載入的第一頁
while manual !=0:
try:
driver.find_element(By.XPATH,f'//button[contains(text(),"第{15+manual}頁")]').click()
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
print(f'手動載入第{15+manual}頁')
manual+=1
time.sleep(3.5)
except:
manual=0
print('到最底啦')
driver.save_screenshot('last_page.png')
time.sleep(3)
soup=BeautifulSoup(driver.page_source,'html.parser')
job_blocks=soup.select('.js-job-item')
print(f'共有{len(job_blocks)}筆資料')
break