我正在尝试自动更新 Web 应用程序中的字段。因此,登录后网址不会更改
这是我到目前为止的代码
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
path_to_chromedriver = "C:/chromedriver"
browser = webdriver.Chrome(executable_path=path_to_chromedriver)
"""Login Page"""
login_url = "url"
browser.get(login_url)
username = browser.find_element_by_id("username")
password = browser.find_element_by_id("password")
username.send_keys("username")
password.send_keys("password")
browser.find_element_by_name("submit").click()
"""Application front page"""
searchBar = browser.find_element_by_id("searchBar")
searchBar.send_keys("item to be searched")
button = browser.find_element_by_id("searchButton")
button.click()
"""Click on item on search results"""
#starting here, everything doesn't work
wait = WebDriverWait(browser,10)
item = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#item')))
item.click()#this never works as it just times out
本网站是一个网络应用程序。每次点击后我都打印出了页面源代码,并且在主页之后它不会更改,但在 Chrome 浏览器中它确实会更改。显式和隐式等待都不起作用。有什么建议吗?
提前致谢
--编辑--
我有点犹豫要不要发布 html,因为它是一个自定义的 Web 应用程序。但是,正文的类是"dhtmlx_winviewport",并且 Web 应用程序中更改的部分以类似
<iframe id = "frameID" name = "frame1" src="some link that shows the item I searched for" height="400" width="400" frameboorder="0" style="z-index: 10; position: absolute; visibility: visible; width:400px; height:800px;"> == $0
我想点击的是表格中的单元格
<td align="left" valign="middle" title="title">title</td>
我得到的错误是
回溯(最近一次调用(: 文件 "C:\script.py",第 45 行,在 item = wait.until(EC.presence_of_element_located(By.CSS_SELECTOR,'css'((( 文件 "C:\Users\me\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\support\wait.py",第 80 行,直到 引发超时异常(消息、屏幕、堆栈跟踪( selenium.common.exceptions.TimeoutException: 消息:
如果你的应用程序使用 JQuery 来处理 Ajax 请求,你可以在继续之前检查JQuery.active
是否为零。 像这样:
count = 0
while(count < max_secs):
count += 1
is_ajax_done = driver.execute_script("return window.JQuery != undefined && JQuery.active == 0")
if is_ajax_done:
# continue
else:
time.sleep(1)
您的 Wait 对象实例化在哪里,它不在这个代码块中吗? 比如我的是——
self._wait = WebDriverWait(driver, 15)
您也可以尝试使用"可点击的元素"而不是"位于元素的存在">
item = self._wait.until(EC.element_to_be_clickable((By.XPATH,"//MY_XPATH_IS_HERE")))
您是否收到任何错误消息?项目==无返回为真吗?