Как выбрать элемент из выпадающего меню без выбора с помощью Selenium - PullRequest
2 голосов
/ 26 февраля 2020

Попытка выбрать другие финансовые отчеты (по умолчанию это отчет о прибылях и убытках), а также переключаться между вторым списком годовых / квартальных. Я могу сузить, чтобы получить атрибуты списков, но я не могу взаимодействовать со списком.

import time
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver

symbol = 'bmo'
driver = webdriver.Chrome()
driver.get('https://web.tmxmoney.com/financials.php?qm_symbol={}'.format(symbol))
time.sleep(2)
dropdown = driver.find_elements_by_css_selector('a.qmod-dropdown_toggle.qmod-type-toggle + ul.qmod-dropdown-menu > li > a')

for option in dropdown:
    if option.get_attribute('innerText') == 'Balance Sheet':
        option.send_keys('Balance Sheet')

1 Ответ

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

Чтобы выбрать опцию с текстом Бухгалтерский баланс , вы должны WebDriverWait для element_to_be_clickable(), и вы можете использовать следующие Стратегии локатора :

  • xpath:

    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
    
    driver.get('https://web.tmxmoney.com/financials.php?qm_symbol=bmo')
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h4[text()='Financials for Bank of Montreal']")))
    driver.execute_script("window.scrollBy(0,600)")
    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='qmod-dropdown_toggle qmod-type-toggle']/span[text()='Income Statement']")))).perform()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='qmod-dropdown-menu']//li/a[text()='Balance Sheet']"))).click()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...