Ниже приведен код моего веб-скребка, где я пытаюсь очистить названия автомобилей. У меня также есть список с местами. Я хотел бы использовать переменную loc списка местоположений в своей функции.
А также использовать открытое окно браузера, но функция не распознает синтаксис «страница». это в строке 16.
Ф.э. например Selenium, где вы определяете свой веб-драйвер один раз в верхней части кода и используете его внутри и вне любой функции, не вызывая ее снова.
Как я могу использовать страницу в своей функции -page.goto("https://www.sixt.co.uk/")-
from playwright.sync_api import Playwright, sync_playwright, expect
locationList = [
'London Luton Airport',
'London Hilton',
'London City',
'London Wembley',
'London Battersea',
'London Shepherds Bush'
]
chromium = playwright.chromium
browser = chromium.launch(channel = "chrome", headless=False)
page = browser.new_page()
page.set_viewport_size({"width": 1920, "height": 1080})
page.goto("https://www.sixt.co.uk/")
page.locator("[data-testid=\"uc-accept-all-button\"]").click()
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill("luton")
page.locator("text=London Luton Airport (GB)").click()
page.locator("button:has-text(\"Show offers\")").click()
def run(playwright: Playwright):
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill(loc)
page.locator('//div[text() = "' + loc + '"]').click()
carnames = page.locator("//h2[@class='vehicle-item__title']")
#Get all carnames in a list
carnamelist = [cars.text for cars in carnames]
for loc in locationList:
with sync_playwright() as playwright:
run(playwright)
Вот как глобально инициализировать браузер драматурга без менеджеров контекста.
В вашем конкретном коде это будет работать, как показано ниже:
from playwright.sync_api import Playwright, sync_playwright
locationList = [
'London Luton Airport',
'London Hilton',
'London City',
'London Wembley',
'London Battersea',
'London Shepherds Bush'
]
playwright = sync_playwright().start() # <-- Use this to initialize playwright globally
chromium = playwright.chromium
browser = chromium.launch(channel = "chrome", headless=False)
page = browser.new_page()
page.set_viewport_size({"width": 1920, "height": 1080})
page.goto("https://www.sixt.co.uk/")
page.locator("[data-testid=\"uc-accept-all-button\"]").click()
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill("luton")
page.locator("text=London Luton Airport (GB)").click()
page.locator("button:has-text(\"Show offers\")").click()
def run(playwright: Playwright):
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill(loc)
page.locator('//div[text() = "' + loc + '"]').click()
carnames = page.locator("//h2[@class='vehicle-item__title']")
#Get all carnames in a list
carnamelist = [cars.text for cars in carnames]
for loc in locationList:
run(playwright)
playwright.stop() # --> Cleanup resources properly when done
Однако вы также можете инициализировать page
и browser
внутри контекстного менеджера, который вы создали в исходном вопросе, и он будет работать, как и ожидалось.