Selenium Timeout Exception - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь найти самую дешевую цену на странице поиска Google.Я получил ошибку тайм-аута, даже если я использую WebDriverWait.Это мой код:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

example_url = 'https://www.google.com/flights?hl=it#flt=/m/07_pf./m/01f62.2019-05-24;c:EUR;e:1;0px:2;sd:1;t:f;tt:o'

def get_price(url):
        driver = webdriver.Firefox()
        driver.get(url)
        try:
             wait = WebDriverWait(driver, 20)
             element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, '.gws-flights-results__cheapest-price')))
             print(element)
        finally:
             price = driver.find_element_by_css_selector('.gws-flights-results__cheapest-price').text
             driver.quit()
        price = float(price.split(' ')[0])
        driver.quit()
        return price       


price = get_price(example_url)
print(price)

Я получил эту ошибку:

Traceback (most recent call last):
  File "semplice.py", line 23, in <module>
    price = get_price(example_url)
  File "semplice.py", line 13, in get_price
    element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, '.gws-flights-results__cheapest-price')))
  File "/home/andrea/ENTER/lib/python3.4/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

На терминале не было напечатано ни одного сообщения.Просто это сообщение.В чем проблема ?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

@ kafels правильно, вам не нужна точка перед локатором класса.Однако, как только вы это исправите, вам не нужно делать второй поиск в finally.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

example_url = 'https://www.google.com/flights?hl=it#flt=/m/07_pf./m/01f62.2019-05-24;c:EUR;e:1;0px:2;sd:1;t:f;tt:o'

def get_price(url):
    driver = webdriver.Firefox()
    driver.get(url)
    wait = WebDriverWait(driver, 20)
    try:
        element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 
                                                             'gws-flights-results__cheapest-price')))
    except Exception as exc:
        raise
    finally:
        # no need to look for the element here since you do it in the try section.
        driver.quit()

    print(element)
    price = element.text
    price = float(price.split(' ')[0])
    return price

price = get_price(example_url)
print(price)
1 голос
/ 22 мая 2019

Ошибка в том, что вы передаете точку, чтобы найти элемент по имени класса:

element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, '.gws-flights-results__cheapest-price'))

Измените его на:

element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'gws-flights-results__cheapest-price')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...