简体   繁体   English

如何在 Python 中使用 Selenium chromedriver 单击按钮

[英]How to click a button with Selenium chromedriver in Python

Hi Guys (sorry in advanced for my english), I want to click a button in order to download a file from this page https://myterna.terna.it/SunSet/Public/Pubblicazioni?filter.IdSezione=585AF7EFCA196EBBE0532B889B0A6372 .嗨,伙计们(对不起,我的英语提前了),我想单击一个按钮,以便从此页面https://myterna.terna.it/SunSet/Public/Pubblicazioni?filter.IdSezione=585AF7EFCA196EBBE0532B889B0A6372下载文件。 This is my simple code:这是我的简单代码:

download_dir = 'C:/Users/Francesco.Borri/Desktop/Sunset'

options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : download_dir}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=options)
driver.get('https://myterna.terna.it/SunSet/Public/Pubblicazioni?filter.IdSezione=585AF7EFCA196EBBE0532B889B0A6372')

container1 = driver.find_element_by_class_name("row") #Until this class is OK
container2 = driver.find_element_by_class_name("col-sm-12 table-wrapper") # From this class NOPE

#button = container.find_element_by_class_name(CLASS_OF_THE_BUTTON)
#button.click()

The code opens the page correctly, but It's not able to find all the classes I'm looking for (in which inside one of them there is my precious button).该代码正确打开了页面,但它无法找到我正在寻找的所有类(其中一个里面有我珍贵的按钮)。 I studied the html page source and I found that the classes initially missing are created from a script (screenshot below) when the page is loaded.我研究了 html 页面源代码,发现最初缺少的类是在页面加载时从脚本(下面的屏幕截图)创建的。 I'm not familiar with Javascript and Ajax.我不熟悉 Javascript 和 Ajax。 Is there a way to find and to click my precious button?有没有办法找到并点击我珍贵的按钮?

PS: Now the file is downloaded but with this undefined error. PS:现在文件已下载,但出现此未定义错误。 I tried even to download it manually and I receive the same error.我什至尝试手动下载它,但我收到了同样的错误。 It looks that my chromedriver doesnt have the permissions to download files.看来我的 chromedriver 没有下载文件的权限。
在此处输入图像描述

Because there are many download buttons on the page, you will need to specify the title of the publication you wish to download when looking for your button.由于页面上有许多下载按钮,因此您需要在查找按钮时指定要下载的出版物的标题。 It is also recommended to invoke WebDriverWait on the element you are trying to click to ensure that it is visible before interacting with it:还建议在您尝试单击的元素上调用WebDriverWait以确保在与它交互之前它是可见的:

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

download_dir = 'C:/Users/Francesco.Borri/Desktop/Sunset'

options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : download_dir}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=options)
driver.get('https://myterna.terna.it/SunSet/Public/Pubblicazioni?filter.IdSezione=585AF7EFCA196EBBE0532B889B0A6372')


# Article name is "Prezzi Giornalieri Marginale Quarto Orari 20191111"

# wait on the download button for this article to exist
download_button = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//tr[td/span[text()='Prezzi Giornalieri Marginale Quarto Orari 20191111']]/td/div/a[contains(@class, 'download')]")))

# click the link to download
download_button.click()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM