Получение текста из скрытых элементов с использованием селена python - PullRequest
1 голос
/ 08 апреля 2020

Я использую селен в python для создания веб-информации с веб-сайта, но я столкнулся с проблемой, заключающейся в том, что после нажатия на веб-сайт, чтобы получить больше строк из таблицы, появившиеся строки имеют hidden-xs hidden-sm и я не могу найти способ получить эти элементы. Мой код ниже. Можете ли вы чем-нибудь мне помочь?

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
import time
import pandas as pd


flight_Code=[]
Date=[]
Departure=[]
Arrival=[]
aircraft_code=[]

Code=["ph-bfy"]

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

chrome_path= "C:/Users/hugol/Documents/chromedriver.exe"
chrome_options=Options()
#chrome_options.add_argument({'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'})
chrome_options.add_argument("--no-sandbox")


driver=webdriver.Chrome(chrome_path, options=chrome_options)

url="https://www.flightradar24.com/"
driver.get(url)

login_button=WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.ID, 'premiumOverlay')))
login_button.click()

username=WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.ID, 'fr24_SignInEmail')))
username.send_keys(*******)
password=WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.ID, 'fr24_SignInPassword')))
password.send_keys(*******)

login_button=WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.ID, 'fr24_SignIn')))
login_button.click()

time.sleep(2)

for i in Code:
    new_url="https://www.flightradar24.com/data/aircraft/"+i
    driver.get(new_url)

    more_button=WebDriverWait(driver, 1).until(EC.presence_of_element_located((By.ID, 'btn-load-earlier-flights')))
    more_button.click()

    # WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.ID, 'tbl-datatable')))

    for row in driver.find_elements_by_class_name("data-row"):
        try:
            flight_code=row.find_element_by_class_name("fbold").text
        except NoSuchElementException:
            flight_code=''

        try:
            flight_date=row.find_element_by_class_name("row").text
        except NoSuchElementException:
            flight_date=''

        try:
            flight_departure=row.find_elements_by_class_name("details")[4].text
        except NoSuchElementException:
            flight_departure=''
        try:
            flight_arrival=row.find_elements_by_class_name("details")[3].text
        except NoSuchElementException:
            flight_arrival=''

        flight_Code.append(flight_code)
        Date.append(flight_date)
        Departure.append(flight_departure)
        Arrival.append(flight_arrival)
        aircraft_code.append(i)

df=pd.DataFrame({'Code': flight_Code,'Date': Date, 'Departure': Departure, 'Arrival': Arrival, 'Aircraft':aircraft_code})

А сайт html выглядит так:

enter image description here

Спасибо ребята !!!

1 Ответ

1 голос
/ 08 апреля 2020

Вместо element.text используйте element.get_attribute("textContent")

flight_code=row.find_element_by_class_name("fbold").get_attribute("textContent")

Обновление :

После нажатия кнопки «Далее» необходимо дождаться, пока элемент будет виден. Используйте явное ожидание.

WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".data-row")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...