Chciałbym wydobyć biografię faceta Herberta W. Gullquista. Pochodzi z „Manager Timeline” po kliknięciu jego nazwiska („Gullquist jest dyrektorem ds. inwestycji i generalnym partnerem w Lazard Asset Management...”) na tej stronie internetowej: https://www.morningstar.com/funds/xnas/lziex/ludzie

Kod nie mógł znaleźć faceta. Czy to dlatego, że kod kliknął w złym miejscu?

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

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
driver.get("https://www.morningstar.com/funds/xnas/lziex/people")

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sal-component-ctn sal-component-manager-timeline-chart']//text[text()='Gullquist']/.."))).click()
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.sal-modal-biography.ng-binding.ng-scope"))).text.strip())

Ponadto, co zrobić, jeśli chcę, aby wszystkie biografie wszystkich (łącznie 9 osób) z osi czasu menedżera zamiast określonej osoby? Każda pomoc jest bardzo ceniona.

0
AlanZ 20 grudzień 2019, 06:28

3 odpowiedzi

Nieprawidłowa wartość xpath w wierszu:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sal-component-ctn sal-component-manager-timeline-chart']//text[text()='Gullquist']/.."))).click()

Zmień z poniższą wartością:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[text()='Herbert W. Gullquist']"))).click()
0
frianH 20 grudzień 2019, 06:41

Jest 6 obecnych menedżerów i 3 byłych menedżerów. Aby uzyskać oba linki

current= driver.find_elements(By.XPATH, "//*[@class='current-manager-timeline']//*[name()='g']//*[name()='text']") past = driver.find_elements(By.XPATH, "//*[@class='past-manager-timeline']//*[name()='g']//*[name()='text']") total_links = current+past

Po uzyskaniu linków możesz je przełączać i wyodrębniać biografię za pomocą

bio = driver.find_element(By.XPATH, "//div[contains(@class, 'biography')]").text

0
Abhishek Prashant 20 grudzień 2019, 09:20
Dziękuję Ci bardzo. Jestem w stanie użyć pierwszego bloku kodu, aby uzyskać linki. Jak mogę przełączać linki?
 – 
AlanZ
20 grudzień 2019, 09:48

Aby pobrać biografię „Herberta W. Gullquista” ze strony internetowej https://www .morningstar.com/funds/xnas/lziex/people i zamknij wyskakujące okienko, ponieważ element znajduje się w tagu <tag>, musisz wywołać WebDriverWait dla element_to_be_clickable() i możesz skorzystać z następujących Strategii lokalizatora:

  • Blok kodu:

    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.morningstar.com/funds/xnas/lziex/people")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sal-component-ctn sal-component-manager-timeline-chart']//*[name()='svg']//*[name()='g' and @class='past-manager-timeline']//*[text()='Herbert W. Gullquist']"))).click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.sal-modal-biography.ng-binding.ng-scope"))).text.strip())
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='sal-component-ctn sal-modal-scrollable']//div[@class='sal-manager-modal__modalHeader']//button[@class='sal-icons sal-icons--close mds-button mds-button--icon-only']"))).click()
    
  • Wyjście konsoli:

    Gullquist is chief investment officer and a general partner with Lazard Asset Management, his employer since 1982. Previously, he spent 12 years as general partner, managing director, and chief investment officer of Oppenheimer & Company. Prior to that, from 1970 to 1971, he served as the director of Stuyvesant Asset Management, a company he founded. He has also worked at First National Bank of Chicago.
    

Odpowiednią dyskusję znajdziesz w Jak klikać elementy SVG za pomocą XPath i Selenium WebDriver za pośrednictwem Javy

0
DebanjanB 20 grudzień 2019, 10:29
Wielkie dzięki! Czy możesz również pomóc mi zamknąć wyskakujące okienko po wyodrębnieniu biografii? Próbowałem WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "svg.mds-icon.mds-button__icon.mds-button__icon--left"))).click() ale tak się nie stało kliknij przycisk zamykania
 – 
AlanZ
20 grudzień 2019, 10:23
Dodano linię kodu zamykającą wyskakujące okienko po wyodrębnieniu biografii. Sprawdź zaktualizowaną odpowiedź i daj mi znać status.
 – 
DebanjanB
20 grudzień 2019, 10:30