python - Selenium ElementNotInteractableException 与 ASP.NET 报告查看器 (Python)
问题描述
我正在尝试通过 selenium 从我们公司的 ASP.NET ReportViewer 中提取 CSV 报告。我已经点击了导出下拉菜单(见图),但我无法点击 csv 按钮(它将下载 CSV 报告)我尝试等待然后点击没有结果。
我的代码:
driver = webdriver.Chrome(r'C:\Users\User\chromedriver.exe')
url = 'Logon.aspx' # target url
driver.get(url) # open url
driver.find_element_by_xpath('//*[@id="ctl00_maincontent_txtUsername"]').send_keys('_user') # username cred
driver.find_element_by_xpath('//*[@id="ctl00_maincontent_txtPassword"]').send_keys('_pswd') # pass
driver.find_element_by_xpath('//*[@id="ctl00_maincontent_btnLogin"]').click() # click login btn
driver.find_element_by_xpath('//*[@id="JobsReports"]').click() # click job report btn
driver.find_element_by_xpath('//*[@id="ctl00_maincontent_TRCB3"]').click() # click 'Task details' check box
driver.find_element_by_xpath('//*[@id="ctl00_maincontent_RunReportsBtn"]').click() # click view report btn
time.sleep(3)
driver.switch_to.window(driver.window_handles[-1])
driver.implicitly_wait(120)
# driver.find_element_by_xpath('//*[@id="ReportViewer1_ctl05_ctl05_ctl00_ctl00"]/table/tbody/tr/td/input').click()
# driver.implicitly_wait(120)
driver.find_element_by_xpath('//*[@id="ReportViewer1_ctl05_ctl04_ctl00_ButtonLink"]').click() # click save dropdown
driver.implicitly_wait(3)
driver.find_element_by_xpath('/html/body/form/div[3]/div/span/div/table/tbody/tr[3]/td/div/div/div[4]/table/tbody/tr/td/div[2]/div[2]/a').click() # click 'CSV' to download
HTML / 布局:
<div style="border: 1px solid rgb(51, 102, 153); background-color: rgb(221, 238, 247); cursor: pointer;">
<a title="CSV (comma delimited)" alt="CSV (comma delimited)" onclick="$find('ReportViewer1').exportReport('CSV');" href="javascript:void(0)" style="color: rgb(51, 102, 204); font-family: Verdana; font-size: 8pt; padding: 3px 8px 3px 32px; display: block; white-space: nowrap; text-decoration: none;">CSV (comma delimited)</a>
</div>
错误:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\Onsite_automation\main.py", line 32, in <module>
driver.find_element_by_xpath('/html/body/form/div[3]/div/span/div/table/tbody/tr[3]/td/div/div/div[4]/table/tbody/tr/td/div[2]/div[2]/a').click() # click 'view report' btn
File "C:\Users\User\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Users\User\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\User\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\User\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=90.0.4430.72)
谢谢你的帮助!
解决方案
尝试
driver.find_element_by_xpath("//a[contains(@title, 'CSV (comma delimited)')]").click()
它应该解决一个定位器问题。如果您决定使用隐式等待,请将其放大 (10)。3 秒太小了。
推荐阅读
- python - (Selenium) 运行许多性能较低的 firefox 浏览器
- excel - 无法设置 PivotItem 类的 Visible 属性
- app-store - 错误 ITMS-90164:“com.apple.developer.ubiquity-kvstore-identifier”密钥的代码签名权利无效
- php - 如何在视图中分离 RepeatedType 小部件?
- ionic-framework - 关闭浏览器后 ionic InAppBrowser 请求未经授权
- swift - SCNNode SCNAction.move(to:) 未运行但被调用 - Swift
- amazon-web-services - 如何为域和子域安装 SSL 证书
- celery - Django/Celery:max_retries 用于重试,但打印值始终是 Celery 默认值 (3)
- python - 如何使用熊猫更改转置数据框的布局
- java - Gradle bootrun 使用 openjdk 11 失败