0

最近心血来潮想采集下学校教务系统的班级名单,网站是这样的,点击专业课名称会弹出上课信息,然后点击班级名单会弹出学生名单,先用selenium模拟点击了专业名称,成功弹出了班级信息,但是却无法进一步模拟点击班级名单,打印出网页代码发现根本就没有内部弹出这个窗口的代码。。。。这是为什么?

def open_page():

browser = webdriver.Chrome()
browser.get('网址')
browser.find_element_by_id('username').send_keys('。。。')
browser.find_element_by_id('password').send_keys('。。。')
browser.find_element_by_class_name('btnsubmit').click()
browser.find_element_by_id('contentParent_dgData_Pager1_lnkPage4').click()
browser.find_element_by_id('contentParent_dgData_hykClass_0').click()
#hykStudent是弹出窗口后班级名单的id但是却找不到
browser.find_element_by_id('hykStudent').click()
#打印出网页代码 代码中也找不到 使用selenium利用chrome浏览器已经成功弹出了上课信息窗口 
print(browser.page_source)

6个回答

1

已采纳

应该是frame或者window的问题
你看看弹出的窗口是frame还是window,switch_to_frame or switch_to_window
再find_element

0

上不了你们学校网站,一般来说用selenium点到班级上课信息后,可以用火狐的xpath试着找一下,挺好用的

0

设置等待,有可能时因为没有等待时间,页面元素没加载出来你就执行点击事件了,页面元素有可能是一次加载的,或者用requests看一下

0

弹出的窗口不属于原窗口的内容, 你的捕获弹出的窗口
driver.window_handles#获取所有窗口句柄

0

窗口弹出是需要时间的,这个时间肉眼感觉不到,可能是0.1秒。但是你代码执行的时候,它只会顺序执行,不会等待。临时解决可以先sleep等待1秒,看看问题有没有解决,但这并不是一个好方法。selenium中有显式等待和隐式等待,这才是处理元素的正确姿势,建议好好学习一下。

0

是frame切换的问题 没有找到frame的id和name 使用索引成功切换 成功获取了窗口

撰写答案