首页 文章

Python selenium在没有条件的情况下等待页面加载

提问于
浏览
1

我想让selenium在拍摄截图之前等待 . 当我使用time.sleep(1)时,它给了我这个错误:

回溯(最近一次调用最后一次):文件“test.py”,第12行,在driver.save_screenshot('page.png')文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ site-packages / selenium / webdriver / remote / we bdriver.py“,第1033行,在save_screenshot中返回self.get_screenshot_as_file(filename)文件”/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site -packages / selenium / webdriver / remote / we bdriver.py“,第1010行,在get_screenshot_as_file png = self.get_screenshot_as_png()文件”/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site- packages / selenium / webdriver / remote / we bdriver.py“,第1042行,在get_screenshot_as_png中返回base64.b64decode(self.get_screenshot_as_base64() . encode('ascii'))文件”/Library/Frameworks/Python.framework/Versions/ 3.6 / lib / python3.6 / site-packages / selenium / webdriver / remote / we bdriver.py“,第1052行,在get_screenshot_as_base64中返回self.execute(Command.SCREENSHOT)['value']

文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/we bdriver.py”,第312行,执行response = self.command_executor.execute( driver_command,params)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/re mote_connection.py”,第472行,执行返回self._request (command_info [0],url,body = data)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/re mote_connection.py”,line 496,在_request resp = self._conn.getresponse()文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py”,第1331行,在getresponse response.begin( )文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py”,第297行,在开始版本,状态,原因= self._read_status()文件“/ Library / Frameworks / Python.framework / Versions / 3.6 / lib / python3.6 / http / client.py“,第258行,在_read_sta中tus line = str(self.fp.readline(_MAXLINE 1),“iso-8859-1”)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/socket.py”,行586,在readinto中返回self._sock.recv_into(b)ConnectionResetError:[Errno 54]由对等方重置连接

这是我的代码:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
import os
import time

options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=options, executable_path = 
'/usr/local/bin/geckodriver', log_path=os.devnull)
driver.get('https://google.com/')
time.sleep(5)
driver.save_screenshot('page.png')
driver.quit()

如何在不收到此错误的情况下等待页面加载?

我知道你可以等待一个元素加载我只是想等待没有任何条件 .

(当然,在google.com上没有更多内容可以加载我只是用这个例子来制作复活节的问题 . )

1 回答

  • 1

    在selenium中添加无条件等待 driver.get(URL) ,用 n = time/seconds 和循环添加 driver.set_page_load_timeout(n)

    driver.set_page_load_timeout(n)        # Set timeout of n seconds for page load
    loading_finished = 0                   # Set flag to 0
    while loading_finished == 0:           # Repeat while flag = 0
        try:
           sleep(random.uniform(0.1, 0.5)) # wait some time
           website = driver.get(URL)       # try to load for n seconds
           loading_finished = 1            # Set flag to 1 and exit while loop
        except:
           logger.warn("timeout - retry")  # Indicate load fail
    else:
        driver.save_screenshot('page.png') # In case of flag = 1
        driver.close()
        driver.quit()
    

相关问题