簡體   English   中英

Python: selenium 點擊下一步按鈕

[英]Python: selenium click next button

我正在將 Python Selenium 與 ChromeDriver 一起使用,所有這些都是最新的。 我正在嘗試單擊“下一步”按鈕,直到最后一頁。

我已經嘗試過自己,但是在單擊幾頁后,腳本會中斷或停止進一步單擊。 我進行了一些編輯並丟失了部分工作代碼。

這是 html 代碼。

頁面開頭的html:

<div class="pagination" total="2098" limit="20" offset="1" view="products">
  <ul>
    <li class="disabled page">First
    </li>
    <li class="disabled page">Prev
    </li>
    <li key="1" class="pageLink digital current page">1
    </li>
    <li key="2" class="pageLink digital page">2
    </li>
    <li key="3" class="pageLink digital page">3
    </li>
    <li key="2" class="pageLink page">Next
    </li>
    <li key="105" class="pageLink page">Last
    </li>
  </ul>
</div>

html 在最后一頁:

<div class="pagination" total="6866" limit="20" offset="344" view="products"><ul><li key="1" class="pageLink page">First</li><li key="343" class="pageLink page">Prev</li><li key="342" class="pageLink digital page">342</li><li key="343" class="pageLink digital page">343</li><li key="344" class="pageLink digital current page">344</li><li class="disabled page">Next</li><li class="disabled page">Last</li></ul></div>

編輯:

Python 代碼我試過了。

while True:    
next_page_btn = None
next_page_btn = browser.find_elements_by_xpath("/html[1]/body[1]/div[1]/div[2]/div[2]/div[6]/div[1]/div[1]/div[3]/div[1]/div[1]/ul[1]/li[6]")
if len(next_page_btn) < 1:
    print("No more pages left")
    break
else:
    
    element = WebDriverWait(browser, 10).until( 
    EC.presence_of_element_located((By.xpath, "/html[1]/body[1]/div[1]/div[2]/div[2]/div[6]/div[1]/div[1]/div[3]/div[1]/div[1]/ul[1]/li[6]")) 
    )
    element.click()

編輯 2:下面的代碼是我目前使用的代碼,除了一個問題外它工作正常。 即使在最后一頁之后,它也會繼續不斷地加載最后一頁。 當它到達最后時,我們如何停止。

while True:
time.sleep(5)
#wait for pagination to show 
EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'pagination')]")) 
next_page_btn = browser.find_elements_by_xpath("//div[contains(@class, 'pagination')]//li[contains(text(), 'Next')]")
if len(next_page_btn) < 1:
    print("No more pages left")
    break
else:
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//li[.='Next']"))).click()

通常,分頁 state(頁碼)作為查詢字符串存儲在 URL 中,您可以簡單地使用計數器並遍歷 URL,而無需擔心正確定位元素

我會使用這個 xpath 來識別下一個按鈕:

//div[contains(@class, 'pagination')]//li[contains(text(), 'Next')]

while True:   
    #wait for pagination to show 
    EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'pagination')]")) 
    )
next_page_btn = browser.find_elements_by_xpath("//div[contains(@class, 'pagination')]//li[contains(text(), 'Next')]")
if len(next_page_btn) < 1:
    print("No more pages left")
    break
else:
    element.click()

或者你可以通過 try catch 來簡化:

while True:
    EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'pagination')]"))
    try:
        driver.find_element_by_xpath("//div[contains(@class, 'pagination')]//li[contains(text(), 'Next')]").click()
    except NoSuchElementException:
        print("Element not found")
        break

嘗試使用“find_elements_by_link_text”而不是 xpath

嘗試使用此代碼單擊下一步,直到沒有剩余頁面

browser.get(URL)

while True:
    ... <scraping code>...
    try:
        WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//li[.='Next']"))).click()
    except:
        print('No more pages to load')
        break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM