使用selenium访问https://smart.zj121.com/radarNew/index.html对地图调整中心位置再缩放,最后再执行截屏操作,设置了一个死循环,所以会在网页更新之后再次执行上述操作,但是时常截屏的图片发现网页加载不全,加了time.sleep(6)或者driver.implicitly_wait(5)也会有这种问题,显示等待的话不知道应该选取哪个元素,请问是否有其他办法可以解决,或者减少这种情况的出现。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import TimeoutException
import time
def scprt():
service = Service("C:/Users/bsb0/anaconda3/Scripts/chromedriver")
service.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox') #解决DevToolsActivePort文件不存在的报错,让Chrome在root权限下
options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
options.add_argument('window-size=4096x3200')#等号处不要加空格,否则报错
options.add_argument('--headless')
driver = webdriver.Chrome(options = options)
# visibility_element = EC.visibility_of_element_located(locator)
driver.maximize_window()
try:
driver.get('https://smart.zj121.com/radarNew/index.html')
driver.execute_script("map.setView({lat:27.8,lng:120.1}, 9.5)")
time.sleep(4)
driver.get_screenshot_as_file("d:/radar_prt/prt1.png")
driver.execute_script("map.setView({lat:28.8,lng:120.8}, 8.5)")
time.sleep(6)
driver.get_screenshot_as_file("d:/radar_prt/prt2.png")
except TimeoutException:
time.sleep(45)
driver.get('https://smart.zj121.com/radarNew/index.html')
driver.execute_script("map.setView({lat:27.8,lng:120.1}, 9.5)")
time.sleep(4)
driver.get_screenshot_as_file("d:/radar_prt/prt1.png")
driver.execute_script("map.setView({lat:28.8,lng:120.8}, 8.5)")
time.sleep(6)
driver.get_screenshot_as_file("d:/radar_prt/prt2.png")
driver.quit()
Service.stop()
可以尝试一下更新一下版本,说不好是兼容性的问题。有的时候你用的网络也有这种问题
看你问题的截图,应该是渲染问题,不然你设置的sleep时间也够长了,感觉不应该渲染不完全。建议取消无头模式,观察一下截图不完整的具体问题,如果是渲染问题,你可以选择增大等待时间,或者用
WebDriverWait,等待指定元素加载完毕后,再继续执行后续代码。
ps:我试了一下你的代码,我本地截图是完整的
加载这个,其实就可以类比平时看一些地图软件地图时的情况,它加载不出来也是就出现类似情况,可能是渲染显示时的问题,渲染显示与等待时间的问题。
Driver.maximize_window()
在程序中,卡顿页面之前加一个最大化窗口指令:
Driver.maximize_window()
如果你不是用GPU加速的话,而你又要求窗口很大,chrome的显示会有限制,建议使用gpu加速试试,即注释掉下面的命令:
options.add_argument('--disable-gpu')
源代码没加载出来么