我正在尝试自动更新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有点犹豫,因为它是一个自定义的网络应用程序。但是,正文的类是“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行,in 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行,直到 引发TimeoutException(消息,屏幕,堆栈跟踪) selenium.common.exceptions.TimeoutException:消息:
答案 0 :(得分:0)
如果您的应用程序使用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)
答案 1 :(得分:0)
Wait的对象实例化在哪里,是不是在这段代码中? 例如我的是 -
self._wait = WebDriverWait(driver, 15)
您也可以尝试使用'元素可点击'而不是'元素存在'
item = self._wait.until(EC.element_to_be_clickable((By.XPATH,"//MY_XPATH_IS_HERE")))
您收到任何错误消息吗? item == None是否返回true?