我有一個挖掘腳本,我在其中使用 Selenium 瀏覽結果頁面。我的功能如下:
def moving_pages():
global driver
driver.get(url)
while driver.find_element_by_class_name('next-page-btn'):
try:
button = driver.find_element_by_class_name('next-page-btn')
time.sleep(4)
button.click()
getdata(driver.current_url)
new_url = (driver.current_url)
print(new_url)
except NoSuchElementException:
print("NO MORE NEXT BUTTON")
該功能運行良好,它在頁面間移動,但是在最后一頁上,沒有'next-page-btn',因此我需要處理這個問題。不幸的是,當我運行我的代碼時,我仍然收到一個錯誤,錯誤是:
Traceback (most recent call last):
File "/Users/tdonov/Desktop/Python/Realestate Scraper/Selenium_updated_mining_script copy.py", line 188, in <module>
moving_pages()
File "/Users/tdonov/Desktop/Python/Realestate Scraper/Selenium_updated_mining_script copy.py", line 160, in moving_pages
while driver.find_element_by_class_name('next-page-btn'):
File "/Users/tdonov/Desktop/Python/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 754, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "/Users/tdonov/Desktop/Python/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 1238, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "/Users/tdonov/Desktop/Python/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 418, in execute
self.error_handler.check_response(response)
File "/Users/tdonov/Desktop/Python/venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".next-page-btn"}
(Session info: chrome=96.0.4664.55)
Stacktrace:
0 chromedriver 0x0000000100e61519 __gxx_personality_v0 577193
1 chromedriver 0x0000000100ded663 __gxx_personality_v0 102387
2 chromedriver 0x00000001009b4d28 chromedriver 171304
3 chromedriver 0x00000001009e9c9c chromedriver 388252
4 chromedriver 0x0000000100a1bb04 chromedriver 592644
5 chromedriver 0x0000000100a06ddd chromedriver 507357
6 chromedriver 0x0000000100a198ab chromedriver 583851
7 chromedriver 0x0000000100a070a3 chromedriver 508067
8 chromedriver 0x00000001009dd5ae chromedriver 337326
9 chromedriver 0x00000001009de8d5 chromedriver 342229
10 chromedriver 0x0000000100e1d75f __gxx_personality_v0 299247
11 chromedriver 0x0000000100e3469a __gxx_personality_v0 393258
12 chromedriver 0x0000000100e39f5b __gxx_personality_v0 415979
13 chromedriver 0x0000000100e35a3a __gxx_personality_v0 398282
14 chromedriver 0x0000000100e1237c __gxx_personality_v0 253196
15 chromedriver 0x0000000100e51458 __gxx_personality_v0 511464
16 chromedriver 0x0000000100e515e1 __gxx_personality_v0 511857
17 chromedriver 0x0000000100e68968 __gxx_personality_v0 606968
18 libsystem_pthread.dylib 0x00007fff71cb6109 _pthread_start 148
19 libsystem_pthread.dylib 0x00007fff71cb1b8b thread_start 15
Process finished with exit code 1
我的問題是,如何修改該函式以便按照現在應該執行的方式進行列印NO MORE NEXT BUTTON并退出該函式以便它可以繼續?
uj5u.com熱心網友回復:
while driver.find_element_by_class_name('next-page-btn'):是違規行。您正在捕獲它可能在回圈范圍內但不在回圈條件中引發的例外之一。
由于您似乎想在沒有更多next-page-btns 時跳出回圈,因此您可以執行以下操作:
def moving_pages():
global driver # I recommend you pass this as a parameter instead
driver.get(url)
while True:
try:
button = driver.find_element_by_class_name('next-page-btn')
except NoSuchElementException:
print("NO MORE NEXT BUTTON")
break
time.sleep(4)
button.click()
getdata(driver.current_url)
new_url = (driver.current_url)
print(new_url)
另一種方法是將該回圈本身包裝在 a 中try-except,但嘗試減少塊的嵌套和“范圍”通常是好的try-except(請注意我如何縮小范圍try-except以僅包裝可能引發您捕獲的例外的行) )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363272.html
下一篇:無法通過python獲取所有鏈接
