0

我正在编写代码以从网页下载一些文件。代码开始正常,有 27 个文件要下载,但在前 5 次下载后,我收到以下元素的 ElementClickInterceptedException 错误。谁能告诉我为什么代码停止下载其余文件?

这是(部分)代码:

        actions = ActionChains(driver)

        xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")
        print(len(xlbr2))
        for link in range(4, 27):
            time.sleep(2)
            print(link)
            try:
                xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")
                xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")[link]
                actions.move_to_element(xlbr2).perform()
                xlbr2.click()
                # xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")[link].click()
                time.sleep(1)
                download = driver.find_element_by_xpath('/html/body/div[2]/div[8]/div/div/div/div[1]/div/div[2]/ul/div/div[4]/a/button/i')
                print('downloading file...')
                download.click()
                time.sleep(2)
                driver.back()
                # time.sleep(2)

            except Exception as err:
                print(f"{type(err).__name__} was raised: {err}")
4

2 回答 2

0

您没有共享指向您正在处理的页面的链接,所以我不知道那里的实际问题是什么,但是我猜您必须滚动页面才能到达这些元素。
所以这样的事情会有所帮助:

actions = ActionChains(driver)
xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")
print(len(xlbr2))
for link in range(len(xlbr2)):
    time.sleep(2)
    print(link)
    try:
        xlbr2 = driver.find_elements_by_xpath("//*[@class='mf mf-xbrl']")[link]  
        actions.move_to_element(xlbr2).perform()            
        xlbr2.click()
        time.sleep(1)
        download = driver.find_element_by_css_selector('button.saveButton')
        print('downloading file...')
        download.click()
        time.sleep(2)
        driver.back()
        time.sleep(2)
    except Exception as err:
        print(f"{type(err).__name__} was raised: {err}")

你将不得不导入这个

from selenium.webdriver.common.action_chains import ActionChains

也可能在页面底部有一些接受 cookie 横幅,您应该关闭......
需要查看实际页面才能给出更准确的答案。

于 2022-01-12T22:25:31.877 回答
0

driver.execute_script('arguments[0].click()', element) 这解决了问题

于 2022-01-17T15:50:42.837 回答