作者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/cn.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