2017-08-14 18 views
3

私はPythonでスクリプトを書いて、最初のページからペジネーションを経て別のページを横切るようにセレンを使いました。しかし、いくつかの数字を除いて、次のページボタンのオプションはありません。その番号をクリックすると、次のページに移動します。とにかく、私は私のスクリプトでそれをしようとすると、それは2番目のページをクリックしてそこに行くが、それはもはやスライドしない、私は次のエラーをスローする破る3番目のページに行くのではなく、意味した。次のページに移動することはできません

line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 

私がしようとしているスクリプト:

<tr align="right" valign="top" style="font-size:XX-Small;font-weight:normal;white-space:nowrap;"> 
     <td colspan="8"><span>Page: </span><a href="javascript:__doPostBack('dgAwards$ctl01$ctl01','')">1</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl02','')">2</a>&nbsp;<span>3</span>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl04','')">4</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl05','')">5</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl06','')">6</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl07','')">7</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl08','')">8</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl09','')">9</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl10','')">10</a>&nbsp;<a href="javascript:__doPostBack('dgAwards$ctl01$ctl11','')">...</a></td> 
    </tr> 

ところで、改ページのオプションはで "検索" ボタンをクリックすると表示されます。改ページ番号があり、その中

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Chrome() 
driver.get("http://www.cptu.gov.bd/AwardNotices.aspx") 
wait = WebDriverWait(driver, 10) 
driver.find_element_by_id("imgbtnSearch").click() 
for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#dgAwards > tbody > tr > td > a"))): 
    item.click() 
driver.quit() 

要素メインページ。

+0

'wait.until'は要素を返しません。あなたは 'find_element(s)'メソッドを使う必要があります – Amit

+0

私は最初にそれを試みましたが、それも助けをもたらしませんでした。 – SIM

+0

ここで、例外 – Amit

答えて

3

あなたはclick()ページの更新を行い、それらの要素が

あなたは以下試すことができます古くなった後ので、あなたは、事前定義された要素のリストを反復することはできません:これは、あなたが切り替えることができるようにすべきである

from selenium.common.exceptions import NoSuchElementException  

page_counter = 2 
while True: 
    try: 
     if not page_counter % 10 == 1: 
      driver.find_element_by_link_text(str(page_counter)).click() 
      page_counter += 1 
     else: 
      driver.find_elements_by_link_text("...")[-1].click() 
      page_counter += 1 
    except NoSuchElementException : 
     break 

可能であれば次のページへ

+0

あなたはウィザードの賢者である、Anderssonです。これは私が今までに遭遇した最高のテクニックです。 – SIM

+0

なぜ、「page_counter%10」のパーセンテージですか?私の無知を許しなさい。 – SIM

+1

このコンテンツでは、*%*ではありませんが、[*モジュロ*](https://stackoverflow.com/questions/12754680/modulo-operator-in-python)ではありません。 'page_counter%10 == 1'は' 10 + 1'( '11')、' 20 + 1'( '21')、' 30 + 1'( '31')に等しい' page_counter'を返すことを意味します。 ..それは、テキスト '11'、 '21'、 '31'とのリンクの代わりに '... 'とのリンクがあるからです。 – Andersson

関連する問題