當谷歌地圖在某種程度上確認了地點搜索時,它會重定向到特定的谷歌地點網址,否則它會回傳地圖搜索結果頁面。
谷歌地圖搜索“manarama”是
https://www.google.com/maps/search/manarama/@23.7505522,90.3616303,15z/data=!4m2!2m1!6e6
重定向到 Google Place URL
https://www.google.com/maps/place/Manarama, 29 Rd No. 14A, Dhaka 1209/@23.7505522,90.3616303,15z/data=!4m5!3m4!1s0x3755bf4dfc183459:0xb9127b8c3072c249!8m2 !3d23.750523!4d90.3703851
未確認具體地點時,谷歌地圖搜索結果頁面如下圖所示
https://www.google.com/maps/search/Mana/@24.211316,89.340686,8z/data=!3m1!4b1
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
await page.goto("https://www.google.com/maps/search/manarama/@23.7505522,90.3616303,15z/data=!4m2!2m1!6e6", wait_until="networkidle")
print(page.url)
await page.close()
await browser.close()
asyncio.run(main())
有時它會回傳重定向的 URL,但大多數時候不會。如何確定 URL 已重定向到地點 URL?以下 StackOverflow 帖子有相似之處,但不適用于我的情況
如何使用 playwright 通過 web 應用程式捕獲重定向
uj5u.com熱心網友回復:
您可以使用expect_navigation。
在您提到的關于與函式匹配的 url 的評論中。幾乎所有此類劇作家函式都接受正則運算式模式。因此,當有疑問時,只需使用正則運算式。請看下面的代碼:
import asyncio
from playwright.async_api import async_playwright, TimeoutError
import re
pattern = re.compile(r"http.*://. ?/place. ")
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
page = await browser.new_page()
try:
async with page.expect_navigation(url=pattern, timeout=7000) as resp:
await page.goto(
"https://www.google.com/maps/search/manarama/@23.7505522,90.3616303,15z/data=!4m2!2m1!6e6",
wait_until='networkidle')
except TimeoutError:
print('place not found')
else:
print('navigated to place')
print(page.url)
await page.close()
await browser.close()
asyncio.run(main())
為了檢查頁面是否導航,只需將函式包裝在一個try..except塊中并將合適的timeout引數(以毫秒為單位)傳遞給expect_navigation. 然后,如果出現Timeout錯誤,您就知道沒有任何與我們的模式匹配的 url 更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496228.html
下一篇:用硒卡在回圈網路抓取中
