为了账号安全,请及时绑定邮箱和手机立即绑定

即使我使用的是 try 和 except 方法

即使我使用的是 try 和 except 方法

慕慕森 2022-03-05 15:14:33
我想使用 selenium 从网站下载数百万个 excel 文件。我当前的代码尝试处理 ElementNotVisibleException 的问题,但我的“尝试和例外”方法似乎不足。我试图实施一个尝试和例外解决方案,如果出现错误消息,我已指示 Selenium 等到“按钮”出现。import osimport timeimport csvfrom tqdm import tqdmimport pandas as pdfrom selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import ElementNotVisibleExceptionfrom selenium.common.exceptions import ElementClickInterceptedExceptionworking_directory = r"xx"os.chdir(working_directory)options = webdriver.ChromeOptions() prefs = {        "download.default_directory": r"xx",       "download.prompt_for_download": False,       "download.directory_upgrade": True}options.add_experimental_option("prefs", prefs)driver = webdriver.Chrome(r"C:xxx\chromedriver.exe", options = options) driver.get("website")# Logindriver.find_element_by_class_name("smallLoginBox").click()driver.implicitly_wait(1)time.sleep(2) driver.find_element_by_id('loginFormUC_loginEmailTextBox').send_keys('EMAIL')driver.find_element_by_id('loginFormUC_loginPasswordTextBox').send_keys('PASWORD')driver.find_element_by_xpath("//input[@value='Logg inn']").click()# Get a custom list of firmsbedrifter  = []with open("./listwithIDs.csv") as csvDataFile:    csvReader = csv.reader(csvDataFile)    for row in csvReader:        bedrifter.append(row[0])我希望代码能够下载所有文件(如果有),但会出现 ElementNotVisibleException 或 ElementClickInterceptedException。
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

为了确保元素不仅存在可见,而且还可以点击检查 clicability 作为等待条件:

element = WebDriverWait(driver, 120).until(EC.element_to_be_clickable((By.ID, "exportExcel"))).click()

更多关于 Python 等待的信息可以在这里找到。


查看完整回答
反对 回复 2022-03-05
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可能会遇到这些异常,因为它们发生在except子句中,而不是在try. 请查看回溯以确定哪一行引发了异常。这应该告诉你问题出在哪里。此外,如果您想等待元素可见,您应该使用visibility_of_element_located而不是presence_of_element_located


查看完整回答
反对 回复 2022-03-05
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

在对元素执行任何操作之前,首先检查它是否可见这是示例代码:


wait = WebDriverWait(self.browser, 15)

wait.until(EC.visibility_of_element_located(("element_path")))

driver.find_element_by_xpath("element_path").click()


查看完整回答
反对 回复 2022-03-05
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信