iT邦幫忙

0

【Python】Selenium無法爬取公開資訊觀測站之「詳細資料」

  • 分享至 

  • xImage

求救各位python大神,我正在試著用selenium爬取公開資訊訊觀測站的即時重大訊息,
使用webdriver按下【詳細資料】按鈕可以成功開的了視窗,
但讀不到新跳出來的視窗,停在最後一行 html = driver.page_source,
程式就完全無回應,該按鈕也沒有網址,無法丟request,身為爬蟲新手不知道該怎麼辦了QQ

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from fake_useragent import UserAgent
from bs4 import BeautifulSoup

ua = UserAgent()
ua = ua.random
opts = Options()
opts.add_argument("user-agent={}".format(ua))
webdriver_path = "D:\chromedriver"
driver = webdriver.Chrome(executable_path=webdriver_path,options=opts)
#登入頁面
url = r'https://mops.twse.com.tw/mops/web/t05sr01_1'
driver.get(url)
#點擊詳細資料
driver.find_element(By.XPATH, '//*[@id="table01"]/form[2]/table/tbody/tr[3]/td[6]/input').click()
hand = driver.window_handles
#切換視窗
driver.switch_to.window(hand[-1])
html = driver.page_source
  • 公開資訊觀測站即時重大訊息網址:https://mops.twse.com.tw/mops/web/t05sr01_1
  • 【詳細資料】按鈕長相
    https://ithelp.ithome.com.tw/upload/images/20230206/20157496MOTHXeDz3P.png
看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-02-07 08:24:18 檢舉
hand = driver.window_handles
前面加點sleep看看,這網頁開窗口是靠js去處理的,加了很多參數。可能你在點擊後,窗口還沒產生,就執行下一行程式碼了。

不過的確如雷神所說,有api就去介接api,人家都給api了,用爬蟲只是徒增雙方困擾而已。
為啥要用 selenium 來爬公開資訊觀測站?有公開的OpenAPI啊
配合美麗湯就可以了
def chkinfo():
try:
# 強制等待
sleep(2)

# 等待篩選元素出現
WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, "table.hasBorder")
)
)
# 強制等待
sleep(2)
#找出公佈重大訊息的股票代號
html = urlopen(url)
bs = BeautifulSoup(html.read(),'html.parser')
Alltitle=bs.find_all('tr',{'class':'even'})
for title in Alltitle:
print(title.find('td').get_text())<--會印出有重大訊息的股票代號
except TimeoutException:
print("等待逾時,即將關閉瀏覽器…")
driver.quit()
class odd 也比照辦理就可以了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
Ray
iT邦大神 1 級 ‧ 2023-02-06 15:38:05
最佳解答

ㄟ....不是啊, 臺灣證券交易所有開放 OpenAPI 呀,
所有資訊都在 API 裡面可查到, 有必要去爬網頁嗎?
https://openapi.twse.com.tw/

可能是要練習爬蟲吧

我要發表回答

立即登入回答