Когда мы выполняем веб-автоматизацию, мы часто сталкиваемся с некоторыми элементами, с которыми сложно работать. Обычное позиционирование элементов и операции подвержены ошибкам. Если мы используем селен, мы можем использовать селен для вызова js-скриптов для операций. В драматурге есть аналогичный метод, использующий page.evaluate() для выполнения сценариев JavaScript.
Единственная разница между page.evaluate() и page.evaluate_handle() заключается в том, что page.evaluate_handle() возвращает JSHandle.
Возврат оценки() возвращает результат выполнения сценария JavaScript. Используйте пример следующим образом:
from playwright.sync_api import sync_playwright
def run_js_script():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('https://www.baidu.com')
print(page.evaluate("1 + 2"))
# Закрыть браузер
context.close()
browser.close()
run_js_script()
Вы также можете выполнить функцию следующим образом:
from playwright.sync_api import sync_playwright
def run_js_script():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('https://www.baidu.com')
print(page.evaluate("() => 'Бавария Мюнхен'))
# Закрыть браузер
context.close()
browser.close()
run_js_script()
Примечание. Если функция, переданная в page.evaluate(), возвращает несериализуемое значение, page.evaluate() разрешается как неопределенное.
Выполните document.title, чтобы получить заголовок страницы. Код выглядит следующим образом:
from playwright.sync_api import sync_playwright
def run_js_script():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
title = page.evaluate('document.title')
print(title)
page.pause()
# Закрыть браузер
context.close()
browser.close()
run_js_script()
from playwright.sync_api import sync_playwright
def run_js_script():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
js = """
document.getElementById('kw').value='playwright';
document.getElementById('su').click();
"""
page.evaluate(js)
page.pause()
# Закрыть браузер
context.close()
browser.close()
run_js_script()
Страница выглядит следующим образом:
Возвращаемое значение page.evaluate_handle() — JSHandle.
from playwright.sync_api import sync_playwright
def run_js_script():
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com/")
a_handle = page.evaluate_handle("document.body")
result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
print(result_handle.json_value())
result_handle.dispose()
page.pause()
# Закрыть браузер
context.close()
browser.close()
run_js_script()
В этой статье в основном описывается работа драматурга по выполнению js-скриптов. Как и Selenium, драматург также может выполнять js-скрипты для завершения некоторых элементов, с которыми неудобно работать.