Нажмите и загрузите файл Excel с Selenium с Python

Пытался загрузить с помощью Selenium и Python файл excel, нажав кнопку на странице, но не удалось. Ниже приведен класс, извлеченный из страницы:

<div class = "tabPanel_func ts2_icon_map ts2_icon_excel" onclick = "ExportExcel('tblTS2', tsData);"\>\</div\>`

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

Ниже приведен мой код:

url = "http://www.aastocks.com/tc/stocks/market/high-low-stocks.aspx?catg=1&period=3&t=1"
driver = webdriver.Chrome()
driver.get(url)

Испытания кода:

driver.find_element(By.XPATH, "//\[contains(@onclick, ExportExcel('tblTS2', tsData)')\]")` 

или

driver.find_element(By.XPATH, "//\*\[@class= 'tabPanel_func ts2_icon_map ts2_icon_excel'\]")` 

или

driver.find_element(By.CSS_SELECTOR, "//button\[contains(@onclick,'ExportExcel('tblTS2', tsData)')\]").click()`

Все подходы провалились.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте приведенное ниже выражение XPath:

//*[contains(@class,'tabPanel_func ts2_icon_map ts2_icon_excel')]

Объяснение XPath: поиск по всему DOM(//*), который содержит атрибут = class и его значение = tabPanel_func ts2_icon_map ts2_icon_excel

Выше выражение XPath найдет следующий элемент:

Ниже приведена полная строка кода для нажатия кнопки Export:

driver.find_element(By.XPATH,"//*[contains(@class,'tabPanel_func ts2_icon_map ts2_icon_excel')]").click()

Попробуйте после xpath нажать на экспорт в Excel.

//div[contains(@onclick,'ExportExcel')] 

код:

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//div[contains(@onclick,'ExportExcel')] 
"))).click()
Ответ принят как подходящий

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

  • Используя CLASS_NAME:

    driver.get('http://www.aastocks.com/tc/stocks/market/high-low-stocks.aspx?catg=1&period=3&t=1')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, "ts2_icon_excel"))).click()
    
  • Использование CSS_SELECTOR:

    driver.get('http://www.aastocks.com/tc/stocks/market/high-low-stocks.aspx?catg=1&period=3&t=1')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.ts2_icon_excel[onclick^='ExportExcel']"))).click()
    
  • Использование XPATH:

    driver.get('http://www.aastocks.com/tc/stocks/market/high-low-stocks.aspx?catg=1&period=3&t=1')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[starts-with(@onclick, 'ExportExcel')]"))).click()
    
  • Примечание. Вы должны добавить следующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

ExportExcel

Это работает, спасибо! Что делать, если я хочу загрузить файл на определенный диск и в определенное место, а не на диск C «Загрузить»? Есть ли у вас какие-либо предложения о хороших книгах, которые охватывают эти знания, которые я могу читать и изучать, кроме переполнения стека?

Ed T 09.02.2023 16:16

Я пробовал '''options.add_experimental_option("prefs", {"download.default_directory":r"D:/"}) s = Service('chromedriver.exe') driver = webdriver.Chrome(service=s, options= варианты) ''', но не удалось загрузить.

Ed T 09.02.2023 16:59

Звучит как отдельный вопрос. Не стесняйтесь поднимать новый вопрос с вашим новым требованием.

undetected Selenium 09.02.2023 18:39

Спасибо ! Сделаем и поднимем новый вопрос для этого.

Ed T 10.02.2023 10:34

Другие вопросы по теме