作者ntumath (math mad)
看板Python
標題[問題] Selenium 擷取跳出視窗
時間Sat Jun 3 00:01:42 2017
大家好,再擷取網站內容的時候
遇到了跳出視窗,但試了一些方法還是沒辦法抓到跳出視窗的內容
以下是大概的code
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome('../chromedriver')
driver.get('
http://mops.twse.com.tw/mops/web/t05st10_ifrs')
Select(driver.find_element_by_id('isnew')).select_by_index(1)
driver.find_element_by_id('co_id').send_keys(2892)
driver.find_element_by_id('year').send_keys(102)
driver.find_element_by_id('month').send_keys(1)
driver.find_element_by_xpath("//input[@type='button' and\
@value=' 查詢 ']").click()
time.sleep(1)
driver.find_element_by_xpath("//id='t05st10_ifrs_form']/table[1]/\
tbody/tr[2]/td[3]/input").click()
driver.switch_to_window(driver.window_handles[1])
print(driver.page_source)
driver的handle確實換到跳出的視窗了,可是要取得視窗內的訊息會有錯誤
想請問怎麼解決,拜託大家了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.253.33
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1496419305.A.C18.html
1F:→ starcaspar: 考慮用requests嗎?06/03 22:43
3F:→ starcaspar: 原因是這樣的,他的window是由js產生出來的,沒有sour06/03 22:45
4F:→ starcaspar: ce code06/03 22:45
5F:→ starcaspar: 所以Page Source抓到空06/03 22:45
6F:→ starcaspar: 用Burp找到了POST方法,放在上面那個連結,參數可以依06/03 22:48
7F:→ starcaspar: 據你要的去調整06/03 22:48
謝謝!因為要動態展示怎麼爬網站的,所以暫時還需要用Selenium
但是js產生出來的視窗真的沒有辦法取得內容嗎,我看webdriver可以取得js產生的
alert text,但是我試過好像也不是alert。
※ 編輯: ntumath (140.112.253.33), 06/04/2017 19:38:59
8F:→ wennie0433: 你想要把source code全部秀出來? 還是抓某個欄位06/06 01:19
9F:→ wennie0433: 可以的話 想看一下你的error log06/06 01:35
10F:→ wennie0433: 因為我試過是可以把source code秀出來的06/06 01:36
Ok 晚點我可能會在重發一篇
11F:推 swds: sleep的秒數可能要設久一點,讓它source code都下載完06/06 09:32
12F:→ starcaspar: 不不,那不是時間問題06/06 11:02
13F:→ starcaspar: 正如我上面說的,他是js產生的,他有render之後的code06/06 11:02
14F:→ starcaspar: ,但沒有source code,所以你chrome可以按「檢查」,06/06 11:02
15F:→ starcaspar: 但是不能按「檢視原始碼」06/06 11:02
16F:→ starcaspar: 因此selenium的page source在這時候是拿不到東西的06/06 11:04
謝謝starcaspar的解釋,所以Selenium對於網頁用js展示出來的視窗是無法處理嗎? 如果
這樣那我也只好回到requests了
※ 編輯: ntumath (140.112.25.105), 06/06/2017 11:23:25
※ 編輯: ntumath (140.112.25.105), 06/06/2017 11:25:20
17F:→ starcaspar: 不不,只是我還沒找到方法而已 06/06 12:05
18F:→ wennie0433: 你可以改用Firefox, chrome確實不行 try it 06/06 17:26
19F:→ s860134: 實際上是有原始碼的XD 可以嘗試他還在載入的時候按F12 06/07 22:55
20F:→ s860134: 你會看到很明確的 chrome 的開發者工具是有抓到的... 06/07 22:55
22F:→ s860134: 感覺這個是個 webdriver 的 bug ,看要不要發個 issue 06/07 22:58
23F:→ starcaspar: 這個bug應該不是只是driver喔 06/07 23:23
24F:→ starcaspar: 你有對網頁右鍵檢視原始碼嗎? 06/07 23:23
25F:→ starcaspar: 切到window之後很多函數都卡住了 06/08 11:06
26F:→ starcaspar: 你介意覆寫他的openWindow函數嗎 06/08 11:06
27F:→ starcaspar: 你注意看,其實你要的東西都在那個函數產生的 06/08 11:06
28F:→ starcaspar: 如果用execute_script去覆寫或是另外執行這樣去取得資 06/08 11:06
29F:→ starcaspar: 料 06/08 11:06
30F:→ starcaspar: 另外其實我個人覺得selenium作用來測試,雖然他也是可 06/08 11:06
31F:→ starcaspar: 以作為爬蟲的目的啦 06/08 11:06
32F:→ starcaspar: 不然換個driver跑,或許還比較快解決 06/08 11:07
33F:→ rdman: 照你所說,你有試過直接抓跳出視窗裡面元件的XPath嗎? 07/13 15:13