Python selenium ждет загрузки страницы без условия

1

Я хочу, чтобы селен подождал, прежде чем сделать снимок экрана. Когда я использую time.sleep(1), он дает мне эту ошибку:

Traceback (последний последний вызов): Файл "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 return self.get_screenshot_as_file (имя файла) Файл"/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- пакеты /selenium/webdriver/remote/we bdriver.py ", строка 1042, в get_screenshot_as_png return 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 return self.execute(Command.SCREENSHOT) ['value']

Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/we bdriver.py", строка 312, в ответе execute = 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, в execute return 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", строка 496, в _request resp = self._conn.getresponse() Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", строка 1331, в ответе getresponse.begin( ) Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", строка 297, в начале версии, статус, причина = self._read_status() Файл "/Library/Frameworks/Python.framework/Версии /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 return 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. Я просто сделал этот пример, чтобы сделать вопрос пасхальным.)

Теги:
python-3.x
selenium
selenium-webdriver

1 ответ

1
Лучший ответ

для добавления безусловного ожидания к driver.get(URL) в selenium, driver.set_page_load_timeout(n) с n = time/seconds и цикл:

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()
  • 1
    Хорошее объяснение !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню