2017-01-25 5 views
0

html looks like this Я написал этот код, чтобы очистить все курсы от URL-адреса. Для этого я пытаюсь получить количество курсов, используя xpath. Но это ничего мне не дает. Где я поступаю неправильно?Найти текст элемента, используя xpath в selenium-python NOt Working

import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from time import sleep 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import WebDriverWait` 

class FinalProject:

def __init__(self,url= "https://www.class-central.com/subject/data-science"):` 
     self.url = url 
     base_url = 'https://www.class-central.com' 
     self.error_flag = False 
     self.driver = webdriver.Chrome(<path to chromedriver>) 
     self.driver.get(self.url) 
     sleep(2) 
     self.count_course_and_scroll() 

    def count_course_and_scroll(self): 
     wait = WebDriverWait(self.driver, 30); 
     ele = wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'Not right now, thanks.'))); 
     ele.click() 
     print "----------------------POP UP CLOSED---------------------" 
     total_courses = self.driver.find_element_by_xpath("//span[@id='number-of-courses']") 
     print total_courses 
     print total_courses.text 
     self.driver.close() 

fp = FinalProject()

+0

Пожалуйста, поделитесь html-коды, над которыми вы работаете. – Jose

+1

У вас есть ошибки? – Guy

+0

@Jose Я поделился снимком экрана html. Я не знаю, как мне поделиться полной. –

ответ

0

text Если не работает, вы можете попробовать get_attribute

print total_courses.get_attribute('text') 
#or 
print total_courses.get_attribute('innerHTML') 
+1

'print total_courses.get_attribute ('innerHTML')' дал мне результат, но 'print total_courses.get_attribute ('text')' дал NOne как вывод. Почему это так? и почему 'text' не работает? –

+0

@python_user Я не знаю. Это сработало для меня. – Guy

+0

@python_user, возможно, вы можете извлечь исходный текст 'total_courses = self.driver.find_element_by_xpath (" // span [span [@ id = 'number of of course]] ")' 'print total_courses.text'. Это даст вам «187 доступных курсов» – Guy

0
ele = wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'Not right now, thanks.'))); 
ele.click() 
print "----------------------POP UP CLOSED---------------------" 
total_courses = self.driver.find_element_by_xpath("//span[@id='number-of-courses']") 

В тха t код, я подозрительно 2 вещи:

  1. Всегда ли появляется всплывающее окно?
  2. Составил ли текст number-of-courses вовремя?

Если вы не уверены 1. Я бы рекомендовал положить его в попытке поймать

А насчет 2. - ждать, пока какой-нибудь текст на этом элементе не появится

try: 
    ele = wait.until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, 'Not right now, thanks.'))); 
    ele.click() 
finally: 
    total_courses = wait.until(EC.presence_of_element_located(By.XPATH, "//span[@id='number-of-courses' and text() != '']") 
    print total_courses.text 
+1

'Try' /' catch'? ... вы уверены? :) Это определенно не код 'Python'. https://docs.python.org/2.7/tutorial/errors.html#handling-exceptions – Andersson

+0

Спасибо, я явно не знаком с python. Но идея все та же. –

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

  • Нет связанных вопросов^_^