Невозможно получить доступ к остальным элементам через xpath в al oop после доступа к первому элементу - Webscraping Selenium Python - PullRequest
1 голос
/ 12 января 2020

Я пытаюсь почистить данные с сайта sciencedirect. Я пытаюсь автоматизировать процесс исключения, обращаясь к проблемам журнала один за другим, создавая список xpath и зацикливая их. когда я запускаю l oop, я не могу получить доступ к остальным элементам после доступа к первому журналу. Этот процесс работал для меня на другом веб-сайте, но не на этом.

Я также хотел знать, есть ли лучший способ получить доступ к этим элементам помимо этого процесса.

#Importing libraries
 import requests
 import os
 import json
 from selenium import webdriver
 import pandas as pd
 from bs4 import BeautifulSoup  
 import time
 import requests
 from time import sleep

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

 #initializing the chromewebdriver|
 driver=webdriver.Chrome(executable_path=r"C:/selenium/chromedriver.exe")

 #website to be accessed
 driver.get("https://www.sciencedirect.com/journal/journal-of-corporate-finance/issues")

 #generating the list of xpaths to be accessed one after the other
 issues=[]
 for i in range(0,20):
     docs=(str(i))
     for j in range(1,7):
         sets=(str(j))
         con=("//*[@id=")+('"')+("0-accordion-panel-")+(docs)+('"')+("]/section/div[")+(sets)+("]/a")
         issues.append(con)

 #looping to access one issue after the other
 for i in issues:
     try:
         hat=driver.find_element_by_xpath(i)
         hat.click()
         sleep(4)
         driver.back()
     except:
         print("no more issues",i)

enter image description here

1 Ответ

1 голос
/ 13 января 2020

Чтобы очистить данные с сайта sciencedirect https://www.sciencedirect.com/journal/journal-of-corporate-finance/issues, вы можете выполнить следующие действия:

  • Сначала откройте все аккордеоны.
  • Затем откройте каждый выпуск в корректоре TAB с помощью Ctrl + click().
  • Далее switch_to() во вновь открывшейся вкладке и очистите необходимое содержимое.
  • Кодовый блок:

    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
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    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.sciencedirect.com/journal/journal-of-corporate-finance/issues')
    accordions = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "li.accordion-panel.js-accordion-panel>button.accordion-panel-title>span")))
    for accordion in accordions:
        ActionChains(driver).move_to_element(accordion).click(accordion).perform()
    issues = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.anchor.js-issue-item-link.text-m span.anchor-text")))
    windows_before  = driver.current_window_handle
    for issue in issues:
        ActionChains(driver).key_down(Keys.CONTROL).click(issue).key_up(Keys.CONTROL).perform()
        WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
        windows_after = driver.window_handles
        new_window = [x for x in windows_after if x != windows_before][0]
        driver.switch_to_window(new_window)
        WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a#journal-title>span")))
        print(WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//h2"))).get_attribute("innerHTML"))
        driver.close()
        driver.switch_to_window(windows_before)
    driver.quit()
    
  • Консольный выход:

    Institutions, Governance and Finance in a Globally Connected Environment
    Volume 58
    Corporate Governance in Multinational Enterprises
    .
    .
    .
    

Ссылка

Соответствующее обсуждение можно найти в:

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