Python:selenium单击下一步按钮

Python:selenium单击下一步按钮,python,selenium,selenium-chromedriver,Python,Selenium,Selenium Chromedriver,我正在使用Python Selenium和ChromeDriver,所有这些都是最新的。我试着点击“下一页”按钮直到最后一页 我自己也尝试过,但在点击几次页面后,脚本会中断或停止进一步点击。我做了一些编辑,丢失了部分工作代码 下面是html代码 页面开头的html: <div class="pagination" total="2098" limit="20" offset="1" view="pro

我正在使用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>

  • 首先
  • 上一页
  • 1
  • 2
  • 3
  • 下一页 最后一页
最后一页的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()
为True时:
下一页\u btn=无
下一页\u btn=browser。通过xpath(“/html[1]/body[1]/div[1]/div[2]/div[2]/div[6]/div[1]/div[3]/div[1]/div[1]/div[1]/ul[1]/li[6]”查找元素
如果len(下一页)小于1:
打印(“不再剩下页面”)
打破
其他:
element=WebDriverWait(浏览器,10)。直到(
EC.元素的存在位置((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]”)
)
元素。单击()
编辑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()
为True时:
时间。睡眠(5)
#等待分页显示
位于((By.XPATH,“//div[contains(@class,'pagination')]))的元素的存在性
next_page_btn=browser.find_elements_by_xpath(//div[contains(@class,'pagination')]//li[contains(text(),'next')]))
如果len(下一页)小于1:
打印(“不再剩下页面”)
打破
其他:
WebDriverWait(浏览器,10)。直到(EC.element可点击((By.XPATH,//li[.='Next'])。点击()

通常分页状态(页码)作为查询字符串存储在URL中,您可以简单地使用计数器并在URL中循环,而无需担心是否正确定位元素

尝试使用“按链接文本查找元素”而不是xpath

我将使用此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()

请尝试此代码单击“下一步”,直到没有剩余页面

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
browser.get(URL)
尽管如此:
... ...
尝试:
WebDriverWait(浏览器,10)。直到(EC.element可点击((By.XPATH,//li[.='Next'])。点击()
除:
打印('没有更多要加载的页面')
打破

这可能会有帮助。错误是什么?还是失败的原因?@DMart仍有页面要加载,但脚本中途停止工作,或者“下一步”按钮显示为禁用,即使仍有页面要处理。我已进行了编辑,请参考最后一页html,我相信这可能有助于确定我们已到达最后一页。按链接文本搜索不适用于
li
nodesI我在尝试执行代码时,代码的第一部分出现以下错误<代码>代码EC。位于((By.xpath,“//div[contains(@class,'pagination')]”)AttributeError:type对象“By”没有属性“xpath”,顺便说一句,“)”第6行显示错误,所以我删除了它。请确认是否需要删除它。代码的第二部分也给了我错误
代码,而True:^SyntaxError:invalid syntax
看起来我有一些语法错误。很抱歉再试一次。
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