Получение Dynami c Табличные данные с селеном Python - PullRequest
0 голосов
/ 13 февраля 2020

Итак, я пытаюсь проанализировать эти данные из динамической таблицы c с селеном, он продолжает получать старые данные со страницы 1, я пытаюсь получить данные о сборе страниц 2, я пытался найти другие ответы , но не нашли, некоторые говорят, что мне нужно добавить период ожидания, и я сделал, однако это не сработало.

 from selenium import webdriver

from bs4 import BeautifulSoup

from selenium.webdriver.support import expected_conditions as EC


browser = webdriver.Firefox()
browser.get('https://www.nyse.com/listings_directory/stock')

symbol_list=[]

table_data=browser.find_elements_by_xpath("//td");

def append_to_list(data):

    for element in data:

      symbol_list.append(element.text)


append_to_list(table_data)

pages=browser.find_elements_by_xpath('//a[@href="#"]')


for page in pages:

    if(page.get_attribute("rel")== "next"):

        if(page.text=="NEXT ›"):

            page.click()

            browser.implicitly_wait(100)

            for elem in browser.find_elements_by_xpath("//td"): //still fetchs the data from page 1

                print(elem.text)

            #print(symbol_list)

1 Ответ

0 голосов
/ 13 февраля 2020

Я изменил ваш скрипт, как показано ниже.

Вы должны получить элемент для l oop, иначе это вызовет исключение ссылки на устаревший элемент.

И использование WebDriverWait для ожидания элементов, которые будут виден перед поиском элемента.

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

browser = webdriver.Chrome()
browser.get('https://www.nyse.com/listings_directory/stock')

symbol_list = []


while True:
    table_data = WebDriverWait(browser, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//table//td")))
    for i in range(1, len(table_data)+1):
        td_text = browser.find_element_by_xpath("(//table//td)["+str(i)+"]").text
        print(td_text)
        symbol_list.append(td_text)
    try:
        print("Go to next page ...")
        next_page = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[@href="#" and contains(text(),"Next")]')))
        next_page.click()
        sleep(3)
    except Exception as e:
        print(e)
        print("This is last page.")
        break
...