You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Playwright实现无限滚动加载时遇TimeoutError问题求助

问题:Playwright爬取景点数据仅获前10条且触发TimeoutError

我需要使用Playwright加载网页https://www.justdial.com/Mumbai/Tourist-Attraction/nct-10596038上的全部景点数据,但目前仅能获取前10条数据,且执行代码时抛出TimeoutError。我尝试过通过循环调用page.mouse.wheel()结合time.sleep()的无限滚动方案,但未解决问题。

核心代码

from playwright.sync_api import sync_playwright
import pandas as pd

def main():
    with sync_playwright() as p:
        chromium_path = r"C:\Users\pranit\AppData\Local\ms-playwright\chromium-1076\chrome-win\chrome.exe"
        browser = p.chromium.launch(executable_path=chromium_path, headless=False)

        page_url = f'https://www.justdial.com/Mumbai/Tourist-Attraction/nct-10596038'

        page = browser.new_page()
        page.goto(page_url, timeout=600000)

        attractions = page.locator('//div[@class="jsx-a3a43292cc1e6428 results_listing_container"]/div').all()
        print(f'There are: {len(attractions)} attractions.')

        attractions_list =[]
        for attraction in attractions:
            attraction_dict = {} 
            attraction_dict['place'] = attraction.locator('//div[@class="jsx-4d407376001b01ad"]/h2/a').inner_text()


            attractions_list.append(attraction_dict)
        df = pd.DataFrame(attractions_list)
        df.to_excel('attractions_list.xlsx', index=False)
        df.to_csv('attractions_list.csv', index=False)

        browser.close()

if __name__ == '__main__':
    main()

尝试过的无限滚动代码

for i in range(5): #make the range as long as needed
        page.mouse.wheel(0, 15000)
        time.sleep(2)
        i += 1
    
    time.sleep(15)

报错信息

PS C:\Users\pranit\OneDrive\Desktop\BeautifulSoup tutorial> python -u "c:\Users\pranit\OneDrive\Desktop\BeautifulSoup tutorial\TravelAdvisorAttractions.py"
There are: 10 attractions.
Traceback (most recent call last):
  File "c:\Users\pranit\OneDrive\Desktop\BeautifulSoup tutorial\TravelAdvisorAttractions.py", line 31, in <module>
    main()
  File "c:\Users\pranit\OneDrive\Desktop\BeautifulSoup tutorial\TravelAdvisorAttractions.py", line 20, in main
    attraction_dict['place'] = attraction.locator('//div[@class="jsx-4d407376001b01ad"]/h2/a').inner_text()
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\sync_api\_generated.py", line 17228, in inner_text
    self._sync(self._impl_obj.inner_text(timeout=timeout))
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\_impl\_sync_base.py", line 109, in _sync
    return task.result()
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\_impl\_locator.py", line 444, in inner_text
    return await self._frame.inner_text(
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\_impl\_frame.py", line 619, in inner_text
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\_impl\_connection.py", line 482, in wrap_api_call
    return await cb()
  File "C:\Users\pranit\AppData\Local\Programs\Python\Python39\lib\site-packages\playwright\_impl\_connection.py", line 97, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.TimeoutError: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for locator("xpath=//div[@class=\"jsx-a3a43292cc1e6428 results_listing_container\"]/div").first.locator("xpath=//div[@class=\"jsx-4d407376001b01ad\"]/h2/a")

内容的提问来源于stack exchange,提问作者Pranit Utekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:34:51