2016-01-28 2 views
1

Я пытаюсь использовать веб-соскабливание, чтобы получить стоимость парковки по этой ссылке, https://application.parkbytext.com/accountus/prepay.htm?locationCode=1127. Это $ 2 за день, который я пытаюсь получить. Я использую python + selenium, но просто не могу получить парковочную цену. Ниже приведен код, я использую, но иногда я попал в цель, но большую часть времени я получаю ошибкуКак использовать селен, чтобы получить стоимость парковки?

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"class name","selector":"gwt-RadioButton"}.

Может кто-нибудь помочь? заблаговременно

def downtownparking(driver): 
driver.get("https://application.parkbytext.com/accountus/prepay.htm?locationCode=1127") 
try: 
    ### driver.wait = WebDriverWait(driver, 16) 
    ### driver.implicitly_wait(20) 
    cr = driver.find_element_by_class_name("gwt-RadioButton") 
    dayprice = cr.find_element_by_tag_name("label") 
    print (dayprice.text) 

ответ

1

Загрузка страницы требует времени. В настоящий момент webdriver пытается найти элемент, он еще не присутствует в дереве DOM. Добавить Explicit Wait:

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

cr = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "gwt-RadioButton")) 
) 

В стороне, примечание, я бы использовать имя input «s вместо:

cr = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//input[@name='periodType']/following-sibling::label")) 
) 
print(cr.text) # prints "Day - $2.00" 
+0

Спасибо за большую помощь. Оно работает. На самом деле мне было интересно, почему это вызвало ожидание. Поэтому я попробовал driver.wait = WebDriverWait (драйвер, 16) или driver.implicitly_wait (20), но не работал. Вы знаете, почему явное или неявное ожидание в этом случае не работает? – teapot

+0

@teapot Я думаю, что это довольно хороший обзор: http://stackoverflow.com/questions/10404160/when-to-use-explicit-wait-vs-implicit-wait-in-selenium-webdriver. Кроме того, см. Http://stackoverflow.com/help/someone-answers. – alecxe

+0

Конечно, я приму ответ. Мне просто нужно подождать не менее 10 минут, чтобы нажать кнопку. Ты обалденный! Спасибо за обзорную ссылку, я посмотрю. – teapot

Смежные вопросы