﻿{"id":1097,"date":"2021-11-30T04:42:04","date_gmt":"2021-11-29T20:42:04","guid":{"rendered":"https:\/\/byy3.com\/?p=1097"},"modified":"2021-11-30T05:00:43","modified_gmt":"2021-11-29T21:00:43","slug":"%e6%8e%a8%e8%8d%90%e4%b8%80%e6%ac%be%e6%9c%80%e5%bc%bapython%e8%87%aa%e5%8a%a8%e5%8c%96%e7%a5%9e%e5%99%a8%ef%bc%81%e4%b8%8d%e7%94%a8%e5%86%99%e4%b8%80%e8%a1%8c%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"https:\/\/byy3.com\/?p=1097","title":{"rendered":"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801"},"content":{"rendered":"<p>\u641e\u8fc7\u81ea\u52a8\u5316\u6d4b\u8bd5\u7684\u5c0f\u4f19\u4f34\uff0c\u76f8\u4fe1\u90fd\u77e5\u9053\uff0c\u5728Web\u81ea\u52a8\u5316\u6d4b\u8bd5\u4e2d\uff0c\u6709\u4e00\u6b3e\u81ea\u52a8\u5316\u6d4b\u8bd5\u795e\u5668\u5de5\u5177:\u00a0<code>selenium<\/code>\u3002\u7ed3\u5408\u6807\u51c6\u7684WebDriver API\u6765\u7f16\u5199Python\u81ea\u52a8\u5316\u811a\u672c\uff0c\u53ef\u4ee5\u5b9e\u73b0\u89e3\u653e\u53cc\u624b\uff0c\u8ba9\u811a\u672c\u4ee3\u66ff\u4eba\u5de5\u5728Web\u6d4f\u89c8\u5668\u4e0a\u5b8c\u6210\u6307\u5b9a\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u867d\u7136<code>selenium<\/code>\u6709\u5b8c\u5907\u7684\u6587\u6863\uff0c\u4f46\u4e5f\u9700\u8981\u4e00\u5b9a\u7684\u5b66\u4e60\u6210\u672c\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u7eaf\u5c0f\u767d\u6765\u8bb2\u8fd8\u662f\u6709\u4e9b\u95e8\u69db\u7684\u3002<\/p>\n<p>\u6700\u8fd1\uff0c<strong>\u5fae\u8f6f\u5f00\u6e90<\/strong>\u4e86\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u81ea\u52a8\u5316\u9879\u76ee\u53eb<strong>\u300cplaywright-python\u300d<\/strong>\uff0c\u9879\u76ee\u5730\u5740\uff1a<\/p>\n<pre><code class=\"language-python hljs\">https:\/\/github.com\/microsoft\/playwright-python\r\n<\/code><\/pre>\n<p>\u5b83\u652f\u6301\u4e3b\u6d41\u7684\u6d4f\u89c8\u5668\uff0c\u5305\u542b\uff1a<code>Chrome<\/code>\u3001<code>Firefox<\/code>\u3001<code>Safari<\/code>\u3001<code>Microsoft Edge<\/code>\u00a0\u7b49\uff0c\u540c\u65f6\u652f\u6301\u4ee5<strong>\u65e0\u5934\u6a21\u5f0f<\/strong>\u3001<strong>\u6709\u5934\u6a21\u5f0f\u8fd0\u884c<\/strong>\uff0c\u5e76\u63d0\u4f9b\u4e86<code>\u540c\u6b65<\/code>\u3001<code>\u5f02\u6b65<\/code>\u7684 API\uff0c\u53ef\u4ee5\u7ed3\u5408\u00a0<code>Pytest<\/code>\u00a0\u6d4b\u8bd5\u6846\u67b6\u4f7f\u7528\uff0c\u5e76\u4e14\u652f\u6301\u6d4f\u89c8\u5668\u7aef\u7684\u81ea\u52a8\u5316\u811a\u672c\u5f55\u5236\u3002<\/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\u5bf9Python\u8bed\u8a00\u7684\u7eaf\u81ea\u52a8\u5316\u5de5\u5177\uff0c<strong>\u53ef\u4ee5\u505a\u5230\uff0c\u8fde\u4e00\u884c\u4ee3\u7801\u90fd\u4e0d\u7528\u5199\uff0c\u5c31\u80fd\u5b9e\u73b0\u81ea\u52a8\u5316\u529f\u80fd<\/strong>\u3002\u542c\u8d77\u6765\uff0c\u7b80\u76f4\u592a\u7889\u5821\u4e86\uff01<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" data-original=\"https:\/\/tva1.sinaimg.cn\/large\/0081Kckwgy1glokzjmfhbj30a008ogmg.jpg\" src=\"https:\/\/byy3.com\/wp-content\/themes\/MNews%20V2.4\/images\/post-loading.gif\" title=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe\" alt=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe\" \/><\/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 id=\"1-playwright\u4ecb\u7ecd\"><strong>1.<\/strong>\u00a0Playwright\u4ecb\u7ecd<\/h2>\n<p>Playwright\u662f\u4e00\u4e2a\u5f3a\u5927\u7684Python\u5e93\uff0c\u4ec5\u7528\u4e00\u4e2aAPI\u5373\u53ef\u81ea\u52a8\u6267\u884c<code>Chromium<\/code>\u3001<code>Firefox<\/code>\u3001<code>WebKit<\/code>\u7b49\u4e3b\u6d41\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u64cd\u4f5c\uff0c\u5e76\u540c\u65f6\u652f\u6301\u4ee5<strong>\u65e0\u5934\u6a21\u5f0f<\/strong>\u3001<strong>\u6709\u5934\u6a21\u5f0f<\/strong>\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\u6301<code>Linux<\/code>\u3001<code>Mac<\/code>\u4ee5\u53ca<code>Windows<\/code>\u64cd\u4f5c\u7cfb\u7edf\u3002<\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" data-original=\"https:\/\/tva1.sinaimg.cn\/large\/0081Kckwgy1glom60ty7aj31aq0q8dka.jpg\" src=\"https:\/\/byy3.com\/wp-content\/themes\/MNews%20V2.4\/images\/post-loading.gif\" title=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe1\" alt=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe1\" \/><\/p>\n<p><strong>\u5b98\u7f51\uff1a<\/strong><\/p>\n<pre><code class=\"hljs less\"><span class=\"hljs-attribute\">https<\/span>:<span class=\"hljs-comment\">\/\/playwright.dev\/<\/span>\r\n<\/code><\/pre>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" data-original=\"https:\/\/tva1.sinaimg.cn\/large\/0081Kckwgy1glolzgfopyj31mb0u0dm9.jpg\" src=\"https:\/\/byy3.com\/wp-content\/themes\/MNews%20V2.4\/images\/post-loading.gif\" title=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe2\" alt=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe2\" \/><\/p>\n<p>\u4ece\u5b98\u7f51\u4e0a\u6765\u770b\uff0c\u5b98\u65b9\u7ed9<code>Playwright<\/code>\u5b9a\u4f4d\u662f\u4e00\u6b3e\u771f\u6b63\u610f\u4e49\u4e0a\u7684Web\u7aef\u5230\u7aef\u6d4b\u8bd5\u5de5\u5177\u3002<\/p>\n<h2 id=\"2-playwright\u4f7f\u7528\"><strong>2.<\/strong>\u00a0Playwright\u4f7f\u7528<\/h2>\n<h4 id=\"21-\u5b89\u88c5\">2.1 \u5b89\u88c5<\/h4>\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<\/strong>\u00a0(\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cplaywright\u5e93\u9700\u8981\u4f9d\u8d56Python3.7+\u4ee5\u4e0a)<\/p>\n<p><code class=\"language-python hljs\"><span class=\"hljs-comment\"># \u5b89\u88c5\u4f9d\u8d56\u5e93<\/span><\/p>\n<p>\u279c ~ <span style=\"font-size: 14pt;\"><strong>pip3 install playwright<\/strong><\/span><br \/>\nLooking <span class=\"hljs-keyword\">in<\/span> indexes: https:\/\/pypi.douban.com\/simple<br \/>\nCollecting playwright<br \/>\n Downloading https:\/\/pypi.doubanio.com\/packages\/<span class=\"hljs-number\">08<\/span>\/f0\/<span class=\"hljs-number\">9<\/span>f937ccff3221685d4a8bd406649c85855b9b6a2fafe75920b02151b48e0\/playwright<span class=\"hljs-number\">-0.162<\/span><span class=\"hljs-number\">.2<\/span>-py3-none-macosx_10_13_x86_64.whl (<span class=\"hljs-number\">58.2<\/span> MB)<br \/>\n |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| <span class=\"hljs-number\">58.2<\/span> MB <span class=\"hljs-number\">1.6<\/span> MB\/s<br \/>\nCollecting greenlet==<span class=\"hljs-number\">1.0<\/span>a1<br \/>\n Downloading https:\/\/pypi.doubanio.com\/packages\/aa\/<span class=\"hljs-number\">74<\/span>\/<span class=\"hljs-number\">6e93515873829<\/span>a8d894863bbae1d709405bdd50d66fdf239480cc9db0598\/greenlet<span class=\"hljs-number\">-1.0<\/span>a1-cp38-cp38-macosx_10_9_x86_64.whl (<span class=\"hljs-number\">86<\/span> kB)<br \/>\n |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| <span class=\"hljs-number\">86<\/span> kB <span class=\"hljs-number\">6.9<\/span> MB\/s<br \/>\nCollecting typing-extensions<br \/>\n Downloading https:\/\/pypi.doubanio.com\/packages\/<span class=\"hljs-number\">60<\/span>\/<span class=\"hljs-number\">7<\/span>a\/e881b5abb54db0e6e671ab088d079c57ce54e8a01a3ca443f561ccadb37e\/typing_extensions<span class=\"hljs-number\">-3.7<\/span><span class=\"hljs-number\">.4<\/span><span class=\"hljs-number\">.3<\/span>-py3-none-<span class=\"hljs-built_in\">any<\/span>.whl (<span class=\"hljs-number\">22<\/span> kB)<br \/>\nCollecting pyee&gt;=<span class=\"hljs-number\">8.0<\/span><span class=\"hljs-number\">.1<\/span><br \/>\n Downloading https:\/\/pypi.doubanio.com\/packages\/<span class=\"hljs-number\">0<\/span>d\/<span class=\"hljs-number\">0<\/span>a\/<span class=\"hljs-number\">933<\/span>b3931107e1da186963fd9bb9bceb9a613cff034cb0fb3b0c61003f357\/pyee<span class=\"hljs-number\">-8.1<\/span><span class=\"hljs-number\">.0<\/span>-py2.py3-none-<span class=\"hljs-built_in\">any<\/span>.whl (<span class=\"hljs-number\">12<\/span> kB)<br \/>\nInstalling collected packages: greenlet, typing-extensions, pyee, playwright<br \/>\nSuccessfully installed greenlet<span class=\"hljs-number\">-1.0<\/span>a1 playwright<span class=\"hljs-number\">-0.162<\/span><span class=\"hljs-number\">.2<\/span> pyee<span class=\"hljs-number\">-8.1<\/span><span class=\"hljs-number\">.0<\/span> typing-extensions<span class=\"hljs-number\">-3.7<\/span><span class=\"hljs-number\">.4<\/span><span class=\"hljs-number\">.3<\/span><br \/>\n<\/code><\/p>\n<p>\u53ef\u4ee5\u5728<code>https:\/\/pypi.org\/project\/playwright\/<\/code>\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<p><code class=\"hljs yaml\"><span class=\"hljs-comment\"># \u5b89\u88c5\u6d4f\u89c8\u5668\u9a71\u52a8\uff08\u5b89\u88c5\u8fc7\u7a0b\u7a0d\u5fae\u6709\u70b9\u6162\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\uff09<\/span><br \/>\n<span class=\"hljs-string\">\u279c<\/span> <span class=\"hljs-string\">~<\/span> <\/code><\/p>\n<p><span style=\"font-size: 14pt;\"><strong><code class=\"hljs yaml\"><span class=\"hljs-string\">python3<\/span> <span class=\"hljs-string\">-m<\/span> <span class=\"hljs-string\">playwright install<\/span><\/code><\/strong><\/span><\/p>\n<p><code class=\"hljs yaml\"><span class=\"hljs-string\">Downloading<\/span> <span class=\"hljs-string\">chromium<\/span> <span class=\"hljs-string\">v827102<\/span> <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-number\">121.3<\/span> <span class=\"hljs-string\">Mb<\/span> [<span class=\"hljs-string\">====================<\/span>] <span class=\"hljs-number\">100<\/span><span class=\"hljs-string\">%<\/span> <span class=\"hljs-number\">0.<\/span><span class=\"hljs-string\">0s<\/span><br \/>\n<span class=\"hljs-string\">chromium<\/span> <span class=\"hljs-string\">v827102<\/span> <span class=\"hljs-string\">downloaded<\/span> <span class=\"hljs-string\">to<\/span> <span class=\"hljs-string\">\/Users\/xxx\/Library\/Caches\/ms-playwright\/chromium-827102<\/span><br \/>\n<span class=\"hljs-string\">Downloading<\/span> <span class=\"hljs-string\">firefox<\/span> <span class=\"hljs-string\">v1205<\/span> <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-number\">74.1<\/span> <span class=\"hljs-string\">Mb<\/span> [ ] <span class=\"hljs-number\">1<\/span><span class=\"hljs-string\">%<\/span> <span class=\"hljs-number\">37767.<\/span><span class=\"hljs-string\">9s<\/span><br \/>\n<\/code><\/p>\n<p>3.<strong>\u5982\u679c\u60f3\u67e5\u770b<code>Playwright<\/code>\u652f\u6301\u7684\u529f\u80fd<\/strong>\uff0c \u53ef\u4ee5\u76f4\u63a5\u5728\u547d\u4ee4\u884c\u8f93\u5165\uff1a<\/p>\n<p><code class=\"language-python hljs\">\u279c ~ python3 -m playwright <span class=\"hljs-built_in\">help<\/span><br \/>\nUsage: index [options] [command]<\/p>\n<p>Options:<br \/>\n -V, --version output the version number<br \/>\n -b, --browser &lt;browserType&gt; browser to use, one of cr, chromium, ff, firefox, wk,<br \/>\n webkit (default: <span class=\"hljs-string\">\"chromium\"<\/span>)<br \/>\n --color-scheme &lt;scheme&gt; emulate preferred color scheme, <span class=\"hljs-string\">\"light\"<\/span> <span class=\"hljs-keyword\">or<\/span> <span class=\"hljs-string\">\"dark\"<\/span><br \/>\n --device &lt;deviceName&gt; emulate device, <span class=\"hljs-keyword\">for<\/span> example <span class=\"hljs-string\">\"iPhone 11\"<\/span><br \/>\n --geolocation &lt;coordinates&gt; specify geolocation coordinates, <span class=\"hljs-keyword\">for<\/span> example<br \/>\n <span class=\"hljs-string\">\"37.819722,-122.478611\"<\/span><br \/>\n --lang &lt;language&gt; specify language \/ locale, <span class=\"hljs-keyword\">for<\/span> example <span class=\"hljs-string\">\"en-GB\"<\/span><br \/>\n --proxy-server &lt;proxy&gt; specify proxy server, <span class=\"hljs-keyword\">for<\/span> example <span class=\"hljs-string\">\"http:\/\/myproxy:3128\"<\/span> <span class=\"hljs-keyword\">or<\/span><br \/>\n <span class=\"hljs-string\">\"socks5:\/\/myproxy:8080\"<\/span><br \/>\n --timezone &lt;time zone&gt; time zone to emulate, <span class=\"hljs-keyword\">for<\/span> example <span class=\"hljs-string\">\"Europe\/Rome\"<\/span><br \/>\n --timeout &lt;timeout&gt; timeout <span class=\"hljs-keyword\">for<\/span> Playwright actions <span class=\"hljs-keyword\">in<\/span> milliseconds (default:<br \/>\n <span class=\"hljs-string\">\"10000\"<\/span>)<br \/>\n --user-agent &lt;ua string&gt; specify user agent string<br \/>\n --viewport-size &lt;size&gt; specify browser viewport size <span class=\"hljs-keyword\">in<\/span> pixels, <span class=\"hljs-keyword\">for<\/span> example <span class=\"hljs-string\">\"1280,<br \/>\n 720\"<\/span><br \/>\n -h, --<span class=\"hljs-built_in\">help<\/span> display <span class=\"hljs-built_in\">help<\/span> <span class=\"hljs-keyword\">for<\/span> command<\/p>\n<p>Commands:<br \/>\n <span class=\"hljs-built_in\">open<\/span> [url] <span class=\"hljs-built_in\">open<\/span> page <span class=\"hljs-keyword\">in<\/span> browser specified via -b, --browser<br \/>\n cr [url] <span class=\"hljs-built_in\">open<\/span> page <span class=\"hljs-keyword\">in<\/span> Chromium<br \/>\n ff [url] <span class=\"hljs-built_in\">open<\/span> page <span class=\"hljs-keyword\">in<\/span> Firefox<br \/>\n wk [url] <span class=\"hljs-built_in\">open<\/span> page <span class=\"hljs-keyword\">in<\/span> WebKit<br \/>\n codegen [options] [url] <span class=\"hljs-built_in\">open<\/span> page <span class=\"hljs-keyword\">and<\/span> generate code <span class=\"hljs-keyword\">for<\/span> user actions<br \/>\n screenshot [options] &lt;url&gt; &lt;filename&gt; capture a page screenshot<br \/>\n pdf [options] &lt;url&gt; &lt;filename&gt; save page <span class=\"hljs-keyword\">as<\/span> pdf<br \/>\n install Ensure browsers necessary <span class=\"hljs-keyword\">for<\/span> this version of Playwright<br \/>\n are installed<br \/>\n <span class=\"hljs-built_in\">help<\/span> [command] display <span class=\"hljs-built_in\">help<\/span> <span class=\"hljs-keyword\">for<\/span> command<br \/>\n<\/code><\/p>\n<p>\u4ece\u547d\u4ee4\u884c\u5e2e\u52a9\u4fe1\u606f\u4e2d\u53ef\u4ee5\u770b\u51fa\uff0c<code>Playwright<\/code>\u652f\u6301\u7684\u529f\u80fd\u76f8\u5f53\u4e30\u5bcc\uff01<\/p>\n<h2 id=\"3-\u5b9e\u64cd\u6f14\u793a\">3. \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>3.1 \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 class=\"hljs verilog\">\u279c ~ python3 -m playwright codegen --help\r\nUsage: index codegen [options] [url]\r\n\r\nopen page <span class=\"hljs-keyword\">and<\/span> <span class=\"hljs-keyword\">generate<\/span> code <span class=\"hljs-keyword\">for<\/span> user actions\r\n\r\nOptions:\r\n -o, --<span class=\"hljs-keyword\">output<\/span> &lt;file name&gt; saves the generated script to a file\r\n --target &lt;language&gt; language to <span class=\"hljs-keyword\">use<\/span>, one of javascript, python, python-async, csharp (<span class=\"hljs-keyword\">default<\/span>: <span class=\"hljs-string\">\"python\"<\/span>)\r\n -h, --help display help <span class=\"hljs-keyword\">for<\/span> command\r\n\r\nExamples:\r\n\r\n $ codegen\r\n $ codegen --target=python\r\n $ -b webkit codegen https:<span class=\"hljs-comment\">\/\/example.com<\/span>\r\n<\/code><\/pre>\n<p><strong>\u5176\u4e2d<\/strong><\/p>\n<ul>\n<li>python -m playwright codegen \u5f55\u5236\u811a\u672c<\/li>\n<li>--help \u5e2e\u52a9\u6587\u6863<\/li>\n<li>-o \u751f\u6210\u81ea\u52a8\u5316\u811a\u672c\u7684\u76ee\u5f55<\/li>\n<li>--target \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 class=\"language-python hljs\"><span class=\"hljs-comment\"># \u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u547d\u4ee4\u6253\u5f00 Chrome \u6d4f\u89c8\u5668\u5f00\u59cb\u5f55\u5236\u811a\u672c<\/span>\r\n<span class=\"hljs-comment\"># \u6307\u5b9a\u751f\u6210\u8bed\u8a00\u4e3a:Python\uff08\u9ed8\u8ba4Python\uff0c\u53ef\u9009\uff09<\/span>\r\n<span class=\"hljs-comment\"># \u4fdd\u5b58\u7684\u6587\u4ef6\u540d\uff1amikezhou.py\uff08\u53ef\u9009\uff09<\/span>\r\n<span class=\"hljs-comment\"># \u6d4f\u89c8\u5668\u9a71\u52a8\uff1awebkit\uff08\u9ed8\u8ba4webkit\uff0c\u53ef\u9009\uff09<\/span>\r\n<span class=\"hljs-comment\"># \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<\/span>\r\npython3 -m playwright codegen --target python -o <span class=\"hljs-string\">'mikezhou.py'<\/span> -b chromium https:\/\/www.baidu.com\r\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 decoding=\"async\" class=\"medium-zoom-image\" data-original=\"https:\/\/tva1.sinaimg.cn\/large\/0081Kckwgy1gloni65ydtj31go0qytic.jpg\" src=\"https:\/\/byy3.com\/wp-content\/themes\/MNews%20V2.4\/images\/post-loading.gif\" title=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe3\" alt=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe3\" \/><\/p>\n<p><img decoding=\"async\" class=\"medium-zoom-image\" data-original=\"https:\/\/tva1.sinaimg.cn\/large\/0081Kckwgy1glonk1oli8j31fv0qn4cr.jpg\" src=\"https:\/\/byy3.com\/wp-content\/themes\/MNews%20V2.4\/images\/post-loading.gif\" title=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe4\" alt=\"\u63a8\u8350\u4e00\u6b3e\u6700\u5f3aPython\u81ea\u52a8\u5316\u795e\u5668\uff01\u4e0d\u7528\u5199\u4e00\u884c\u4ee3\u7801\u63d2\u56fe4\" \/><\/p>\n<p>\u6700\u540e\uff0c\u81ea\u52a8\u5316\u811a\u672c\u4f1a\u81ea\u52a8\u751f\u6210\uff0c\u4fdd\u5b58\u5230\u6587\u4ef6\u4e2d<code>mikezhou.py<\/code>, \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 class=\"language-python hljs\"><span class=\"hljs-keyword\">from<\/span> playwright <span class=\"hljs-keyword\">import<\/span> sync_playwright\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">run<\/span>(<span class=\"hljs-params\">playwright<\/span>):<\/span>\r\n browser = playwright.chromium.launch(headless=<span class=\"hljs-literal\">False<\/span>)\r\n context = browser.newContext()\r\n\r\n <span class=\"hljs-comment\"># Open new page<\/span>\r\n page = context.newPage()\r\n\r\n <span class=\"hljs-comment\"># Go to https:\/\/www.baidu.com\/<\/span>\r\n page.goto(<span class=\"hljs-string\">\"https:\/\/www.baidu.com\/\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># Click input[name=\"wd\"]<\/span>\r\n page.click(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># Fill input[name=\"wd\"]<\/span>\r\n page.fill(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"\u79be\u76ee\u5927\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># Press CapsLock<\/span>\r\n page.press(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"CapsLock\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># Fill input[name=\"wd\"]<\/span>\r\n page.fill(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"\u81ea\u52a8\u5316\u6d4b\u8bd5\u5b9e\u6218\u5b9d\u5178 \"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># Press Enter<\/span>\r\n page.press(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"Enter\"<\/span>)\r\n <span class=\"hljs-comment\"># assert page.url() == \"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\"<\/span>\r\n\r\n <span class=\"hljs-comment\"># Close page<\/span>\r\n page.close()\r\n\r\n <span class=\"hljs-comment\"># ---------------------<\/span>\r\n context.close()\r\n browser.close()\r\n\r\n<span class=\"hljs-keyword\">with<\/span> sync_playwright() <span class=\"hljs-keyword\">as<\/span> playwright:\r\n run(playwright)\r\n<\/code><\/pre>\n<p><strong>3.2 \u652f\u6301\u540c\u6b65<\/strong><\/p>\n<p>\u540c\u6b65\u7684\u5173\u952e\u5b57\u4e3a\uff1a<code>sync_playwright<\/code><\/p>\n<p>\u6bd4\u5982\uff0c\u6211\u4eec\u4f9d\u6b21\u4f7f\u7528\u4e09\u4e2a\u6d4f\u89c8\u5668\u5185\u6838\u6253\u5f00\u6d4f\u89c8\u5668\uff0c\u7136\u540e\u767e\u5ea6\u4e00\u4e0b\uff0c\u63a5\u7740\u5bf9\u5728\u641c\u7d22\u754c\u9762\u622a\u56fe\uff0c\u6700\u540e\u5173\u95ed\u6d4f\u89c8\u5668<\/p>\n<pre><code class=\"language-python hljs\"><span class=\"hljs-keyword\">from<\/span> time <span class=\"hljs-keyword\">import<\/span> sleep\r\n<span class=\"hljs-keyword\">from<\/span> playwright <span class=\"hljs-keyword\">import<\/span> sync_playwright\r\n\r\n<span class=\"hljs-comment\"># \u6ce8\u610f\uff1a\u9ed8\u8ba4\u662f\u65e0\u5934\u6a21\u5f0f<\/span>\r\n<span class=\"hljs-keyword\">with<\/span> sync_playwright() <span class=\"hljs-keyword\">as<\/span> p:\r\n <span class=\"hljs-comment\"># \u5206\u522b\u5bf9\u5e94\u4e09\u4e2a\u6d4f\u89c8\u5668\u9a71\u52a8<\/span>\r\n <span class=\"hljs-keyword\">for<\/span> browser_type <span class=\"hljs-keyword\">in<\/span> [p.chromium, p.firefox, p.webkit]:\r\n\r\n <span class=\"hljs-comment\"># \u6307\u5b9a\u4e3a\u6709\u5934\u6a21\u5f0f\uff0c\u65b9\u4fbf\u67e5\u770b<\/span>\r\n browser = browser_type.launch(headless=<span class=\"hljs-literal\">False<\/span>)\r\n page = browser.newPage()\r\n page.goto(<span class=\"hljs-string\">'http:\/\/baidu.com'<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u6267\u884c\u4e00\u6b21\u641c\u7d22\u64cd\u4f5c<\/span>\r\n page.fill(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"\u81ea\u52a8\u5316\u6d4b\u8bd5\u5b9e\u6218\u5b9d\u5178\"<\/span>)\r\n <span class=\"hljs-keyword\">with<\/span> page.expect_navigation():\r\n page.press(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"Enter\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u7b49\u5f85\u9875\u9762\u52a0\u8f7d\u5b8c\u5168<\/span>\r\n page.waitForSelector(<span class=\"hljs-string\">\"text=\u641c\u7d22\u5de5\u5177\"<\/span>)\r\n \r\n <span class=\"hljs-comment\"># \u622a\u56fe<\/span>\r\n page.screenshot(path=<span class=\"hljs-string\">f'test-<span class=\"hljs-subst\">{browser_type.name}<\/span>.png'<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u4f11\u77203s<\/span>\r\n sleep(<span class=\"hljs-number\">3<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u5173\u95ed\u6d4f\u89c8\u5668<\/span>\r\n browser.close()\r\n<\/code><\/pre>\n<p>\u9700\u8981\u6307\u51fa\u7684\u662f\uff0c<code>playwright-python<\/code>\u00a0\u5185\u7f6e\u7684 API \u57fa\u672c\u4e0a\u56ca\u62ec\u5e38\u89c1\u7684\u81ea\u52a8\u5316\u64cd\u4f5c<\/p>\n<p><strong>3.3 \u652f\u6301\u5f02\u6b65<\/strong><\/p>\n<p>\u5f02\u6b65\u6b65\u7684\u5173\u952e\u5b57\u4e3a\uff1a<code>async_playwright<\/code>\uff0c\u5f02\u6b65\u64cd\u4f5c\u53ef\u7ed3\u5408asyncio\u540c\u65f6\u8fdb\u884c\u4e09\u4e2a\u6d4f\u89c8\u5668\u64cd\u4f5c\u3002<\/p>\n<pre><code class=\"language-python hljs\"><span class=\"hljs-keyword\">import<\/span> asyncio\r\n<span class=\"hljs-keyword\">from<\/span> playwright <span class=\"hljs-keyword\">import<\/span> async_playwright\r\n\r\n<span class=\"hljs-comment\"># \u5f02\u6b65\u6267\u884c<\/span>\r\n<span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">main<\/span>():<\/span>\r\n <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-keyword\">with<\/span> async_playwright() <span class=\"hljs-keyword\">as<\/span> p:\r\n <span class=\"hljs-keyword\">for<\/span> browser_type <span class=\"hljs-keyword\">in<\/span> [p.chromium, p.firefox, p.webkit]:\r\n <span class=\"hljs-comment\"># \u6307\u5b9a\u4e3a\u6709\u5934\u6a21\u5f0f\uff0c\u65b9\u4fbf\u67e5\u770b<\/span>\r\n browser = <span class=\"hljs-keyword\">await<\/span> browser_type.launch(headless=<span class=\"hljs-literal\">False<\/span>)\r\n page = <span class=\"hljs-keyword\">await<\/span> browser.newPage()\r\n\r\n <span class=\"hljs-keyword\">await<\/span> page.goto(<span class=\"hljs-string\">'http:\/\/baidu.com'<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u6267\u884c\u4e00\u6b21\u641c\u7d22\u64cd\u4f5c<\/span>\r\n <span class=\"hljs-keyword\">await<\/span> page.fill(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"\u81ea\u52a8\u5316\u6d4b\u8bd5\u5b9e\u6218\u5b9d\u5178\"<\/span>)\r\n <span class=\"hljs-keyword\">await<\/span> page.press(<span class=\"hljs-string\">\"input[name=\\\"wd\\\"]\"<\/span>, <span class=\"hljs-string\">\"Enter\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u7b49\u5f85\u9875\u9762\u52a0\u8f7d\u5b8c\u5168<\/span>\r\n <span class=\"hljs-keyword\">await<\/span> page.waitForSelector(<span class=\"hljs-string\">\"text=\u641c\u7d22\u5de5\u5177\"<\/span>)\r\n\r\n <span class=\"hljs-comment\"># \u622a\u56fe<\/span>\r\n <span class=\"hljs-keyword\">await<\/span> page.screenshot(path=<span class=\"hljs-string\">f'test-<span class=\"hljs-subst\">{browser_type.name}<\/span>.png'<\/span>)\r\n <span class=\"hljs-keyword\">await<\/span> browser.close()\r\n\r\nasyncio.get_event_loop().run_until_complete(main())\r\n<\/code><\/pre>\n<p><strong>3.4 \u652f\u6301\u79fb\u52a8\u7aef<\/strong><\/p>\n<p>\u66f4\u5389\u5bb3\u7684\u662f\uff0cplaywright\u8fd8\u53ef\u652f\u6301\u79fb\u52a8\u7aef\u7684\u6d4f\u89c8\u5668\u6a21\u62df\u3002\u4e0b\u9762\u662f\u5b98\u65b9\u6587\u6863\u63d0\u4f9b\u7684\u4e00\u6bb5\u4ee3\u7801\uff0c\u6a21\u62df\u5728\u7ed9\u5b9a\u5730\u7406\u4f4d\u7f6e\u4e0a\u624b\u673aiphone 11 pro\u4e0a\u7684Safari\u6d4f\u89c8\u5668\uff0c\u9996\u5148\u5bfc\u822a\u5230maps.google.com\uff0c\u7136\u540e\u6267\u884c\u5b9a\u4f4d\u5e76\u622a\u56fe\u3002<\/p>\n<pre><code class=\"language-python hljs\"><span class=\"hljs-keyword\">from<\/span> playwright <span class=\"hljs-keyword\">import<\/span> sync_playwright\r\n\r\n<span class=\"hljs-keyword\">with<\/span> sync_playwright() <span class=\"hljs-keyword\">as<\/span> p:\r\n iphone_11 = p.devices[<span class=\"hljs-string\">'iPhone 11 Pro'<\/span>]\r\n browser = p.webkit.launch(headless=<span class=\"hljs-literal\">False<\/span>)\r\n context = browser.newContext(\r\n **iphone_11,\r\n locale=<span class=\"hljs-string\">'en-US'<\/span>,\r\n geolocation={ <span class=\"hljs-string\">'longitude'<\/span>: <span class=\"hljs-number\">12.492507<\/span>, <span class=\"hljs-string\">'latitude'<\/span>: <span class=\"hljs-number\">41.889938<\/span> },\r\n permissions=[<span class=\"hljs-string\">'geolocation'<\/span>]\r\n )\r\n page = context.newPage()\r\n page.goto(<span class=\"hljs-string\">'https:\/\/maps.google.com'<\/span>)\r\n page.click(<span class=\"hljs-string\">'text=\"Your location\"'<\/span>)\r\n page.screenshot(path=<span class=\"hljs-string\">'colosseum-iphone.png'<\/span>)\r\n browser.close()\r\n<\/code><\/pre>\n<p><strong>3. 5 \u652f\u6301Pytest\u6846\u67b6<\/strong><\/p>\n<p>\u53e6\u5916\uff0c\u8fd8\u53ef\u4ee5\u914d\u5408pytest\u63d2\u4ef6\u4e00\u8d77\u4f7f\u7528\uff0c\u7ed9\u51fa\u4e00\u6bb5\u5b98\u7f51\u793a\u4f8b:<\/p>\n<pre><code class=\"language-python hljs\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">test_playwright_is_visible_on_google<\/span>(<span class=\"hljs-params\">page<\/span>):<\/span>\r\n page.goto(<span class=\"hljs-string\">\"https:\/\/www.google.com\"<\/span>)\r\n page.<span class=\"hljs-built_in\">type<\/span>(<span class=\"hljs-string\">\"input[name=q]\"<\/span>, <span class=\"hljs-string\">\"Playwright GitHub\"<\/span>)\r\n page.click(<span class=\"hljs-string\">\"input[type=submit]\"<\/span>)\r\n page.waitForSelector(<span class=\"hljs-string\">\"text=microsoft\/Playwright\"<\/span>)\r\n<\/code><\/pre>\n<p>\u5f53\u7136\uff0c\u9664\u4e86\u4e0a\u9762\u5217\u4e3e\u51fa\u6765\u7684\u7279\u6027\uff0c\u8fd8\u6709\u66f4\u591a\u6709\u610f\u601d\u7684\u7528\u6cd5\uff0c\u611f\u5174\u8da3\u7684\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u63a2\u7d22\u4e00\u4e0b\u3002<\/p>\n<h4 id=\"4-\u6700\u540e\">4. \u6700\u540e<\/h4>\n<p>playwright\u76f8\u6bd4\u5df2\u6709\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6\u6765\u8bf4\uff0c\u5177\u6709\u6709\u5f88\u591a\u4f18\u52bf\uff0c\u6bd4\u5982\uff1a<\/p>\n<ul>\n<li>\u8de8\u6d4f\u89c8\u5668\uff0c\u652f\u6301Chromium\u3001Firefox\u3001WebKit<\/li>\n<li>\u8de8\u64cd\u4f5c\u7cfb\u7edf\uff0c\u652f\u6301Linux\u3001Mac\u3001Windows<\/li>\n<li>\u53ef\u63d0\u4f9b\u5f55\u5236\u751f\u6210\u4ee3\u7801\u529f\u80fd\uff0c\u89e3\u653e\u53cc\u624b<\/li>\n<li>\u53ef\u7528\u4e8e\u79fb\u52a8\u7aef<\/li>\n<\/ul>\n<p>\u76ee\u524d\u5b58\u5728\u7684\u7f3a\u70b9\u5c31\u662f\u751f\u6001\u548c\u6587\u6863\u8fd8\u4e0d\u662f\u975e\u5e38\u5b8c\u5907\uff0c\u6bd4\u5982\u6ca1\u6709API\u4e2d\u6587\u6587\u6863\u3001\u6ca1\u6709\u8f83\u597d\u7684\u6559\u7a0b\u548c\u793a\u4f8b\u4f9b\u5b66\u4e60\u3002\u4e0d\u8fc7\u76f8\u4fe1\uff0c\u968f\u7740\u77e5\u9053\u7684\u4eba\u8d8a\u6765\u8d8a\u591a\uff0c\u672a\u6765\u4f1a\u8d8a\u6765\u8d8a\u597d\u3002<\/p>\n<p>\u6700\u540e\uff0c\u518d\u8bf4\u4e00\u4e2a\u5c0f\u79d8\u5bc6\uff0cPlaywright \u662f\u4e00\u4e2a\u8de8\u8bed\u8a00\u7684\u81ea\u52a8\u5316\u6846\u67b6\uff0c\u9664\u4e86\u652f\u6301 Python\uff0c\u4e5f\u652f\u6301Java\u3001JS \u7b49\uff0c\u66f4\u52a0\u8be6\u7ec6\u7684\u529f\u80fd\u53ef\u4ee5\u901a\u8fc7\u5b98\u65b9\u9879\u76ee\u53bb\u89e3\u9501!<\/p>\n<p>\u5982\u679c\u4f60\u89c9\u5f97\u6587\u7ae0\u8fd8\u4e0d\u9519\uff0c\u8bf7\u5927\u5bb6\u00a0<strong>\u70b9\u8d5e\u3001\u5206\u4eab\u3001\u7559\u8a00<\/strong>\u00a0\u4e0b\uff0c\u56e0\u4e3a\u8fd9\u5c06\u662f\u6211\u6301\u7eed\u8f93\u51fa\u66f4\u591a\u4f18\u8d28\u6587\u7ae0\u7684\u6700\u5f3a\u52a8\u529b\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u641e\u8fc7\u81ea\u52a8\u5316\u6d4b\u8bd5\u7684\u5c0f\u4f19\u4f34\uff0c\u76f8\u4fe1\u90fd\u77e5\u9053\uff0c\u5728Web\u81ea\u52a8\u5316\u6d4b\u8bd5\u4e2d\uff0c\u6709\u4e00\u6b3e\u81ea\u52a8\u5316\u6d4b\u8bd5\u795e\u5668\u5de5\u5177:\u00a0selenium\u3002\u7ed3\u5408\u6807 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,1,21],"tags":[689,690,688,632,691],"class_list":["post-1097","post","type-post","status-publish","format-standard","hentry","category-python","category-net-security","category-script","tag-playwright","tag-python","tag-691"],"_links":{"self":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts\/1097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1097"}],"version-history":[{"count":0,"href":"https:\/\/byy3.com\/index.php?rest_route=\/wp\/v2\/posts\/1097\/revisions"}],"wp:attachment":[{"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/byy3.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}