【发布时间】:2021-03-26 11:32:44
【问题描述】:
我目前正在尝试使用 Python 上的 Selenium 抓取网站 https://demanda.ree.es/visiona/peninsula/demanda/tablas/2021-03-26/2,通过一个简单的代码,该代码必须单击箭头以更改可视化的日期,然后单击导致下载 CSV 文件。重复 1000 次以下载 1000 个 csv 文件。我试图通过使用以下代码来做到这一点:
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get('https://demanda.ree.es/visiona/peninsula/demanda/tablas/2021-03-25/2')
for i in range(1000):
WebDriverWait(driver,2).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='md-icon-button main-menu md-button md-ink-ripple']"))).click()
WebDriverWait(driver,2).until(EC.element_to_be_clickable((By.XPATH,"//span[@class='export-csv']"))).click()
driver.close()
但是,当我尝试运行代码时,它成功打开浏览器并单击箭头,但由于某种原因卡住了,无法单击导致文件下载的元素。我该如何解决这个问题?
python内部返回的错误如下:
---------------------------------------------------------------------------
TimeoutException Traceback (most recent call last)
<ipython-input-132-c47407eb9220> in <module>
5 for i in range(2):
6 WebDriverWait(driver,2).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='md-icon-button main-menu md-button md-ink-ripple']"))).click()
----> 7 WebDriverWait(driver,2).until(EC.element_to_be_clickable((By.XPATH,"//span[@class='export-csv']"))).click()
8 driver.close()
~/opt/anaconda3/lib/python3.8/site-packages/selenium/webdriver/support/wait.py in until(self, method, message)
78 if time.time() > end_time:
79 break
---> 80 raise TimeoutException(message, screen, stacktrace)
81
82 def until_not(self, method, message=''):
TimeoutException: Message:
流程如下:
【问题讨论】:
-
它是否点击了箭头?我对此表示高度怀疑。 Xpath 有两个匹配项 - imgur.com/a/1xukf85
-
如果你想点击左箭头试试这个 -
//button[@class='md-icon-button main-menu md-button md-ink-ripple'][1]右箭头试试这个 -//button[@class='md-icon-button main-menu md-button md-ink-ripple'][2] -
@Madhan 实际上它确实单击了箭头并且页面正确更改(可能是因为它自动选择了第一个)。我尝试将箭头线更改为您的建议,并且以这种方式也可以正常工作,但是在尝试定位并按下第二个按钮时仍然卡住
-
你可以试试这个 xpath 下载 csv
//table[@id='tabla_generacion']//img吗? -
这个有效!太棒了,非常感谢!
标签: python selenium web-scraping