使用Selenium在python中进行网页抓取的问题

e4eetjau  于 2022-12-04  发布在  Python
关注(0)|答案(2)|浏览(207)

我试图刮在Python中使用 selenium 。我想从这个网站和部分的太阳能数据:https://www.caiso.com/TodaysOutlook/Pages/supply.html#section-renewables-trend

我认为我遇到的问题是Chart data (CSV)菜单选项不起按钮的作用,所以单击它不起作用。这是我在单击“图表数据(CSV)”菜单选项前后检查元素时看到的。
之前:<a class="dropdown-item mb-0" id="downloadRenewablesCSV" data-type="text/csv">Chart data (CSV)</a>
之后:<a class="dropdown-item mb-0" id="downloadRenewablesCSV" data-type="text/csv" href="data:text/csv;charset=utf8,Renewables%2007%2F20%2 ... [alot of encoded data] ...2C209%2C211%2C211%2C211%2C212%2C211%2C211%2C210%0A" download="CAISO-renewables-20220720.csv">Chart data (CSV)</a>
最初,我认为它只是一个按钮元素,可以下载csv文件,并尝试这样做:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome(executable_path='PATH')
driver.get('https://www.caiso.com/TodaysOutlook/Pages/supply.html')
button = driver.find_element(by='xpath',value='/html/body/div[1]/div[3]/div[8]/div/div/div[2]/nav/div[3]/div/a[1]')
button.click()

这不管用,有什么建议吗,我对 selenium 还不太了解,抱歉.

tyu7yeag

tyu7yeag1#

您尝试单击下载按钮,但实际上没有展开下拉列表,单击下拉列表后,元素变为可交互。
只有在单击带有文本 Download<button>时,show类才会动态添加到div
下面的代码应该在点击下拉按钮后工作

dropdown = driver.find_element(By.XPATH, "//button[@id='dropdownMenuRenewables']")
dropdown.click()
download_b = driver.find_element(By.XPATH, "//a[@id='downloadRenewablesCSV']")
download_b.click()

这将为您下载文件

kg7wmglp

kg7wmglp2#

JS路径交互:

Xpath选择器可能有点挑剔,我会回到基本的,并尝试通过JS路径与元素交互。我能够重现错误,并使用JS路径下载报告。实现以下更新的代码:

driver.get('https://www.caiso.com/TodaysOutlook/Pages/supply.html')
driver.execute_script("el = document.querySelector('#downloadRenewablesCSV');el.click();")

相关问题