{"id":1431,"date":"2022-11-26T12:32:46","date_gmt":"2022-11-26T04:32:46","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1431"},"modified":"2022-11-29T22:10:34","modified_gmt":"2022-11-29T14:10:34","slug":"python%e5%bc%80%e6%ba%90%e8%87%aa%e5%8a%a8%e5%8c%96%e5%b7%a5%e5%85%b7playwright%e5%ae%89%e8%a3%85%e5%8f%8a%e4%bb%8b%e7%bb%8d%e4%bd%bf%e7%94%a8","status":"publish","type":"post","link":"\/?p=1431","title":{"rendered":"Python\u5f00\u6e90\u81ea\u52a8\u5316\u5de5\u5177Playwright\u5b89\u88c5\u53ca\u4ecb\u7ecd\u4f7f\u7528"},"content":{"rendered":"<h2>\u7b80\u4ecb<\/h2>\n<p>\u5fae\u8f6f\u5f00\u6e90\u4e86\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u81ea\u52a8\u5316\u9879\u76ee\u53eb <strong>playwright-python<\/strong><\/p>\n<p>\u5b83\u652f\u6301\u4e3b\u6d41\u7684\u6d4f\u89c8\u5668\uff0c\u5305\u542b\uff1a<strong>Chrome\u3001Firefox\u3001Safari\u3001Microsoft Edge<\/strong> \u7b49\uff0c\u540c\u65f6\u652f\u6301\u4ee5<strong>\u65e0\u5934\u6a21\u5f0f\u3001\u6709\u5934\u6a21\u5f0f<\/strong>\u8fd0\u884c\uff0c\u5e76\u63d0\u4f9b\u4e86\u540c\u6b65\u3001\u5f02\u6b65\u7684 API\uff0c\u53ef\u4ee5\u7ed3\u5408 <strong>Pytest \u6d4b\u8bd5\u6846\u67b6<\/strong> \u4f7f\u7528\uff0c\u5e76\u4e14\u652f\u6301\u6d4f\u89c8\u5668\u7aef\u7684\u81ea\u52a8\u5316\u811a\u672c\u5f55\u5236\u3002<\/p>\n<p>\u9879\u76ee\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/microsoft\/playwright-python\">https:\/\/github.com\/microsoft\/playwright-python<\/a><\/p>\n<p>\u800c\u5bf9\u4e8ePython\u7231\u597d\u8005\u6765\u8bf4\uff0c\u8fd8\u6709\u4e00\u4e2a\u66f4\u5927\u7684\u798f\u5229\uff0c\u8fd9\u4e2a\u9879\u76ee\u662f\u9488\u5bf9<strong>Python\u8bed\u8a00\u7684\u7eaf\u81ea\u52a8\u5316\u5de5\u5177<\/strong>\uff0c\u53ef\u4ee5\u505a\u5230\uff0c\u8fde\u4e00\u884c\u4ee3\u7801\u90fd\u4e0d\u7528\u5199\uff0c\u5c31\u80fd\u5b9e\u73b0\u81ea\u52a8\u5316\u529f\u80fd\u3002\u542c\u8d77\u6765\uff0c\u7b80\u76f4\u592a\u7889\u5821\u4e86\uff01<\/p>\n<p>\u53ef\u80fd\u4f60\u4f1a\u89c9\u5f97\u6709\u70b9\u4e0d\u53ef\u601d\u8bae\uff0c\u771f\u7684\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u5417\uff1f\u4f46\u5b83\u771f\u7684\u5c31\u662f\u8fd9\u4e48\u5389\u5bb3\u3002\u4e0b\u9762\u6211\u4eec\u4e00\u8d77\u770b\u4e0b\u8fd9\u4e2a\u795e\u5668\u3002<\/p>\n<h2>1\u3001Playwright\u4ecb\u7ecd<\/h2>\n<p>Playwright\u662f\u4e00\u4e2a\u5f3a\u5927\u7684Python\u5e93\uff0c\u4ec5\u7528\u4e00\u4e2aAPI\u5373\u53ef\u81ea\u52a8\u6267\u884cChromium\u3001Firefox\u3001WebKit\u7b49\u4e3b\u6d41\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u64cd\u4f5c\uff0c\u5e76\u540c\u65f6\u652f\u6301\u4ee5\u65e0\u5934\u6a21\u5f0f\u3001\u6709\u5934\u6a21\u5f0f\u8fd0\u884c\u3002<\/p>\n<p>Playwright\u63d0\u4f9b\u7684\u81ea\u52a8\u5316\u6280\u672f\u662f\u7eff\u8272\u7684\u3001\u529f\u80fd\u5f3a\u5927\u3001\u53ef\u9760\u4e14\u5feb\u901f\uff0c\u652f\u6301Linux\u3001Mac\u4ee5\u53caWindows\u64cd\u4f5c\u7cfb\u7edf\u3002<\/p>\n<p><img src=\"https:\/\/img.jbzj.com\/file_images\/article\/202112\/202112120934032.png\" alt=\"\" \/>  <\/p>\n<p>\u5b98\u7f51\uff1a<a href=\"https:\/\/playwright.dev\/\">https:\/\/playwright.dev\/<\/a><\/p>\n<p><img src=\"https:\/\/img.jbzj.com\/file_images\/article\/202112\/202112120934043.png\" alt=\"\" \/><\/p>\n<p>\u4ece\u5b98\u7f51\u7684\u89e3\u91ca\uff0c\u5b98\u65b9\u7ed9Playwright\u5b9a\u4f4d\u662f\u4e00\u6b3e\u771f\u6b63\u610f\u4e49\u4e0a\u7684Web\u7aef\u5230\u7aef\u6d4b\u8bd5\u5de5\u5177\u3002<\/p>\n<p><a href=\"https:\/\/www.jb51.net\/article\/231684.htm\"><\/a><\/p>\n<h2>2\u3001Playwright\u5b89\u88c5<\/h2>\n<p>Playwright\u529f\u80fd\u5f3a\u5927\uff0c\u4f46\u5b83\u7684\u5b89\u88c5\u6b65\u9aa4\uff0c\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981 2 \u6b65:<\/p>\n<p><strong>\u7b2c 1 \u6b65\uff0c\u5b89\u88c5 playwright-python \u4f9d\u8d56\u5e93 (\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cplaywright\u5e93\u9700\u8981\u4f9d\u8d56Python3.7+\u4ee5\u4e0a)<\/strong><\/p>\n<h1>\u6b64\u5904\u53ef\u80fd\u662fpip\/pip3\uff0c\u6216\u8005\u4e24\u8005\u7686\u53ef<\/h1>\n<pre><code>pip3 install playwright\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u5728<a href=\"https:\/\/pypi.org\/project\/playwright\/\">https:\/\/pypi.org\/project\/playwright\/<\/a>\u67e5\u770b\u5b83\u7684\u4f9d\u8d56\u7248\u672c\u4fe1\u606f\u3002<\/p>\n<p><strong>\u7b2c 2 \u6b65\uff0c\u5b89\u88c5\u4e3b\u6d41\u7684\u6d4f\u89c8\u5668\u9a71\u52a8<\/strong><\/p>\n<p>\u8fd9\u6837\uff0c\u4f1a\u5c06 Chromeium\u3001Firefox\u3001Webkit \u6d4f\u89c8\u5668\u9a71\u52a8\u4e0b\u8f7d\u5230\u672c\u5730<\/p>\n<blockquote>\n<h1>\u5b89\u88c5\u6d4f\u89c8\u5668\u9a71\u52a8\uff08\u5b89\u88c5\u8fc7\u7a0b\u7a0d\u5fae\u6709\u70b9\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\uff09<\/h1>\n<\/blockquote>\n<pre><code>python3 -m playwright install\n<\/code><\/pre>\n<p>\u5982\u679c\u60f3\u67e5\u770bPlaywright\u652f\u6301\u7684\u529f\u80fd\uff0c \u53ef\u4ee5\u76f4\u63a5\u5728\u547d\u4ee4\u884c\u8f93\u5165\uff1a<\/p>\n<pre><code>python3 -m playwright help\n\nUsage: index \\[options\\] \\[command\\]\n\nOptions:\n  -V, --version                          output the version number\n  -b, --browser &lt;browserType&gt;            browser to use, one of cr, chromium, ff, firefox, wk,\n                                         webkit (default: &quot;chromium&quot;)\n  --color-scheme &lt;scheme&gt;                emulate preferred color scheme, &quot;light&quot; or &quot;dark&quot;\n  --device &lt;deviceName&gt;                  emulate device, for example  &quot;iPhone 11&quot;\n  --geolocation &lt;coordinates&gt;            specify geolocation coordinates, for example\n                                         &quot;37.819722,-122.478611&quot;\n  --lang &lt;language&gt;                      specify language \/ locale, for example &quot;en-GB&quot;\n  --proxy-server &lt;proxy&gt;                 specify proxy server, for example &quot;http:\/\/myproxy:3128&quot; or\n                                         &quot;socks5:\/\/myproxy:8080&quot;\n  --timezone &lt;time zone&gt;                 time zone to emulate, for example &quot;Europe\/Rome&quot;\n  --timeout &lt;timeout&gt;                    timeout for Playwright actions in milliseconds (default:\n                                         &quot;10000&quot;)\n  --user-agent &lt;ua string&gt;               specify user agent string\n  --viewport-size &lt;size&gt;                 specify browser viewport size in pixels, for example &quot;1280,\n                                         720&quot;\n  -h, --help                             display help for command\n\nCommands:\n  open \\[url\\]                             open page in browser specified via -b, --browser\n  cr \\[url\\]                               open page in Chromium\n  ff \\[url\\]                               open page in Firefox\n  wk \\[url\\]                               open page in WebKit\n  codegen \\[options\\] \\[url\\]                open page and generate code for user actions\n  screenshot \\[options\\] &lt;url&gt; &lt;filename&gt;  capture a page screenshot\n  pdf \\[options\\] &lt;url&gt; &lt;filename&gt;         save page as pdf\n  install                                Ensure browsers necessary for this version of Playwright\n                                         are installed\n  help \\[command\\]                         display help for command\n<\/code><\/pre>\n<p>\u4ece\u547d\u4ee4\u884c\u5e2e\u52a9\u4fe1\u606f\u4e2d\u53ef\u4ee5\u770b\u51fa\uff0cPlaywright\u652f\u6301\u7684\u529f\u80fd\u76f8\u5f53\u4e30\u5bcc\uff01<\/p>\n<p><a href=\"https:\/\/www.jb51.net\/article\/231684.htm\"><\/a><\/p>\n<h2>3\u3001\u5b9e\u64cd\u6f14\u793a<\/h2>\n<p>\u5f00\u7bc7\u5c31\u63d0\u5230\uff0c\u4f7f\u7528Playwright\u65e0\u9700\u5199\u4e00\u884c\u4ee3\u7801\uff0c\u6211\u4eec\u53ea\u9700\u624b\u52a8\u64cd\u4f5c\u6d4f\u89c8\u5668\uff0c\u5b83\u4f1a\u5f55\u5236\u6211\u4eec\u7684\u64cd\u4f5c\uff0c\u7136\u540e\u81ea\u52a8\u751f\u6210\u4ee3\u7801\u811a\u672c\u3002<\/p>\n<p><strong>1\uff09\u5f55\u5236\u811a\u672c<\/strong><\/p>\n<p>\u6211\u4eec\u5148\u67e5\u770b\u5f55\u5236\u811a\u672c\u7684\u547d\u4ee4\u8bf4\u660e<\/p>\n<pre><code>python3 -m playwright codegen --help\n\nUsage: index codegen \\[options\\] \\[url\\]\n\nopen page and generate code for user actions\n\nOptions:\n  -o, --output &lt;file name&gt;  saves the generated script to a file\n  --target &lt;language&gt;       language to use, one of javascript, python, python-async, csharp (default: &quot;python&quot;)\n  -h, --help                display help for command\n\nExamples:\n\n  $ codegen\n  $ codegen --target=python\n  $ -b webkit codegen https:\/\/example.com\n<\/code><\/pre>\n<p>\u5176\u4e2d:<\/p>\n<ul>\n<li>python -m playwright codegen \u5f55\u5236\u811a\u672c<\/li>\n<li>\u2013help \u5e2e\u52a9\u6587\u6863<\/li>\n<li>-o \u751f\u6210\u81ea\u52a8\u5316\u811a\u672c\u7684\u76ee\u5f55<\/li>\n<li>\u2013target \u811a\u672c\u8bed\u8a00\uff0c\u5305\u542b JS \u548c Python\uff0c\u5206\u522b\u5bf9\u5e94\u503c\u4e3a\uff1apython \u548c javascript<\/li>\n<li>-b \u6307\u5b9a\u6d4f\u89c8\u5668\u9a71\u52a8<\/li>\n<\/ul>\n<p>\u6bd4\u5982\uff0c\u6211\u8981\u5728baidu.com\u641c\u7d22\uff0c\u7528chromium\u9a71\u52a8\uff0c\u5c06\u7ed3\u679c\u4fdd\u5b58\u4e3amikezhou.py\u7684python\u6587\u4ef6\u3002<\/p>\n<pre><code>\\# \u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u547d\u4ee4\u6253\u5f00 Chrome \u6d4f\u89c8\u5668\u5f00\u59cb\u5f55\u5236\u811a\u672c\n# \u6307\u5b9a\u751f\u6210\u8bed\u8a00\u4e3a:Python\uff08\u9ed8\u8ba4Python\uff0c\u53ef\u9009\uff09\n# \u4fdd\u5b58\u7684\u6587\u4ef6\u540d\uff1amikezhou.py\uff08\u53ef\u9009\uff09\n# \u6d4f\u89c8\u5668\u9a71\u52a8\uff1awebkit\uff08\u9ed8\u8ba4webkit\uff0c\u53ef\u9009\uff09\n# \u6700\u540e\u8ddf\u7740\u8981\u6253\u5f00\u7684\u76ee\u6807\u7f51\u7ad9\uff08\u9ed8\u8ba4\u4ec5\u4ec5\u662f\u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u53ef\u9009\uff09\npython3 -m playwright codegen --target python -o &#039;mikezhou.py&#039; -b chromium https:\/\/www.baidu.com\n\npython -m playwright codegen --target python -o mikezhou.py -b webkit https:\/\/visa-fr.tlscontact.com\/gb\/lon\/login.php\n<\/code><\/pre>\n<p>\u547d\u4ee4\u884c\u8f93\u5165\u540e\u4f1a\u81ea\u52a8\u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u7136\u540e\u53ef\u4ee5\u770b\u89c1\u5728\u6d4f\u89c8\u5668\u4e0a\u7684\u4e00\u4e3e\u4e00\u52a8\u90fd\u4f1a\u88ab\u81ea\u52a8\u7ffb\u8bd1\u6210\u4ee3\u7801\uff0c\u5982\u4e0b\u6240\u793a:<\/p>\n<p><img src=\"https:\/\/img.jbzj.com\/file_images\/article\/202112\/202112120934044.png\" alt=\"\" \/><\/p>\n<p><img src=\"https:\/\/img.jbzj.com\/file_images\/article\/202112\/202112120934045.png\" alt=\"\" \/><\/p>\n<p>\u6700\u540e\uff0c\u81ea\u52a8\u5316\u811a\u672c\u4f1a\u81ea\u52a8\u751f\u6210\uff0c\u4fdd\u5b58\u5230\u6587\u4ef6\u4e2dmikezhou.py, \u4e14\u4e0a\u8ff0\u6240\u6709\u7684\u4eba\u5de5\u64cd\u4f5c\uff0c\u90fd\u4f1a\u88ab\u81ea\u52a8\u8f6c\u5316\u6210\u4ee3\u7801\uff1a<\/p>\n<pre><code>from playwright import sync\\_playwright\n\ndef run(playwright):\n    browser = playwright.chromium.launch(headless=False)\n    context = browser.newContext()\n\n    # Open new page\n    page = context.newPage()\n\n    # Go to https:\/\/www.baidu.com\/\n    page.goto(&quot;https:\/\/www.baidu.com\/&quot;)\n\n    # Click input\\[name=&quot;wd&quot;\\]\n    page.click(&quot;input\\[name=\\\\&quot;wd\\\\&quot;\\]&quot;)\n\n    # Fill input\\[name=&quot;wd&quot;\\]\n    page.fill(&quot;input\\[name=\\\\&quot;wd\\\\&quot;\\]&quot;, &quot;\u79be\u76ee\u5927&quot;)\n\n    # Press CapsLock\n    page.press(&quot;input\\[name=\\\\&quot;wd\\\\&quot;\\]&quot;, &quot;CapsLock&quot;)\n\n    # Fill input\\[name=&quot;wd&quot;\\]\n    page.fill(&quot;input\\[name=\\\\&quot;wd\\\\&quot;\\]&quot;, &quot;\u81ea\u52a8\u5316\u6d4b\u8bd5\u5b9e\u6218\u5b9d\u5178 &quot;)\n\n    # Press Enter\n    page.press(&quot;input\\[name=\\\\&quot;wd\\\\&quot;\\]&quot;, &quot;Enter&quot;)\n    # assert page.url() == &quot;https:\/\/www.baidu.com\/s?ie=utf-8&amp;f=8&amp;rsv\\_bp=1&amp;rsv\\_idx=1&amp;tn=baidu&amp;wd=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E5%AE%9D%E5%85%B8%20&amp;fenlei=256&amp;rsv\\_pq=af40e9aa00012d5a&amp;rsv\\_t=c659gpz2%2Fjri1SAoIXdT9gP%2BmrqufXzRtMSSAL0n0fv7GSoLF5vaiNVPA3U&amp;rqlang=cn&amp;rsv\\_enter=1&amp;rsv\\_dl=tb&amp;rsv\\_sug3=38&amp;rsv\\_sug1=22&amp;rsv\\_sug7=100&amp;rsv\\_sug2=0&amp;rsv\\_btype=i&amp;inputT=8034&amp;rsv\\_sug4=9153&quot;\n\n    # Close page\n    page.close()\n\n    # ---------------------\n    context.close()\n    browser.close()\n\nwith sync\\_playwright() as playwright:\n    run(playwright)\n<\/code><\/pre>\n<p><strong>2\uff09\u652f\u6301\u540c\u6b65<\/strong><\/p>\n<p>\u5230\u6b64\u8fd9\u7bc7\u5173\u4e8ePython\u5f00\u6e90\u81ea\u52a8\u5316\u5de5\u5177Playwright\u5b89\u88c5\u53ca\u4ecb\u7ecd\u4f7f\u7528\u7684\u6587\u7ae0\u5c31\u4ecb\u7ecd\u5230\u8fd9\u4e86<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u4ecb \u5fae\u8f6f\u5f00\u6e90\u4e86\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u81ea\u52a8\u5316\u9879\u76ee\u53eb playwright-python \u5b83\u652f\u6301\u4e3b\u6d41\u7684\u6d4f\u89c8\u5668\uff0c\u5305\u542b\uff1aChrome\u3001Firefox\u3001   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[121],"tags":[122],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1431"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1431"}],"version-history":[{"count":3,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1431\/revisions"}],"predecessor-version":[{"id":1434,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1431\/revisions\/1434"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1431"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}