Python Selenium 爬取弹出窗口内容实战与常见问题解决
本文介绍使用 Python 的 Selenium 库抓取页面点击后弹出的窗口信息。通过 Firefox 浏览器配合 GeckoDriver,利用 XPath 定位元素并切换窗口句柄获取数据。针对自动化测试中点击按钮弹窗不显示的问题,提供使用模拟键盘 Enter 键替代 click() 的解决方案,并附带完整代码示例。
Python Selenium 爬取弹出窗口内容实战
本文内容仅作为个人学习笔记整理。
本实例演示如何在 Python 环境下爬取弹出窗口的内容。在实际网页交互中,某些关键信息往往隐藏在点击操作后弹出的窗口内,此时常规的页面抓取方法可能无法直接获取所需数据。
本文选用 Selenium 工具进行实现,读者可自行查阅相关资料。安装过程相对繁琐,且本文测试环境为 Firefox 浏览器。未选择 IE 浏览器是因为新版 IE 在 Selenium 环境下存在兼容性问题,目前尚未找到更优的替代方案。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os,time
browser=webdriver.Firefox(executable_path='d:\\Anaconda\\pkgs\\spyder-3.2.8-py36_0\\geckodriver.exe') #括号中的也是非典型的安装firefox驱动的方法,常规的方法我一直试的不行,但这种方法包管行.
browser.get('http://XXX.XXX.com/fenxi/yazhi-734155') #输入你的目标网址
time.sleep(3) #打开网址后休息3秒钟,可用可不用
browser.find_element_by_xpath('//*[@id="6"]/td[4]').click() #找到想要点击的元素,然后进行点击动作,让窗口弹出来
handle=browser.current_window_handle #获得当前窗口,也就是弹出的窗口句柄,什么是句柄我也解释不清楚,反正它代表当前窗口
browser.switch_to_window(handle) #转到当前弹出窗口
s=browser.find_element_by_xpath('//*[@id="tipdiv"]/div[2]/table/tbody') #找到装有你要信息的元素
print(s.text) #打印文本内容
time.sleep(2) #休息2秒,让浏览器喘口气
browser.find_element_by_xpath('//*[@id="link106"]').click() #最后关掉弹出窗口. 这又是一个非典型方法,我是直接找到小窗口的叉叉来点击关掉了,实际上Selinium有关闭当前窗口的方法,也就是close()或者quit(),但问题是搞来搞去不行啊?我的理解是目前的窗口依然是那个弹出的窗口,但handle.close等其它方法都不行. 所以我干脆用这样的方法,找到叉叉的元素,然后点击.
在元素定位方面,推荐使用 XPath 方式。一个便捷技巧是利用浏览器开发者工具,找到目标元素的源代码后,右键选择“Copy Xpath”即可快速生成定位路径,操作十分高效。
自动化测试中弹窗不显示的解决方案
补充知识:在 Python 自动化测试场景中,若点击“查看”按钮后弹窗未能正常显示,该如何处理?
在使用 Python 编写 UI 自动化测试脚本时,可能会遇到一种情况:明明代码中已经调用了 .click() 方法点击“查看”按钮,但预期的弹窗却始终无法弹出。
针对上述问题,可以尝试模拟键盘操作来解决。通过调用 .send_keys(Keys.ENTER) 方法模拟按下回车键,往往能有效触发弹窗显示。
具体代码实现如下:
driver.find_element_by_xpath("//*[@id='main']/div/div[3]/div/div/div[2]/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[9]/div/button/span").click()
将上述代码修改为:
driver.find_element_by_xpath("//*[@id='main']/div/div[3]/div/div/div[2]/div/div[2]/div[2]/div/div[2]/table/tbody/tr/td[9]/div/button/span").send_keys(Keys.ENTER)

以上关于使用 Python 爬取弹出窗口信息的实例即为全部内容,希望能为读者提供参考,并欢迎大家继续支持相关技术社区。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













