[問題] Selenium 擷取跳出視窗

看板Python作者 (math mad)時間7年前 (2017/06/03 00:01), 7年前編輯推噓1(1032)
留言33則, 5人參與, 最新討論串1/2 (看更多)
大家好,再擷取網站內容的時候 遇到了跳出視窗,但試了一些方法還是沒辦法抓到跳出視窗的內容 以下是大概的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://www.ptt.cc/bbs/Python/M.1496419305.A.C18.html

06/03 22:43, , 1F
考慮用requests嗎?
06/03 22:43, 1F

06/03 22:44, , 2F

06/03 22:45, , 3F
原因是這樣的,他的window是由js產生出來的,沒有sour
06/03 22:45, 3F

06/03 22:45, , 4F
ce code
06/03 22:45, 4F

06/03 22:45, , 5F
所以Page Source抓到空
06/03 22:45, 5F

06/03 22:48, , 6F
用Burp找到了POST方法,放在上面那個連結,參數可以依
06/03 22:48, 6F

06/03 22:48, , 7F
據你要的去調整
06/03 22:48, 7F
謝謝!因為要動態展示怎麼爬網站的,所以暫時還需要用Selenium 但是js產生出來的視窗真的沒有辦法取得內容嗎,我看webdriver可以取得js產生的 alert text,但是我試過好像也不是alert。 ※ 編輯: ntumath (140.112.253.33), 06/04/2017 19:38:59

06/06 01:19, , 8F
你想要把source code全部秀出來? 還是抓某個欄位
06/06 01:19, 8F

06/06 01:35, , 9F
可以的話 想看一下你的error log
06/06 01:35, 9F

06/06 01:36, , 10F
因為我試過是可以把source code秀出來的
06/06 01:36, 10F
Ok 晚點我可能會在重發一篇

06/06 09:32, , 11F
sleep的秒數可能要設久一點,讓它source code都下載完
06/06 09:32, 11F

06/06 11:02, , 12F
不不,那不是時間問題
06/06 11:02, 12F

06/06 11:02, , 13F
正如我上面說的,他是js產生的,他有render之後的code
06/06 11:02, 13F

06/06 11:02, , 14F
,但沒有source code,所以你chrome可以按「檢查」,
06/06 11:02, 14F

06/06 11:02, , 15F
但是不能按「檢視原始碼」
06/06 11:02, 15F

06/06 11:04, , 16F
因此selenium的page source在這時候是拿不到東西的
06/06 11:04, 16F
謝謝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

06/06 12:05, , 17F
不不,只是我還沒找到方法而已
06/06 12:05, 17F

06/06 17:26, , 18F
你可以改用Firefox, chrome確實不行 try it
06/06 17:26, 18F

06/07 22:55, , 19F
實際上是有原始碼的XD 可以嘗試他還在載入的時候按F12
06/07 22:55, 19F

06/07 22:55, , 20F
你會看到很明確的 chrome 的開發者工具是有抓到的...
06/07 22:55, 20F

06/07 22:57, , 21F
06/07 22:57, 21F

06/07 22:58, , 22F
感覺這個是個 webdriver 的 bug ,看要不要發個 issue
06/07 22:58, 22F

06/07 23:23, , 23F
這個bug應該不是只是driver喔
06/07 23:23, 23F

06/07 23:23, , 24F
你有對網頁右鍵檢視原始碼嗎?
06/07 23:23, 24F

06/08 11:06, , 25F
切到window之後很多函數都卡住了
06/08 11:06, 25F

06/08 11:06, , 26F
你介意覆寫他的openWindow函數嗎
06/08 11:06, 26F

06/08 11:06, , 27F
你注意看,其實你要的東西都在那個函數產生的
06/08 11:06, 27F

06/08 11:06, , 28F
如果用execute_script去覆寫或是另外執行這樣去取得資
06/08 11:06, 28F

06/08 11:06, , 29F
06/08 11:06, 29F

06/08 11:06, , 30F
另外其實我個人覺得selenium作用來測試,雖然他也是可
06/08 11:06, 30F

06/08 11:06, , 31F
以作為爬蟲的目的啦
06/08 11:06, 31F

06/08 11:07, , 32F
不然換個driver跑,或許還比較快解決
06/08 11:07, 32F

07/13 15:13, , 33F
照你所說,你有試過直接抓跳出視窗裡面元件的XPath嗎?
07/13 15:13, 33F
文章代碼(AID): #1PCOlfmO (Python)
文章代碼(AID): #1PCOlfmO (Python)