Мой код:
count = 1
next_page_string = "javascript:__doPostBack('ctl00$MainContent$grdResults','Page$" + str(count) + "')"
td_page_number_list = driver.find_elements_by_xpath("//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")
for x in td_page_number_list:
if x.get_attribute("href") == next_page_string:
driver.execute_script("__doPostBack('ctl00$MainContent$grdResults','Page$" + str(count) + "')")
Код прерывается, когда driver object
переходит к execute_script
после выполнения условия, давая мне ошибку:
stale element reference: element is not attached to the page document
Похоже, что это имеет какое-то отношение к используемому циклу for. Я попробовал неявное ожидание без везения.
Заранее спасибо.
Мне понадобился простой break
сразу после driver.execute_script()
. Фактически он выполнял __doPostBack
, но цикл for все еще выполнялся после выполнения условия if. Все, что мне нужно было сделать, это выйти из цикла после выполнения условия, чего вы можете достичь, используя условие break.
Каждый раз, когда скрипт нажимает на один номер страницы в цикле, страница менялась и селен рассматривал ее как новую страницу. Таким образом, эти номера страниц, найденные на странице перед щелчком, недействительны на новой странице.
Чтобы устранить проблему, простой способ - снова найти номера страниц на новой странице в каждой итерации цикла.
count = 1
next_page_string = "javascript:__doPostBack('ctl00$MainContent$grdResults','Page$"
+ str(count) + "')"
td_page_number_list = driver.find_elements_by_xpath(
"//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")
for x in td_page_number_list:
if x.get_attribute("href") == next_page_string:
driver.execute_script("__doPostBack('ctl00$MainContent$grdResults','Page$"
+ str(count) + "')")
// find page numbers on new page again after click
// i think you need to add some wait before find again
// like: time.sleep(5) or using selenium wait api
td_page_number_list = driver.find_elements_by_xpath(
"//*[@id='MainContent_grdResults']/tbody/tr[22]/td/table/tbody/tr/td/a")
__doPostBack()
сstaleness_of()
методаstaleness_of()
следующим образом. Как мне ждать вызова JavaScript __doPostBack через Selenium и WebDriver