Запуск этого кода дает мне ошибку исключения тайм-аута, почему? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать скрипт для автоматизации заполнения текстового поля селеном, но, похоже, не могу заставить его работать.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
import time

browser = 
webdriver.Chrome('C:/Users/xiang/PycharmProjects/testo/chromedriver.exe')
browser.get('https://zbib.org/')
wait = WebDriverWait(browser, 10)
name = "form-control form-control form-control-lg id-input"

try:
    input = wait.until(ec.presence_of_element_located((By.CLASS_NAME, 
    name)))
finally:
    browser.quit()

Я ожидал, что ошибки не будет, и браузер / драйвер не завершит работу, но я получаю эту ошибку в терминале, и браузер / драйвер завершает работу:

Traceback (most recent call last):
  File "C:/Users/xiang/PycharmProjects/testo/bib.py", line 14, in 
<module>
    input = wait.until(ec.presence_of_element_located((By.CLASS_NAME, 
name)))
  File "C:\Users\xiang\PycharmProjects\testo\venv\lib\site- 
   packages\selenium\webdriver\support\wait.py", line 80, in until
        raise TimeoutException(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message:

Пожалуйста, помогите, спасибо!

1 Ответ

0 голосов
/ 10 июля 2019

Ваш код определенно может вызвать исключение.WebDriverWait сгенерирует исключение TimeoutException, если оно не соответствует запросу после установленного времени ожидания.

Вы можете игнорировать исключение, добавив следующее:

from selenium.common.exceptions import TimeoutException
try:
    input = wait.until(ec.presence_of_element_located((By.CLASS_NAME, 
    name)))
except TimeoutException:
    pass
finally:
    browser.quit()

Поскольку в вашем className есть пробелы,следует использовать селектор CSS.Ваша переменная имени будет:

name = ".form-control.form-control.form-control-lg.id-input"

Ваш код будет:

from selenium.common.exceptions import TimeoutException
try:
    input = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 
    name)))
except TimeoutException:
    pass
finally:
    browser.quit()

Чтобы обеспечить закрытие вашего браузера, вы также можете использовать диспетчер контекста, например:

name = ".form-control.form-control.form-control-lg.id-input"
chromedriver = 'C:/Users/xiang/PycharmProjects/testo/chromedriver.exe'

with webdriver.Chrome(chromedriver) as browser:
    browser.get('https://zbib.org/')
    wait = WebDriverWait(browser, 10)
    try:
        input = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, name)))
    except TimeoutException:
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...