python - Python:硒单击下一步按钮
问题描述
我正在使用带有 ChromeDriver 的 Python Selenium,所有这些都是最新的。我正在尝试单击“下一步”按钮,直到最后一页。
我已经尝试过自己,但是在单击几页后,脚本会中断或停止进一步单击。我进行了一些编辑并丢失了部分工作代码。
这是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()
解决方案
我会使用这个 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
推荐阅读
- javascript - Kotlin 类型具体化如何在 kotlin-js 上工作?
- php - 通过 FromSubmit (PHP) 创建变量
- fish - 确定特殊输入函数的现有绑定
- ios - 解密 AES/GCM/PKCS5Padding iOS Swift
- java - 来自先前过滤页面的 findElement 返回相同的结果
- javascript - 以价格格式输出数值
- spring - spring简单websocket项目返回200代码
- python - 如何在 FloPy 中添加河流?
- python - “ValueError:一个系列的真值不明确”
- laravel - 我无法通过 laravel 中的 id 找到订单