赞
踩
当使用Selenium爬取一些页面时,有些页面加载速度特别慢,而我们又不需要等待页面完全加载完毕。
此时可以通过driver.set_page_load_timeout()
来设置页面超时时间。
捕获异常,并执行js脚本window.stop()
即可实现,代码如下。
- from selenium import webdriver
-
- driver = webdriver.Chrome()
- driver.set_page_load_timeout(3)
-
- try:
- driver.get('https://hk.louisvuitton.com/zht-hk/homepage')
- print('finish load ....')
- except Exception:
- driver.execute_script('window.stop()')
- print(driver.title)
- finally:
- driver.quit()
报错处理:
如果遇到如下,超时错误,可以尝试更新chromedriver驱动。
Selenium分离式启动Webdriver服务和浏览器
Selenium在启动浏览器时实际进行里两步操作,
在某些情况下如果,你需要分离式启动服务和连接服务的过程,可以使用以下步骤,参考代码如下:
- from selenium import webdriver
- from selenium.webdriver.chrome.service import Service # 导入chrome的服务启动方法
- # 1. 启动服务
- service = Service('/usr/local/bin/chromedriver') # 传入chromedriver路径,实例化一个服务应用
- service.start() # 启动服务
-
- # 2. 连接服务
- driver = webdriver.Remote(service.service_url) # 连接服务
-
- driver.get('https://www.baidu.com/')
- driver.quit()
Selenium保存网页为mhtml方法
MHTML即MIME HTML,归档网页,将样式和脚本全部集成到一个文件中。
Chrome Devtools Protcal API中包含了Page.captureSnapshot方法,可以获取到网页的mhtml格式内容。
我们使用Selenium的driver.execute_cdp_cmd()执行该命令后,将结果写入文件即可,示例代码如下。
- from selenium import webdriver
-
- driver = webdriver.Chrome()
- driver.get('https://www.qq.com/')
-
- # 1. 执行 Chome 开发工具命令,得到mhtml内容
- res = driver.execute_cdp_cmd('Page.captureSnapshot', {})
-
- # 2. 写入文件
- with open('qq.mhtml', 'w', newline='') as f: # 根据5楼的评论,添加newline=''
- f.write(res['data'])
-
- driver.quit()
保存结果,如下图,可以使用浏览器打开。
更多的cdp方法可以参考 (chrome-devtools-protocol)[Chrome DevTools Protocol]
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。