问题描述
我正在抓取一个网页,如果用户下载具有很多交易的文件,其元素会改变
例如,如果网络是“干净的”,我可以通过以下方式访问元素:
start_date = driver.find_element_by_id('zk_comp_172-real')
但是,如果用户手动请求许多事务,则会在页面顶部设置48个小时的指向文件的链接,并且所有HTML元素都被“替换”:
try:
...
start_date = driver.find_element_by_id('zk_comp_172-real')
...
except:
....
start_date = driver.find_element_by_id('zk_comp_181-real')
.....
但是事实证明,此ID根据用户已完成的文件请求数量而改变。因此,我尝试捕获两个异常,第一个捕获此错误:...
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="zk_comp_172-real"]"}
和第二个赶上一个:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="zk_comp_181-real"]"}
start_date = driver.find_element_by_id('zk_comp_178-real')
但是我不知道如何使用多个除外语句来实现这一点,我已经尝试了下一个:
try:
...
start_date = driver.find_element_by_id('zk_comp_172-real')
...
except selenium.common.exceptions.NoSuchElementException:
....
start_date = driver.find_element_by_id('zk_comp_181-real')
.....
except Exception:
....
start_date = driver.find_element_by_id('zk_comp_178-real')
.....
但是我收到了带有两个异常的回溯,但似乎最后一个除外没有执行:
Traceback (most recent call last)
During handling of the above exception,another exception occurred:
Traceback (most recent call last): ...
这两个异常属于同一类型,所以我不知道如何设置最后一个异常以使其正常工作,对此有何建议?
解决方法
如果我正确理解需求,则需要堆叠例外:
try:
...
start_date = driver.find_element_by_id('zk_comp_172-real')
...
except selenium.common.exceptions.NoSuchElementException:
try:
....
start_date = driver.find_element_by_id('zk_comp_181-real')
.....
except selenium.common.exceptions.NoSuchElementException:
....
start_date = driver.find_element_by_id('zk_comp_178-real')
.....
您还可以将ID添加到列表中并循环直到找到该元素。