Python селен извлечь данные из таблицы и нажмите - PullRequest
0 голосов
/ 12 сентября 2018

Уважаемое сообщество stackoverflow,

Недавно я столкнулся с проблемой, пытаясь извлечь данные из:

https://www2.sgx.com/securities/corporate-information?country=SINGAPORE

Моя цель - щелкнуть каждую ссылку в таблице, начиная с 3CNERGY LIMITED, котораяоткрывает другую вкладку веб-страницы, распакуйте ее, закройте эту вкладку после распаковки, вернитесь на главную страницу и нажмите следующую ссылку.

Мои проблемы: не удается найти элемент, позволяющий циклически проходить по таблицеи не могу переключиться с главной веб-страницы на вкладку, а затем обратно.

Мой прогресс: я думал, что

<sgx-table-list data-rendered-rows="20" data-visible-rows="10" style="min-width: 560px; transform: translateY(0px);" data-rendered-index="0" data-visible-index="0" xpath="1">

позволит мне перебрать таблицу, но len возвращает только 1 ..

Я смог щелкнуть первую веб-страницу, используя:

CE = driver.find_element_by_xpath("//a[contains(@href, 'infopub')]")

, но без возможности циклического перемещения по таблице, скрипт просто выполняет первый щелчок.Кроме того, я не могу изменить его, чтобы найти элементы по xpath, потому что он становится списком и .click () не работает.

Любая помощь будет принята с благодарностью.Спасибо !!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Это должно быть довольно просто.Процесс должен выглядеть следующим образом:

  1. Перейти на страницу
  2. Закрыть всплывающее диалоговое окно
  3. Дождаться загрузки данных
  4. Loopпо ссылкам компании нажимая каждую ссылку, получая данные с новой вкладки, закрывая новую вкладку, переключаясь обратно в главное окно

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

url = "https://www2.sgx.com/securities/corporate-information?country=SINGAPORE"
driver.get(url)

wait = WebDriverWait(driver, 10)

# close the preview warning dialog
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#beta-warning-dialog button"))).click()

# wait for the data to be loaded
company_name_locator = (By.CSS_SELECTOR, "div.table-container a")
wait.until(EC.visibility_of_element_located(companyNameLocator))

main_window_handle = driver.current_window_handle
# loop through visible company links
links = list(filter(lambda e: e.is_displayed(), driver.find_elements(companyNameLocator)))
for link in links
    link.click()

    # wait for new tab to open
    wait.until(lambda d: len(d.window_handles) == 2)
    driver.switch_to_window(driver.window_handles[1])

    # scrape something off the page
    print(wait.until(EC.visibility_of_element_located(By.ID, "ctl07_lblCompName")).text)

    # close the current tab
    driver.close()

    # wait for the tab to be closed and switch back to the main tab
    wait.until(lambda d: len(d.window_handles) == 1)
    driver.switch_to_window(main_window_handle)
0 голосов
/ 12 сентября 2018

Продолжайте и попробуйте следующее. Я использовал XPath Helper Wizard , который является дополнением для Chrome.

Основная таблица из ссылки: (измените строку sgx-table [ RowNumberHere ], чтобы просмотреть компании в столбце 1)

driver.find_element_by_xpath("//sgx-table-row[1]/sgx-table-cell-link[contains(@class, 'sgx-table-cell')]").click()

Внутри ссылки на компанию Ссылка: (Измените / tr [ RowNumberHere ] на вашу переменную для зацикливания)

driver.find_element_by_xpath("//table[3]/tbody/tr[1]/td[contains(@class, 'basicInfoContentContainerRight')]")

Вернуться на страницу:

driver.back()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...