标签: playwright-python

如何使用 Playwright Python 异步打开多个页面?

我想使用 Playwright for Python 一次打开多个 url。但我正在努力弄清楚如何做。这是来自异步文档:

async def main():
    async with async_playwright() as p:
        for browser_type in [p.chromium, p.firefox, p.webkit]:
            browser = await browser_type.launch()
            page = await browser.newPage()
            await page.goto("https://scrapingant.com/")
            await page.screenshot(path=f"scrapingant-{browser_type.name}.png")
            await browser.close()

asyncio.get_event_loop().run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

这将按顺序打开每个 browser_type。如果我想并行进行,我该怎么做?如果我想对网址列表做类似的事情,我该怎么做?

我尝试这样做:

urls = [
    "https://scrapethissite.com/pages/ajax-javascript/#2015",
    "https://scrapethissite.com/pages/ajax-javascript/#2014",
]
async def main(url):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.newPage()
        await page.goto(url)
        await browser.close()

async def go_to_url():
    tasks = [main(url) for url in urls]
    await asyncio.wait(tasks)

go_to_url()
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

92: RuntimeWarning: …
Run Code Online (Sandbox Code Playgroud)

python webautomation web-scraping playwright playwright-python

6
推荐指数
1
解决办法
3506
查看次数

使用 playwright-python 下载 pdf 文件

我正在尝试使用 (Python) 下载在浏览器中呈现的 PDF 文件(未显示为弹出窗口或下载)playwright。没有公开 URL,因此您不能简单地抓取链接并使用requests.get("file_url").

我试过了:

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.newPage(acceptDownloads=True)
    
        await page.goto("www.some_landing_page.com")
            
        async with page.expect_download() as download_info:
            await page.click("a")     # selector to a pdf file
        
        download = download_info.value
        path = download.path()
Run Code Online (Sandbox Code Playgroud)

我也尝试过page.expect_popup(),但没有运气。我的理解是,这不能使用 来完成pyppeteer,但如果可能的话,也欢迎这种方式的解决方案。

python-3.x pyppeteer playwright playwright-python

6
推荐指数
1
解决办法
3642
查看次数

Chrome - 自动在网络上打开开发工具并保留日志

我正在使用 playwright 进行自动化测试。每次测试运行都会创建一个新的 chromium 实例。当我通过时,--auto-open-devtools-for-tabs它会按预期打开开发工具。但是,我需要更进一步并启用保留日志复选框。测试速度很快,我需要在重定向之前查看请求。

python google-chrome webautomation playwright playwright-python

6
推荐指数
1
解决办法
3679
查看次数

如何在 Jupyter 笔记本中使用 Playwright 库而不是使用常规 .py 脚本(在 Windows 上)

我想使用自动浏览器并使用 jupyter 笔记本单元而不是使用 .py 脚本执行我的步骤。这与名为 selenium 的浏览器自动化库配合得很好。

它不适用于名为 Playwright 的库。事实上它根本不起作用。我尝试了他们在手册中提供的每一行代码。jupyter 笔记本上什么都不起作用。只要将相同的代码复制粘贴到某个 .py 文件中并执行它,一切都可以在我的机器上正常运行。我正在谈论的各种示例可以在这里找到: https: //playwright.dev/python/docs/intro

我真的不明白为什么我无法让它在 jupyter 笔记本中工作,特别是如果它在几乎每个 .py 文件中都能正常工作的话。

编辑:显然它可以在 Mac 上运行,但我使用 Windows

python webdriver python-3.x playwright playwright-python

6
推荐指数
1
解决办法
7329
查看次数

Python Playwright 启动最大化窗口

我在最大化 Python 中启动 Playwright 时遇到问题。我找到了一些其他语言的文章,但在Python中不起作用,官方文档中也没有写关于Python中最大化窗口的内容。

我试过browser = p.chromium.launch(headless=False, args=["--start-maximized"])

它开始最大化,但随后自动恢复到默认的小窗口大小。

有任何想法吗?谢谢

python playwright playwright-python

