Selenium ElementNotInteractiableException与ASP.NET报表查看器(Pytho



我正试图通过selenium从我们公司的ASP.NET ReportViewer中提取CSV报告。我已经点击了导出下拉菜单(见图(,但我无法点击csv按钮(它将下载csv报告(,我试着等待,然后点击没有结果。

我的代码:

driver = webdriver.Chrome(r'C:UsersUserchromedriver.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/布局:

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:UsersUserPycharmProjectsOnsite_automationmain.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:UsersUserPycharmProjectspythonProject3venvlibsite-packagesseleniumwebdriverremotewebelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:UsersUserPycharmProjectspythonProject3venvlibsite-packagesseleniumwebdriverremotewebelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:UsersUserPycharmProjectspythonProject3venvlibsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:UsersUserPycharmProjectspythonProject3venvlibsite-packagesseleniumwebdriverremoteerrorhandler.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秒的数值太小。

感谢您帮助我使用定位器@vitalis,我改了:

driver.switch_to.window(driver.window_handles[-1])
driver.implicitly_wait(120)

收件人:

time.sleep(120)  # sleep to enable report to load
driver.switch_to.window(driver.window_handles[-1])  # Switch to report window

它按预期发挥了作用。

最新更新