6
推荐指数
1
解决办法
4510
查看次数

Bright Data 抓取浏览器:“禁止操作:不允许输入密码”

通过 Playwright Python 库使用 Bright Data 抓取浏览器,我编写了以下代码片段:

await page.goto('https://example.com/login/')
await page.fill('input[name="username"]', username)
await page.fill('input[name="password"]', password)
await page.click('button[type="submit"]')
Run Code Online (Sandbox Code Playgroud)

用户名按预期填写,但在密码行上,抓取浏览器停止并显示以下错误: Error: Forbidden action: password typing is not allowed

我尝试过其他在输入中输入数据的方法,但似乎抓取浏览器已禁止在密码类型输入字段中输入任何类型的数据。

我该如何解决这个问题?

passwords playwright-python

6
推荐指数
1
解决办法
519
查看次数

在 Playwright for Python 中,如何从框架 (iframe) 中检索元素的句柄?

我已经成功地在 python 中使用 Playwright 从页面中获取元素。我现在遇到了从嵌入iframe的文档中获取元素的挑战。作为示例,我使用了w3schools 页面来解释<option>element,该页面在 iframe 中显示结果。<option>我正在尝试从 iframe 中检索该元素的句柄。

获取页面上的 an 元素的“正常”方式page.querySelector()无法获取 an elementHandle,这只会打印<class 'NoneType'>

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')
        element = page.querySelector('select')
        print(type(element))
        browser.close()
Run Code Online (Sandbox Code Playgroud)

我尝试首先显式获取 iframe 的句柄,但这会产生相同的结果 ( <class 'NoneType'>):

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_option')      
        iframe = page.querySelector('iframe')
        element = …
Run Code Online (Sandbox Code Playgroud)

python iframe webautomation playwright playwright-python

5
推荐指数
1
解决办法
4968
查看次数

如何使用 Playwright Python 快速查找页面中是否存在某个元素

我有这个代码来定位链接,使用 python playwright:

nfo_link = page.locator('the xpath').get_attribute('href')
nfo_link = 'https://somesite.com' + nfo_link
logger_play.info('nfo_link: %s', nfo_link)
Run Code Online (Sandbox Code Playgroud)

如果存在则工作正常,但如果不存在则会出现错误:

waiting for selector
Run Code Online (Sandbox Code Playgroud)

我努力了:

 if (page.locator('the xpath').get_attribute('href')) == None:
       pass
 else:
       nfo_link = page.locator('the xpath').get_attribute('href')
Run Code Online (Sandbox Code Playgroud)

和其他代码,但似乎都不起作用,我想,如果发现好,如果不继续,有人可以指出我正确的方法吗?

python playwright playwright-python

5
推荐指数
1
解决办法
2万
查看次数

如何捕获所有控制台错误日志剧作家

在此输入图像描述

我尝试了这一切,

page.on("console", lambda msg: print(f"error: {msg.text}") if msg.type == "error" else None)
page.on("console", lambda msg: print(msg.text))
page.on("pageerror", lambda exc: print(f"uncaught exception: {exc}"))
Run Code Online (Sandbox Code Playgroud)

没有任何作用

端子输出

python main.py 
/home/xxx/.local/lib/python3.9/site-packages/trio/_core/_multierror.py:511: RuntimeWarning: You seem to already have a custom sys.excepthook handler installed. I'll skip installing Trio's custom handler, but this means MultiErrors will not show full tracebacks.
  warnings.warn(
Run Code Online (Sandbox Code Playgroud)

python playwright playwright-python

5
推荐指数
0
解决办法
4266
查看次数

如何使用 playwright 通过网络应用程序捕获重定向

当您访问此链接时,该页面将运行一些 javascript,然后自动重定向到pdf。我很难从剧作家那里得到最终的网址。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://scnv.io/760y", wait_until="networkidle")
    print(page.url)
    page.close()
Run Code Online (Sandbox Code Playgroud)

有没有办法获得最终的网址?

playwright playwright-python

5
推荐指数
1
解决办法
5903
查看次数